欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn中的LogisticRegression

程序员文章站 2022-07-06 11:04:29
...

sklearn中的逻辑回归接口如下:

sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)

模型参数

此处只列举重要的超参数,部分参数大部分情况下直接使用默认值即可。

参数 说明
penalty 正则化参数,三种取值:{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’
C 正则强度的倒数;必须为正浮点数。与支持向量机一样,较小的值指定更强的正则化。
class_weight 样本权重,可以是一个字典或者’balanced’字符串,默认为None。
对于二分类模型,可以这样指定权重:class_weight={0:0.9,1:0.1}
当class_weight=‘balanced’,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
solver 优化算法选择参数,五种取值:newton-cg,lbfgs,liblinear,sag,saga。default = liblinear。
liblinear适用于小数据集,而sag和saga适用于大数据集因为速度更快。
如果是L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。但是如果penalty是L1正则化的话,就只能选择‘liblinear’了。
multi_class 分类方式选择参数,可选参数为ovr和multinomial,default = ovr。
MvM分类相对精确,但是分类速度没有OvR快
如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了
verbose 日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
warm_start 热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。
n_jobs 并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。
tol 停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解。
fit_intercept 是否存在截距或偏差,bool类型,默认为True。
intercept_scaling 当solver= ‘liblinear’且fit_intercept=True时有用,
max_iter 算法收敛的最大迭代次数,即求取损失函数最小值的迭代次数,默认是100,
dual 默认dual=False,用来指明是否将原问题改成他的对偶问题,对偶问题可以理解成相反问题,比如原问题是求解最大值的线性规划,那么他的对偶问题就是转化为求解最小值的线性规划,适用于样本较小的数据集,因样本小时,计算复杂度较低。

说明:

(1)参数penalty的三种正则化,分别对应如下的数学原理:

2\ell_2正则化:minw,c12wTw+Ci=1nlog(exp(yi(XiTw+c))+1).\min_{w, c} \frac{1}{2}w^T w + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1) .

1\ell_1正则化:minwc w 1+C sumi=1nlog expyiXiTw+c+1\min_ {w,c} \ | w \ | _1 + C \ sum_ {i = 1} ^ n \log(\ exp(-y_i(X_i ^ T w + c))+ 1)

Elastic-Net正则化:minwc1 rho2wTw+ρw 1+Ci=1nlogexpyiXiTw+c+1\min_ {w,c} \frac {1-\ rho} {2} w ^ T w + \rho \| w \ | _1 + C \sum_ {i = 1} ^ n \log(\exp(-y_i (X_i ^ T w + c))+ 1)

(2)class_weight作用:

在诈骗电话与正常电话的分类模型中,将诈骗电话归为正常电话的代价很高,我们宁愿选择将正常电话归为诈骗电话,然后在做处理,这时,我们可以提高诈骗电话的权重。还有一种情况是解决样本极度不平衡问题。

(3)solver的五种取值:

liblinear:坐标轴下降法来迭代优化损失函数。
lbfgs:利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
newton:利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
saga:线性收敛的随机优化算法的的变重。

如果是L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。但是如果penalty是L1正则化的话,就只能选择‘liblinear’了。这是因为L1正则化的损失函数不是连续可导的,而{‘newton-cg’, ‘lbfgs’,‘sag’}这三种优化算法时都需要损失函数的一阶或者二阶连续导数。而‘liblinear’并没有这个依赖。

sklearn中的LogisticRegression

模型方法

方法 说明
fit(X, y, sample_weight=None) 拟合模型,用来训练LR分类器,其中X是训练样本,y是对应的标记向量
predict(X) 用来预测样本,也就是分类,X是测试集。返回array。
predict_proba(X) 输出分类概率。返回每种类别的概率,按照分类类别顺序给出。如果是多分类问题,multi_class=“multinomial”,则会给出样本对于每种类别的概率。
score(X, y, sample_weight=None) 返回给定测试集合的平均准确率(mean accuracy),浮点型数值。 对于多个分类返回,则返回每个类别的准确率组成的哈希矩阵。R^2评估模型

模型的训练结果

参数 说明
classes_ 分类器类别标签列表。
coef_ 决策函数中要素的系数。shape=(1,n_features)或(n_classes,n_features)
intercept_** 决策函数的截距。shape(1,)或ndarray(n_classes,)

实例

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# 初始化模型,使用默认的超参数
clf = LogisticRegression()
# 输入训练数据
clf.fit(X,y)

clf.predict(X[:2, :])
# 输出:array([0, 0])

clf.predict_proba(X[:2, :])
# 输出:array([[9.81797141e-01, 1.82028445e-02, 1.44269293e-08],
#       [9.71725476e-01, 2.82744937e-02, 3.01659208e-08]])

逻辑回归调参比较重要的参数是solver和penalty。

举例:数据量比较少,特征数比较多的情况下,可以使用以下的参数:

 clf = LogisticRegression(solver='liblinear',penalty='l1',n_jobs=-1)