1.【基础】良/恶性乳腺癌肿瘤数据分类任务---LR
发布时间
阅读量:
阅读量
本文所有实现代码均来自《Python机器学习及实战》
#-*- coding: UTF-8 -*-
#第一步:数据预处理
import pandas as pd
import numpy as np
#设置字段名,原始数据没有中没有每一维数据代表的含义
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','mitnoses','class']
#导入数据,第一个参数可以是网址,也可以是文件在系统中的路径
data = pd.read_csv('/Users/xxxx/Desktop/python/breast-cancer-wisconsin.data',names=column_names)
#查看数据的前四项
print 'data.head(4):\n',data.head(4)
#将?替换为标准缺失值
data = data.replace(to_replace='?',value=np.nan)
#丢失带有缺失值的数据(只要有一个纬度缺失就舍弃)
data = data.dropna(how='any')
#输出data的数据量和维度
print 'data.shape:',data.shape
#第二步:训练、测试数据
from sklearn.cross_validation import train_test_split
#将样本按照3:1划分训练集和测试集,参数解释:
# train_data:所要划分的样本特征集 1~9为特征值
# train_target:所要划分的样本结果 10表示label
# test_size:样本占比,如果是整数的话就是样本的数量
# random_state:是随机数的种子。
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()
#第三步:使用线性分类模型中的逻辑回归和SGD分类器两种方法获得肿瘤预测模型
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression,SGDClassifier
#标准化数据,保证每一个维度的特征数据方差为1,均值为0.使得预测结果不会被某些维度过大的特征值所主导
ss=StandardScaler()
#注意,X_train与X_test的标准化方法不同
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
#初始化LogisticRegression与SGDClassifier
lr=LogisticRegression()
sgdc=SGDClassifier()
#1.调用LogisticRegression中的fit函数来训练模型参数
lr.fit(X_train,y_train)
#使用训练好的模型lr对X_test进行预测,结果储存在变量ly_y_predict中
lr_y_predict = lr.predict(X_test)
#2.调用SGDClassifier中的fit函数来训练模型参数
sgdc.fit(X_train,y_train)
#使用训练好的模型sgdc对X_test进行预测,结果储存在变量sgdc_y_predict中
sgdc_y_predict = sgdc.predict(X_test)
#第四步:使用线性分类模型中的classification_report模块对肿瘤预测模型的性能进行分析
from sklearn.metrics import classification_report
#1.使用逻辑回归模型自带的评分函数score获得模型在测试集上对准确性结果
# 为什么lr.score()参数是测试数据而不是预测数据:因为此处的lr是已经建立好的预测模型,所以用测试数据检验这个模型好不好
print 'Accuracy Of LR:',lr.score(X_test,y_test)
#利用classification_report模块获得LR的其他三个指标(pression,recall,f1 score)
print classification_report(y_test,lr_y_predict,target_names=['Bebign','Malignat'])
#2.使用SGD模型自带的评分函数score获得模型在测试集上的准确性结果
print 'Accuracy Of SGD:',sgdc.score(X_test,y_test)
#利用classification_report模块获得LR的其他三个指标(pression,recall,f1 score)
print classification_report(y_test,sgdc_y_predict,target_names=['Bebign','Malignat'])
#总结:
#1.LogisticRegression比SGDClassifier在测试集上表现出更高的准确性,因为sklearn用解析的方式精确计算LR的参数,而使用梯度法估计SGD的模型参数
#2.对于10万量级以上的数据,考虑到时间的耗用,推荐使用SGD对模型参数进行估计
代码解读
全部评论 (0)
还没有任何评论哟~
