本文参考书《Python机器学习及实践》(范淼 李超 编著)

理论分析

线性分类器

Logistic回归

随机梯度上升

数据分析

代码分析

导入数据

数据包文件名为breast-cancer-wisconsin.data,观察数据发现共十一列,699行,十一列中第1列为序号,2-10列是肿瘤参数,第11列是分类标签,因此先建立一个名称数组,用pandas的read_csv()方法读入数据,随后观察数据进行缺失值的处理。

import pandas as pd
import numpy as npcolumn_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']
data=pd.read_csv('breast-cancer-wisconsin.data',names=column_names)
data=data.replace(to_replace='?',value=np.nan)
data=data.dropna(how='any')
print(data.shape)

输出的结果是处理后数据的行数和列数。

分割数据集

分割数据集用的是sklearn中的train_test_split模块,我们将数据中的75%用于训练,25%用于测试,代码为:

from sklearn.model_selection import train_test_splitX_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)
print(y_train.value_counts())
print(y_test.value_counts())

这段的重点在train_test_split()方法,关于这个方法的介绍这位博主写的非常全面:
https://blog.csdn.net/fxlou/article/details/79189106

若在执行时出现了这样的错误

ImportError: DLL load failed: 找不到指定的模块

多半是由于某个模块的版本和sklearn的版本不兼容导致的,比较常见的不兼容模块有scipy、matplotlib等等,解决方法是卸载目前的模块找到兼容的组合进行安装,这位博主经过实验找到了一个兼容组合:
https://blog.csdn.net/howard789/article/details/107542200

正确运行后的结果为:

上面是训练集每类数量,下面是测试集每类数量。

标准化数据

标准化数据使得每个维度的特征数据方差为1,均值为0,这样预测结果就不会被某些维度过大的特征值主导。具体实现方法是

from sklearn.preprocessing import StandardScalerss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.fit_transform(X_test)

求解模型参数并预测

分别使用logistic回归和随机梯度上升两种方法求解模型参数并预测,fit()用来训练参数,predict()用来预测。

from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifierlr=LogisticRegression()
sgdc=SGDClassifier()
lr.fit(X_train,y_train)
lr_y_predict=lr.predict(X_test)
# print(lr_y_predict)
sgdc.fit(X_train,y_train)
sgdc_y_predict=sgdc.predict(X_test)
# print(lr_y_predict)

性能评估

性能评估的指标选择可以参考下图:

我们用logistic回归模型自带的评分函数来对两个模型的准确性进行评分,并利用classification_report模块获得另外三个指标的结果。

from sklearn.metrics import classification_reportprint('Accuracy of LR Classifier:',lr.score(X_test,y_test))
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))print('Accuarcy of SGD Classifier:',sgdc.score(X_test,y_test))
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

结果为:

通过比较,Logistic模型比随机梯度下降模型在测试集上表现有更高的准确性,这是因为Logistic采用解析的方式精确计算模型参数,而随机梯度下降采用估计值计算模型参数。

完整代码

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import classification_report### 导入数据,删除有缺失值的数据
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']
data=pd.read_csv('breast-cancer-wisconsin.data',names=column_names)
data=data.replace(to_replace='?',value=np.nan)
data=data.dropna(how='any')
# print(data.shape)### 分割数据集为训练集和测试集
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)
# print(y_train.value_counts())
# # print(y_test.value_counts())### 标准化数据
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.fit_transform(X_test)### 用两种方法训练参数并进行预测
lr=LogisticRegression()
sgdc=SGDClassifier()
lr.fit(X_train,y_train)
lr_y_predict=lr.predict(X_test)
# print(lr_y_predict)
sgdc.fit(X_train,y_train)
sgdc_y_predict=sgdc.predict(X_test)
# print(lr_y_predict)### 两种方法的性能评估
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))print('Accuarcy of SGD Classifier:',sgdc.score(X_test,y_test))
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

