【发布时间】:2019-06-06 17:12:38
【问题描述】:
出于练习目的,我正在尝试编写自己的逻辑回归器(使用批量/小批量梯度下降)。
我生成了一个具有正态分布输入的随机数据集(见下文),输出为二进制 (0,1)。我手动使用系数作为输入,并希望能够重现它们(参见下面的代码 sn-p)。然而,令我惊讶的是,我自己的代码和 sklearn LogisticRegression 都无法重现实际数字(尽管符号和数量级是一致的)。此外,我的算法产生的系数与 sklearn 产生的系数不同。 我是否误解了逻辑回归的系数?
我将不胜感激任何对此差异的见解。
谢谢!
编辑:我尝试使用 statsmodels Logit 并得到第三组略有不同的系数值
更多可能相关的信息: 我使用几乎相同的代码编写了一个线性回归器,它运行良好,所以我相当有信心这不是代码中的问题。此外,我的回归器在训练集上的表现实际上优于 sklearn 的,并且它们在测试集上具有完全相同的准确度,所以我没有理由相信回归器是错误的。
生成数据集的代码sn-ps:
o1 = 2
o2 = -3
x[:,1]=np.random.rand(size)*2
x[:,2]=np.random.rand(size)*3
y = np.vectorize(sigmoid)(x[:,1]*o1+x[:,2]*o2 + np.random.normal(size=size))
所以可以看出,输入系数为+2和-3(截取0); sklearn 系数为~2.8 和~-4.8; 我的系数是 ~1.7 和 ~-2.6
以及回归量(其中最相关的部分):
for j in range(bin_size):
xs = x[i]
y_real = y[i]
z = np.dot(self.coeff,xs)
h = sigmoid(z)
dc+= (h-y_real)*xs
self.coeff-= dc * (learning_rate/n)
【问题讨论】:
-
我发布问题时大小为 1,000,但我现在尝试了 10,000,得到的结果基本相同。
标签: python machine-learning scikit-learn logistic-regression