由于对逻辑回归等算法做到深刻理解有点难,目前还在学习中,尽管有现成的模型库,我们还是需要对模型的底层实现有一个了解。这里先记录一下如何利用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())
运行结果:
(683, 11)
Sample code number Clump Thickness ... Mitoses Class
0 1000025 5 ... 1 2
1 1002945 5 ... 1 2
2 1015425 3 ... 1 2
3 1016277 6 ... 1 2
4 1017023 4 ... 1 2[5 rows x 11 columns]
预处理后的数据集如上图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来计算,运行结果:
预测结果为:0.9883040935672515
预测结果为:0.9883040935672515
以上为使用sklearn中的逻辑回归模型来做预测的简单例子,并未涉及太多的底层数学知识,有兴趣的朋友可以查一下相关逻辑回归原理的资料。
参考博客:这里讲很不错,也很细