Sklearn线性回归X和Y输入表

2024-04-29 19:19:10 发布

您现在位置:Python中文网/ 问答频道 /正文

关于sklearn线性模型的输入,我有几个问题。

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数组更好吗?


Tags: 方法模型netmodelnptrain线性sklearn
1条回答
网友
1楼 · 发布于 2024-04-29 19:19:10

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

你知道形状数组(6,1)和形状数组(6,1)之间的区别吗?一开始有点混乱,但第一个是真正的二维数组,正好有一列,第二个是完全一维数组。

下面介绍如何将数据转换为二维数组。是的,在处理这样的数字数据时,应该使用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(广义最小二乘)。这些更易于安装和使用。不过,scikitlearn有更多的特性和高级回归技术。

相关问题 更多 >