Sklearn线性回归X和Y输入格式

时间:2015-04-05 20:53:54

标签: python scikit-learn linear-regression

我对sklearn linear_model.LinearRegression(模块)的输入有几个问题。

ages_train = [[20, 10000], [22, 12000], [22, 14000], [25, 17000], [30, 29000]]
net_worths_train = [10000, 12000, 14000, 17000, 29000]

reg = linear_model.LinearRegression()
reg.fit(ages_train, net_worths_train)

上述工作但是很难绘制。例如,这样做不会起作用:

plt.scatter(ages_train, net_worths_train, color = "b", label = "train data")

所以我想做的就是输入:

ages_train = np.array([20, 22, 25, 27, 30, 31, 31, 34, 42, 50])
net_worths_train = np.array([10000, 12000, 16000, 20000, 30000, 33000, 34000, 38000, 49000, 60000])

但是这种数据格式不适用于linear_model.LinearRegression的.fit()函数。什么是输入数据的正确方法,并使其易于绘图?并且最好使用numpy数组吗?

1 个答案:

答案 0 :(得分:4)

查看documentation for scikits.learn。您将看到X和Y分别需要是二维形状数组(n_samples,n_features)和(n_sample,n_targets)。即使您只有一个功能和一个目标,情况也是如此。

你知道一个形状数组(6,1)和一个形状数组(6,)之间的区别吗?起初有点令人困惑,但第一个是真正的二维数组,碰巧有一列,第二个是完整的一维数组。

以下是将数据转换为2d数组的方法。是的,在使用像这样的数字数据时,你应该使用numpy而不是list。

ages_train = np.array([20, 22, 25, 27, 30, 31, 31, 34, 42, 50])
net_worths_train = np.array([10000, 12000, 16000, 20000, 30000, 33000, 34000, 38000, 49000, 60000])
reg.fit(ages_train[:, np.newaxis], net_worths_train[:, np.newaxis])
print reg.coef_, reg.intercept_

顺便说一句,如果你真的只想做简单的线性回归,可以考虑np.polyfit(多项式拟合)或np.linalg.lstsq(广义最小二乘)。这些更容易安装和使用。但是,Scikits-learn还有更多的功能和先进的回归技术。

相关问题