这是我的python程序:
import numpy as np
from sklearn import linear_model
X=np.array([[1, 2, 4]]).T**2
y=np.array([1, 4, 16])
model=linear_model.LinearRegression()
model.fit(X,y)
print('Coefficients: \n', model.coef_)
结果我有:
Coefficients:
[1.]
这是我用sklearn测试的第一个程序。 我的问题是:为什么我必须在第三条指令中使用转置.T ** 2? 没有
T**2
答案 0 :(得分:1)
作为documentation says,您必须传递具有n_samples(3)和n_features(1)的矩阵。因此,以[[1,2,3]]形式输入的X需要内部向量处于垂直位置。
** T之后:
array([[ 1],
[ 4],
[16]])
这是实际情况:https://machinelearningmastery.com/solve-linear-regression-using-linear-algebra/
答案 1 :(得分:0)
您必须在相同尺寸(相同数量的训练样本)中匹配X,y
如果不使用移调,则有1个训练样本[1,2,4]
,但有3个标签不匹配
如果使用转置,则可能有[1][2][4]
3个样本,因此可以匹配3个标签
**2
无关紧要
答案 2 :(得分:0)
(1,3)中矩阵X的初始形状。您需要将(3,1)形式的矩阵作为文档says传递,并在Alessandro的答复中提到
** 2部分仅对矩阵X的每个元素平方。您可以在不使用该部分的情况下运行它。系数将不同。当前,当平方时,您拥有的每个X和y值分别为(1,1),(4,4)和(16,16),因此系数(方程式y = mx + c的斜率)如果绘制在图)为1。如果不平方,系数将相应地发生变化