我刚开始使用Python scikit-learn包来做线性回归。我对它所需的数据集的维度感到困惑。例如,我想使用以下代码在Y
上回归X
from sklearn import linear_model
x=[0,1,2]
y=[0,1,2]
regr = linear_model.LinearRegression()
regr.fit (x,y)
print('Coefficients: n', regr.coef_)
系统返回错误:元组索引超出范围。根据scikit-learn网站,有效的数组应该像
x=[[0,0],[1,1],[2,2]]
y=[0,1,2]
(http://scikit-learn.org/stable/modules/linear_model.html#ordinary-least-squares(
from sklearn import linear_model
x=[[0,0],[1,1],[2,2]]
y=[0,1,2]
regr = linear_model.LinearRegression()
regr.fit (x,y)
print('Coefficients: n', regr.coef_)
所以这意味着包不能在Y[i]
上回归X[i]
两个数字? 它一定是一个数字上的数组? 就像X
[0,0]
到Y
0
提前谢谢。
你可以。只需重塑您的数据即可x = [[0], [1], [2]]
。
在这种情况下,数据中的每个点都将有一个特征 - 单个数字。
Scikit 要求你的 x 是一个二维数组。它不必是一个 numpy 数组。您始终可以使用简单的python列表。
如果你把你的x作为一个一维数组,就像你刚才在问题中提到的,你可以简单地执行以下操作:
x = [[value] for value in [0,1,2]]
这将在 x 中存储 1D 数组的 2D 数组,即列表的每个单独值都存储为数组。
x
也可以转换为numpy数组,然后按如下方式重塑:
import numpy as np
x = np.array(x).reshape(-1, 1)
这会将您的数据转换为 2D 数组,以便您可以使用它来拟合 sklearn 中的线性回归模型。
array([[0],
[1],
[2]])