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

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

逻辑回归是分类模型哦:逻辑回归实际上是利用sigmoid函数将线性回归进行了归一化,把输出值压缩到了0-1之间,这个值代表的是事件发生的概率

下面通过一个案例来进行分析:《良/恶性乳腺癌肿瘤预测》

这是一个已经提供了的数据集,地址:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

数据预处理:

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','Mitoses','Class']
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')        #去掉空值,any:出现空值行则删除
print(data.shape)
print(data.head())

sklearn逻辑回归案例分析 《良/恶性乳腺癌肿瘤预测》_第1张图片

预处理后的数据集如上图683行,11列,特征包括细胞厚度、细胞大小、形状等九个维度

准备预测数据集:

from sklearn.cross_validation import train_test_split
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=5)

使用train_test_split方法分割数据集为训练集和测试集。但如果为男女类这样的数据集,最好先分类再对分类结果做一个分割数据集,确保数据分割均匀。

使用逻辑回归来预测 良/恶性肿瘤:

from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

ss = StandardScaler()   #标准化数据,保证每个维度的特征数据方差为1,均值为0.使得预测结果不会被某些维度过大的特征值主导
X_train = ss.fit_transform(X_train)    #先拟合,在转换
X_test = ss.transform(X_test)        #上面拟合过,这里直接转换

lr = LogisticRegression(C=1.0,penalty='l1',tol=0.1)    #调用逻辑回归模型,里面的参数可以自己设置,通过交叉验证来判断最优参数,我前面文章有介绍
lr.fit(X_train,y_train)    #使用上面标准化后的数据来训练
lr_predict = lr.predict(X_test)       #得到预测结果

这里使用l2penalization也可以

结果分析:

from sklearn.metrics import accuracy_score
print("预测结果为:{}".format(lr.score(X_test,y_test)))
print("预测结果为:{}".format(accuracy_score(y_test,lr_predict)))
这里可以使用自带的score计算分数,也可以使用accuracy_score来计算



以上为使用sklearn中的逻辑回归模型来做预测的简单例子,并未涉及太多的底层数学知识,有兴趣的朋友可以查一下相关逻辑回归原理的资料。

参考博客:这里讲很不错,也很细

你可能感兴趣的