![528dc6fef34da3561dbf8d7ca6f3614f.png](https://i-blog.csdnimg.cn/blog_migrate/beca24c81698a2947059c28dec7b8a45.jpeg)
终于有时间来更新最近的学习成果了,为什么要先介绍逻辑回归这个模型,因为简单,因为万物皆可分类。
提到逻辑回归,很多人会联想到线性回归,做预测数据的模型,其实逻辑回归是做分类的,英文Logistic Regression ,虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。
本质:假设数据服从这个分布,然后使用极大似然估计做参数的估计。
最经典的解释还是吴恩达老师的视频讲解,需要的话可以学习学习,
[中英字幕]吴恩达机器学习系列课程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![8e6943558eda4a280c4519e78145ba58.png](https://i-blog.csdnimg.cn/blog_migrate/075e663e1cd4a18007bb47eec8560782.jpeg)
逻辑回归的公式也就是Sigmod函数,可以发现y的取值永远在0-1之间,输出 Y=1 的对数几率是由输入 x 的线性函数表示的模型,这就是逻辑回归模型。当
![3a282378f105a9ca4cb39d3f843972eb.png](https://i-blog.csdnimg.cn/blog_migrate/9f6cd17a1b01f238e1b6c03cf833c282.png)
![f4262e45a68b656622df355551d4a109.png](https://i-blog.csdnimg.cn/blog_migrate/f0d4c3b9e1de81c1bbcbb329ed18a851.png)
![175a16a3f5338e069fe0e4103644ee90.png](https://i-blog.csdnimg.cn/blog_migrate/3501e355c80f12629e2ea5c1c4ac643c.png)
实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:
- 直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题;
- 不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
- 对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。
今天主要拿癌症数据来做实战操作,真实数据做太多,整个Python的机器学习的安装包都安装了一遍:
1、导入需要的代码块
from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score#矩阵模块
2、导入数据
data=load_breast_cancer()
3、区分特征数据和目标数据
X=data.data
y=data.target
4、构建逻辑回归,使用不同的正则化
lrl1 = LR(penalty="l1",solver="liblinear",C=0.5,max_iter=1000)
lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000)
5、逻辑回归的重要属性,coef_查看每个特征值对应的参数
lrl1=lrl1.fit(X,y)
lrl1.coef_
(lrl1.coef_!=0).sum(axis=1)
lrl2=lrl2.fit(X,y)
lrl2.coef_
(lrl2.coef_!=0).sum(axis=1)
6、模拟整个模型的操作,可见,至少在我们的乳腺癌数据集下,两种正则化的结果区别不大。但随着C的逐渐变大,正则化的强度越来越小,模型在训练集和测试集上的表现都呈上升趋势,直到C=0.8左右,训练集上的表现依然在走高,但模型在未知数据集上的表现开始下跌
l1 = []
l2 = []
l1test = []
l2test = []
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420)
for i in np.linspace(0.05,1.5,19):
lrl1 = LR(penalty="l1",solver="liblinear",C=i,max_iter=1000)
lrl2 = LR(penalty="l2",solver="liblinear",C=i,max_iter=1000)
lrl1 = lrl1.fit(Xtrain,Ytrain)
l1.append(accuracy_score(lrl1.predict(Xtrain),Ytrain))
l1test.append(accuracy_score(lrl1.predict(Xtest),Ytest))
lrl2 = lrl2.fit(Xtrain,Ytrain)
l2.append(accuracy_score(lrl2.predict(Xtrain),Ytrain))
l2test.append(accuracy_score(lrl2.predict(Xtest),Ytest))
graph =[l1,l2,l1test,l2test]
color =["green","black","lightgreen","gray"]
label =["L1","L2","L1test","L2test"]
plt.figure(figsize=(6,6))
for i in range(len(graph)):
plt.plot(np.linspace(0.05,1,19),graph[i],color[i],label=label[i])
plt.legend(loc=0)
plt.show()
![caa7b50b50eadfc97a73da99d0de8ca7.png](https://i-blog.csdnimg.cn/blog_migrate/49632f49ac6385541caf3c24a3d6ce44.png)
7、开始降维处理,还是先导入需要的安装包
from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectFromModel
8、降维导入数据
data=load_breast_cancer()
data.data.shape
9、实例化数据
LR_ = LR(solver="liblinear",C=0.8,random_state=420)#实例化=0.8,较好
cross_val_score(LR_,data.data,data.target,cv=10).mean()#交叉验证;模型,特征矩阵,标签,cv交叉验证10次
10、高效的嵌入法,模块SelectFromModel,不考虑测试集和训练集,全部放到模型中验证
X_embedded=SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target)
X_embedded.shape
11、验证降维后的结果:
#特征数量减少到个位数9,并且模型的效果0.9368并没有下降很多,
cross_val_score(LR_,X_embedded,data.target,cv=10).mean()
![606607cbee51bd10911994e727cc1eec.png](https://i-blog.csdnimg.cn/blog_migrate/b120b08c2c21956bf250822b39e5390a.png)
可以发现,逻辑回归的模型运行快,比较易懂,但是知识点比较多,所以还是要多学习下深层次原理。