sklearn之逻辑回归

逻辑回归

逻辑回归是一个二分类的算法以及多分类的算法

线性回归与逻辑回归

当在线性回归的结果上,我们添加一个sigmod函数时,线性回归就变成了逻辑回归。

优缺点

  1. 优点:计算代价不高,具有可解释性,易于实现。不仅可以预测出类别,而且可以得到近似概率预测,对许多需要利用概率辅助决策的任务很有用。
    1. 缺点:容易欠拟合,分类精度可能不高。
    1. 适用数据类型:数值型和标称型数据。

sigmod函数

在这里插入图片描述
求导
在这里插入图片描述
函数图像
在这里插入图片描述
当输入值越大,输出值越趋近于1,反之越趋近于0.

损失函数

在这里插入图片描述
总结为一个公式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcHxlB5F-1578762557181)(en-resource://database/750:1)]

使用梯度下降法求参数

求偏导
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1idfTsRX-1578762557183)(en-resource://database/752:1)]
每次迭代地更新公式为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5VR6mSOG-1578762557185)(en-resource://database/754:1)]

多元分类

假如有类别 1 2 3 4类,首先将4个类别分为2大类:1、 2 3 4,如果结果在2 3 4类别中,再将2 3 4类别分为2、3 4类。

逻辑回归在scikit-learn中的使用

from sklearn.datasets import load_breast_cancer # 载入数据
from sklearn.model_selection import train_test_split

cancer = load_breast_cancer()
X = cancer.data
Y = cancer.target

X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2)

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train,Y_train)
train_score = model.score(X_train,Y_train)
test_score = model.score(X_test,Y_test)
train_score

y_pred = model.predict(X_test)


y_pred_proba  =  model.predict_proba (X_test)     # 计算出样本的预测概率

参数说明

penalty:
正则化选择参数
LogisticRegression和LogisticRegressionCV默认就带了正则化项。penalty参数可选择的值为"l1"和"l2".分别对应L1的正则化和L2的正则化,默认是L2的正则化。

solver:优化算法

a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。不能用于L1正则化    
b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。不能用于L1正则化    
c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。不能用于L1正则化    
d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

multi_class:分类方式
有 ovr和multinomial两个值可以选择,默认是 ovr。

OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。    
而MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。

如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg, lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。

class_weight:
类型权重参数

我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。

sample_weight:
样本权重参数

由于样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致我们的模型预测能力下降。遇到这种情况,我们可以通过调节样本权重来尝试解决这个问题。调节样本权重的方法有两种,第一种是在class_weight使用balanced。第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值