通过Sklearn使用梯度下降和LBFGS训练物流回归

问题描述

我有一组数据,该数据包含24个数据点X,0和1个标签Y 我试图编写自己的代码来研究物流回归
代码

import numpy as np
x = np.matrix([[1,1.00,2.00],[1,2.45,2.53],1.42,1.00],3.00,2.08],3.71,3.05],5.55],2.00,1.50],4.71,8.00],4.00],1.50,6.00],6.50],6.00,5.00,4.03,5.06],6.02,7.01],7.04,8.04],9.05,7.04],8.00,8.08],9.08,4.08],7.00,9.00],9.00,1.00]
             ])

y = np.matrix([[0],[0],[1],[1] 
              ])

def logistics(ws) : return 1/(1+np.exp(-ws))
w = np.asmatrix(np.ones((np.shape(x)[1],1))) 

for i in range(1000000):
    oldw = w[0]
    w = w - 0.001*(1/24)*(x.transpose()*(logistics(x*w)-y))
    if (oldw-w[0])<0.00001: 
        break
    
print(w)

重量:[[-8.21175275] [1.16899559] [0.45822586]]




但是,当我使用Sklearn进行操作

log_reg = LogisticRegression(solver = 'lbfgs',multi_class= 'auto',penalty='none',tol=1e-5,max_iter=500000,fit_intercept=True)
log_reg.fit(x,y)
print(log_reg.coef_)
print(log_reg.n_iter_)

log_reg = LogisticRegression(solver = 'sag',y)
print(log_reg.coef_)
print(log_reg.n_iter_)

log_reg = LogisticRegression(solver = 'saga',y)
print(log_reg.coef_)
print(log_reg.n_iter_)

重量
lbfgs:[[-7.19179125 1.95891802 0.94968916]]
凹陷:[[-7.10130558 1.93561401 0.93468949]]
传奇:[[-7.0160153 1.91365099 0.92056697]]

你会发现梯度下降训练的重量与lbfgs / sag / saga相距甚远 我猜是因为以下原因

  1. 梯度下降达到最小值时会非常缓慢地收敛,因为凸曲线几乎是平坦的
  2. 我的算法/概念是错误的,但是我很确定自己可以从参考书中安静地了解方程式,如果有人希望指出的话
  3. 如果样本增加到一千,则可能没有足够的样本用于训练。梯度下降可以近似那些Sklearn算法

问题
我的目的是研究物流回归并使用Sklearn检查我自己的代码结果(权重),但这似乎不是一个好主意,有什么方法可以代替Sklearn吗?
物流回归中权重不一致的问题(从上到下)是否正确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)