Advertisement

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)

还没有任何评论哟~