Scikit learn sklearn:调用LinearRegression.fit()时发现数组的样本数不一致
我只是试着做一个简单的线性回归,但我对这个错误感到困惑:Scikit learn sklearn:调用LinearRegression.fit()时发现数组的样本数不一致,scikit-learn,Scikit Learn,我只是试着做一个简单的线性回归,但我对这个错误感到困惑: regr = LinearRegression() regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values) 产生: ValueError: Found arrays with inconsistent numbers of samples: [ 1 999] 这些选择必须具有相同的维度,并且它们应该是numpy数组,那么我缺少什么呢 看起来sklearn需要的
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)
产生:
ValueError: Found arrays with inconsistent numbers of samples: [ 1 999]
这些选择必须具有相同的维度,并且它们应该是numpy数组,那么我缺少什么呢 看起来sklearn需要的数据形状为(行号、列号)。 如果数据形状是(行号),如
(999,)
,则它不起作用。
通过使用numpy.reformate()
,您应该将数组的形状更改为(999,1)
,例如使用
data=data.reshape((999,1))
在我的情况下,这是有效的 我认为regr.fit的“X”参数需要是一个矩阵,所以下面应该可以
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
尝试将您的功能放在一个元组中,如下所示:
features = ['TV', 'Radio', 'Newspaper']
X = data[features]
功能=[“电视”、“收音机”、“报纸”]
X=data[features]看起来您正在使用熊猫数据帧(来自名称df2) 您还可以执行以下操作:
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())
注意:我删除了将pandas系列转换为numpy.ndarray的“值”,而numpy.ndarray没有_frame()属性。我遇到了此错误,因为我将数据转换为
np.array
。我通过将数据转换为np.matrix
并进行转置,解决了这个问题
值错误:
regr.fit(np.array(x\u列表)、np.array(y\u列表))
正确:
regr.fit(np.transpose(np.matrix(x_列表)),np.transpose(np.matrix(y_列表)))
要分析两个数组(array1和array2),它们需要满足以下两个要求:
1)他们需要成为一个numpy.ndarray
核对
type(array1)
# and
type(array2)
如果情况并非如此,则至少执行其中一项
array1 = numpy.ndarray(array1)
# or
array2 = numpy.ndarray(array2)
2)尺寸需要如下所示:
array1.shape #shall give (N, 1)
array2.shape #shall give (N,)
N是数组中的项数。
要为阵列1提供正确数量的轴,请执行以下操作:
array1 = array1[:, numpy.newaxis]
正如上面提到的,X参数必须是一个矩阵或一个具有已知维数的numpy数组。所以你可以用这个:
df2.iloc[1:1000, 5:some_last_index].values
<>你的数据文件将被转换成一个已知维度的数组,你不必在UDAQUEST学习基础课程上看到它< P>:
df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
我面临着类似的问题。在我的例子中,问题是,X中的行数不等于y中的行数
i、 e.功能列中的条目数不等于目标变量中的实体数,因为我从功能列中删除了一些行。在列车测试拆分期间,您可能会犯错误
x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
以上代码是正确的
你可能会像下面这样做,这是错误的
x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
有几天我也面临同样的问题。原因是数组大小不同。我的数据形状是(10L,),如何将其转换为(10L,1)。当我使用data=data.reforme(len(data),1)时,生成的形状是(10L,1L)而不是(10L,1)@user3841581请参考此内容。@Boern感谢您的评论。我还发现,X_列的大小应该是(N,1),但y_列的大小应该是(N,)而不是(N,1),否则它不起作用,至少对我来说不起作用。数据。如果数据是序列对象,重塑(…)可能会显示去润滑警告。使用data.values.reformate(…)data=data.reformate(-1,1)谢谢!这真的是最简单、最容易理解的!实际上,Y参数应为(长度,)形状。谢谢
x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)