机器学习之良/恶性乳腺癌肿瘤预测
知识点:
逻辑斯蒂回归分类器
数据预处理
打开ipython网页解释器
1 2 3 | #导入模块 import pandas as pd import numpy as np |
1 2 3 4 5 6 7 8 9 10 | #创建特征列表表头 column_names = [ 'Sample code number' , 'Clump Thickness' , 'Uniformity of Cell Size' , 'Uniformity of Cell Shape' , 'Marginal Adhesion' , 'Single Epithelial Cell Size' , 'Bare Nuclei' , 'Bland Chromatin' , 'Normal Nucleoli' , 'Mitoses' , 'Class' ] #使用pandas.read_csv函数从网上读取数据集 data = pd.read_csv( 'https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data' ,names=column_names) #将?替换为标准缺失值表示 data = data.replace(to_replace= '?' ,value = np.nan) #丢弃带有缺失值的数据(只要有一个维度有缺失便丢弃) data = data.dropna(how= 'any' ) #查看data的数据量和维度 data.shape |
维度打印信息为:
有683条数据,维度为11
如果用mac环境,在读取网络上数据集时候可能会报错,解决方案,打开Finder,找到python解释器,点击安装即可
处理后数据集如下:
由于原始数据没有提供对应的测试样本用于评估模型性能,这里对带标记的数据进行分割,25%作为测试集,其余作为训练集
1 2 3 4 5 6 | #使用sklearn.cross_validation里的train_test_split模块分割数据集 from sklearn.cross_validation import train_test_split #随机采样25%的数据用于测试,剩下的75%用于构建训练集 X_train,X_test,y_train,y_test = train_test_split(data[column_names[1:10]],data[column_names[10]],test_size = 0.25,random_state = 33) #查看训练样本的数量和类别分布 y_train.value_counts() |
1 2 | #查看测试样本的数量和类别分布 y_test.value_counts() |
建立模型,预测数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #从sklearn.preprocessing导入StandardScaler from sklearn.preprocessing import StandardScaler #从sklearn.linear_model导入LogisticRegression(逻辑斯蒂回归) from sklearn.linear_model import LogisticRegression #从sklearn.linear_model导入SGDClassifier(随机梯度参数) from sklearn.linear_model import SGDClassifier<br><br>#标准化数据,保证每个维度的特征数据方差为1,均值为,使得预测结果不会被某些过大的特征值而主导(在机器学习训练之前, 先对数据预先处理一下, 取值跨度大的特征数据, <br>我们浓缩一下, 跨度小的括展一下, 使得他们的跨度尽量统一.) ss = StandardScaler() X_train = ss.fit_transform(X_train) X_test = ss.transform(X_test)<br><br>#初始化两种模型 lr = LogisticRegression() sgdc = SGDClassifier()<br><br>#调用逻辑斯蒂回归,使用fit函数训练模型参数 lr.fit(X_train,y_train)<br>#使用训练好的模型lr对x_test进行预测,结果储存在变量lr_y_predict中 lr_y_predict = lr.predict(X_test)<br><br>#调用随机梯度的fit函数训练模型 sgdc.fit(X_train,y_train)<br>#使用训练好的模型sgdc对X_test进行预测,结果储存在变量sgdc_y_predict中 sgdc_y_predict = sgdc.predict(X_test) |
下面查看两种模型的预测结果
使用线性分类模型从事良/恶性肿瘤预测任务的性能分析
1 2 3 4 5 6 7 | #从sklearn.metrics导入classification_report from sklearn.metrics import classification_report #使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果 print( 'Accuracy of LR Classifier:' ,lr.score(X_test,y_test)) #使用classification_report模块获得逻辑斯蒂模型其他三个指标的结果(召回率,精确率,调和平均数) print(classification_report(y_test,lr_y_predict,target_names=[ 'Benign' , 'Malignant' ])) |
1 2 3 4 | #使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果 print( 'Accuarcy of SGD Classifier:' ,sgdc.score(X_test,y_test)) ##使用classification_report模块获得随机梯度下降模型其他三个指标的结果 print(classification_report(y_test,sgdc_y_predict,target_names=[ 'Benign' , 'Malignant' ])) |
结论:通过比较,逻辑斯蒂模型比随机梯度下降模型在测试集上表现有更高的准确性,因为逻辑斯蒂采用解析的方式精确计算模型参数,而随机梯度下降采用估计值
特点分析:逻辑斯蒂对参数的计算采用精确解析的方法,计算时间长但是模型性能高,随机梯度下降采用随机梯度上升算法估计模型参数,计算时间短但产出的模型性能略低,一般而言,对于训练数据规模在10万量级以上的数据,考虑到时间的耗用,推荐使用随机梯度算法
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!
· langchain0.3教程:从0到1打造一个智能聊天机器人