在sklearn中的LinearRegression之前转置输入矩阵

时间:2018-08-06 09:32:34

标签: python scikit-learn linear-regression

这是我的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 

我有这些错误https://imgur.com/a/XWzJx0f 我使用http://jupyter.org/try

3 个答案:

答案 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。如果不平方,系数将相应地发生变化