出于实践目的,我正在尝试编写自己的逻辑回归(使用批处理/小批处理梯度下降)。
我生成了一个具有正态分布输入的随机数据集(请参见下文),并且输出为二进制(0,1)。我手动将系数用于输入,并希望能够重现它们(请参见下面的代码段)。但是,令我惊讶的是,我自己的代码或sklearn LogisticRegression都无法再现实际数字(尽管符号和大小顺序一致)。此外,我的算法产生的系数与sklearn产生的系数不同。 我会误解逻辑回归的系数是什么吗?
对于这种差异的任何见解,我将不胜感激。
谢谢!
编辑:我尝试使用statsmodels
Logit并获得了第三组系数略有不同的值
一些可能相关的信息: 我使用几乎相同的代码编写了线性回归器,并且运行良好,因此,我相当有信心这不是代码中的问题。同样,我的回归器实际上在训练集上的表现优于sklearn,并且它们在测试集上具有完全相同的准确性,因此我没有理由相信回归器是错误的。
用于生成数据集的代码段:
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)
答案 0 :(得分:0)
截获是什么?这真的不足为奇,因为您的y
是3次多项式,而您的模型只有两个系数,而需要3 + y截距来建模预测变量的响应变量。
此外,例如由于SGD,值可能会有所不同。
不确定,但是系数可能不同,并且对于有限的点集返回正确的y。每个模型的指标是什么?那些不同吗?