sklearn-逻辑回归-max_iter参数讲解

求解梯度,是在损失函数J(θ1,θ2)上对损失函数自身的自变量θ1和θ2求偏导,而这两个自变量,刚好是逻辑回归的预测函数(图1)的参数。

图1:

梯度的含义

梯度是一个向量,因此它有大小也有方向。它的大小,就是偏导数组成的向量的大小,又叫做向量的模,记作d。它的方向,几何上来说,就是损失函数J(θ)的值增加最快的方向,由此只要沿着梯度向量的反方向移动坐标,损失函数J(θ)的取值就会减少的最快,也就最容易找到损失函数的最小值。

步长

步长可以调节损失函数下降的速率。在损失函数降低的方向上,步长越长,θ 的变动就越大,损失函数下降得非常快,需要的迭代次数就很少,但梯度下降过程可能跳过损失函数的最低点,无法获取最优值。
相对的,步长如果很短,θ 的变动就很小,虽然函数逐渐逼近我们需要的最低点,但迭代的速度却很缓慢,迭代次数就需要很多,模型的训练速度就会很慢。
图2:

在 sklearn 中,设置参数 max_iter 最大迭代次数来代替步长,帮助我们控制模型的迭代速度并适时地让模型停下。
max_iter 越大,代表步长越小,模型迭代时间越长
max_iter 越小,代表步长越大,模型迭代时间越短。

迭代结束,获取到 J(θ) 的最小值后,就可以找出这个最小值对应的参数向量 θ,逻辑回归的预测函数也可以根据这个参数向量 θ 来建立了。

max_iter 的学习曲线-乳腺癌数据集

l2 = []
l2test = []
# 区分训练集和测试集,X为特征矩阵,y代表标签,test_size为测试集占比
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size = 0.3, random_state = 420)

# 画 max_iter 的学习曲线,
for i in np.linspace(1, 201, 10):
    lrl2 = LR(penalty="l2", solver="liblinear", C=0.8, max_iter=i)
    lrl2 = lrl2.fit(Xtrain, Ytrain)
    l2.append(accuracy_score(lrl2.predict(Xtrain), Ytrain))
    l2test.append(accuracy_score(lrl2.predict(Xtest), Ytest))

graph = [l2, l2test]
color = ["black", "gray"]
label = ["L2", "L2test"]

# 创建画布
plt.figure(figsize=(20,5))
for i in range(len(graph)):
    plt.plot(np.linspace(1, 201, 10), graph[i], color[i], label=label[i])
# 图例的位置在哪里,0:最佳位置(有时会覆盖曲线),1:右上角 2:左上角 3:左下角 4:右下角
plt.legend(loc=4) 
plt.xticks(np.arange(1, 201, 10))
# 打印画布,如 图3 所示
plt.show()

图3:

由 图3 可见,当 max_iter 达到25左右的时候,即迭代到25次左右的时候,模型的学习效果已经达到了最佳。

注意:max_iter 是设置了最大迭代数,实际情况可能用不到这么多次,我们可以使用属性 .n_iter_ 来调用本次求解中真正实现的迭代次数,代码如下:

# 我们可以使用属性 .n_iter_ 来调用本次求解中真正实现的迭代次数
lr = LR(penalty="l2", solver="liblinear", C=0.8, max_iter=300).fit(Xtrain, Ytrain)
lr.n_iter_

图4:

图4 可见,实际迭代了24次,就完成了模型的构建。如果我们设置的最大迭代次数不够24,则会报异常提示.

solver="liblinear"最大迭代次数不够时报错

ConvergenceWarning: Liblinear failed to converge, increase the number of iterations."the number of iterations.", ConvergenceWarning

solver="sag"最大迭代次数不够时报错

/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/sag.py:326: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge
  "the coef_ did not converge", ConvergenceWarning)

注意:虽然我们在训练过程中,追求的是损失函数的最小值,但也可能意味着我们的模型会过拟合,导致模型在训练集上表现很好,测试集上表现不一定。所以如果 max_iter 报异常提示的情况下,如果模型在训练集和测试集上表现效果都很好,运行又快,可以忽视该异常提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值