机器学习实战(1)——线性分类器+Logistic回归解决良/恶性乳腺癌肿瘤预测问题相关推荐

  1. 《python机器学习及实战》学习笔记ch1之良/恶性乳腺癌肿瘤预测

    1.文章说明 本系列文章都是自己学习<python机器学习及实战>这本书时所做的一些笔记而已,仅为学习作参考. 2.数据集地址: 数据地址是书中给出的数据下载地址: https://pan ...

  2. 【机器学习】:sklearn逻辑回归案例分析 《良/恶性乳腺癌肿瘤预测》

    由于对逻辑回归等算法做到深刻理解有点难,目前还在学习中,尽管有现成的模型库,我们还是需要对模型的底层实现有一个了解.这里先记录一下如何利用sklearn的LogisticRegression来做一个简 ...

  3. 一个经典机器学习案例——良/恶性乳腺癌肿瘤预测

    良/恶性乳腺癌肿瘤预测 良/恶性乳腺癌肿瘤预测问题是一个十分经典的机器学习问题,简单来说我们需要利用肿块厚度和细胞尺寸这两个特征来判断肿瘤的类型(良性或者是恶性).数据的下载网站如下:http://n ...

  4. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》第1章 简介篇 学习笔记(三)“良/恶性乳腺癌肿瘤预测”总结

    目录 "良/恶性乳腺癌肿瘤预测" 1.机器学习的三个关键术语 (1)任务 (2)经验 (3)性能 2.机器学习的学习过程 (1)观察测试集数据分布 (2)初始化二类分类器 (3)训 ...

  5. sklearn逻辑回归案例分析 《良/恶性乳腺癌肿瘤预测》

    由于对逻辑回归等算法做到深刻理解有点难,目前还在学习中,尽管有现成的模型库,我们还是需要对模型的底层实现有一个了解.这里先记录一下如何利用sklearn的LogisticRegression来做一个简 ...

  6. 机器学习实例(一)良/恶性乳腺癌肿瘤预测

    数据描述 Number of Instances: 699(as of 15 July 1922) Number of Attributes: 10 plus the class attribute ...

  7. 线性分类器良恶性乳腺癌肿瘤预测

    # 导入pandas与numpy工具包. import pandas as pd import numpy as np# 创建特征列表. column_names = ['Sample code nu ...

  8. 基于逻辑回归的癌症分类预测-良/恶性乳腺癌肿瘤预测

    简介:逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器. 流程分析: 获取数据 数据处理模块(处理缺失值) 数据集划分 特征工程(标准化) 逻辑回归预估 ...

  9. 《Python机器学习及实践》----良/恶性乳腺癌肿瘤预测

    本片博客是根据<Python机器学习及实践>一书中的实例,所有代码均在本地编译通过.数据为从该书指定的百度网盘上下载的. 代码片段: import pandas as pd import ...

最新文章

  1. 我转行成为机器学习和无人车工程师,并收获Offer
  2. 利用git 进行多人协作开发
  3. JSBinding + SharpKit / 实战:转换 Stealth
  4. RHEL4- DNS服务(四)DNS的开机自动启动控制
  5. c语言编译机器码,[转载]单片机C语言到机器码的全过程
  6. 安装redis出现cc adlist.o /bin/sh:1:cc:not found
  7. Acwing 232. 守卫者的挑战
  8. 最近邻插值、双线性插值、双三次插值
  9. (笔试题)滑动窗口的最大值
  10. win2003 iis上运行asp.net配置
  11. mySQL中replace的用法
  12. java 生成pem_生成pem文件 - The NoteBook of EricKong - BlogJava
  13. 您的计算机究竟如何像美味的Reuben三明治
  14. Error:Execution failed for task :app:mergeDebugResourcesSome file crunching failed的解决方法
  15. Android面试英文介绍
  16. app提现至微信(微信企业付款到个人微信号)
  17. 血污夜之仪式秘密巫师实验室收集策略
  18. springboot动态添加log4j2的Appender
  19. 在Excel工作簿中显示网络图片
  20. 自动化工具之SelendroidRobotium

热门文章

  1. centos通过storcli64和smartctl定位定位硬盘盘位和盘符的方法
  2. php 设置输出字体,利用PHP的输出信息控制功能实现Web页面简繁字体的自动转换...
  3. 制作水晶头,网线的排线顺序应怎样排
  4. CLR基础全面版-概念、执行模型、托管模块、程序集、FCL
  5. 燃烧的大专魂,苦战60天,五轮面试,谁说我拿不下大厂offer?
  6. 如何更改计算机里卷标的顺序,怎么修改磁盘的卷标|磁盘的卷标怎么设置
  7. 二阶带有纯延迟系统的PID与模糊控制设计对比(研究生课程实验)
  8. oracle update set 多个字段,Oracle-update同时更新多个字段多个值
  9. 风变人生设计:精准定位职业方向,轻松做出职业规划
  10. 商业思维是每个互联网人都应具备的升维能力