sklearn:调用 LinearRegression.fit() 时发现样本数量不一致的数组
sklearn: Found arrays with inconsistent numbers of samples when calling LinearRegression.fit()
只是想做一个简单的线性回归,但我对这个错误感到困惑:
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.reshape()
,您应该将数组的形状更改为 (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)
expects X(feature matrix)
尝试将您的特征放在这样的元组中:
features = ['TV', 'Radio', 'Newspaper']
X = data[features]
看起来您正在使用 pandas 数据框(来自名称 df2)。
您还可以执行以下操作:
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())
注意:我删除了 "values",因为它将 pandas 系列转换为 numpy.ndarray 并且 numpy.ndarray 没有属性 to_frame()。
我遇到此错误是因为我将数据转换为 np.array
。我通过将我的数据转换为 np.matrix
并进行转置来解决问题。
值错误:
regr.fit(np.array(x_list), np.array(y_list))
正确:
regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))
要分析两个数组(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 是数组中的项目数。
要为 array1 提供正确数量的轴,请执行:
array1 = array1[:, numpy.newaxis]
正如上面提到的,X 参数必须是矩阵或具有已知维度的 numpy 数组。所以你可能会使用这个:
df2.iloc[1:1000, 5:some_last_index].values
因此您的数据框将被转换为具有已知维度的数组,您不需要重新整形
在 Udacity 深度学习基础课程上看到:
df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
我遇到了类似的问题。我的问题是,X 中的行数不等于 y 中的行数。
即特征列中的条目数不等于目标变量中的整体数,因为我从特征列中删除了一些行。
在火车测试拆分期间,您可能犯了一个错误
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)
只是想做一个简单的线性回归,但我对这个错误感到困惑:
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.reshape()
,您应该将数组的形状更改为 (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)
expects X(feature matrix)
尝试将您的特征放在这样的元组中:
features = ['TV', 'Radio', 'Newspaper'] X = data[features]
看起来您正在使用 pandas 数据框(来自名称 df2)。
您还可以执行以下操作:
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())
注意:我删除了 "values",因为它将 pandas 系列转换为 numpy.ndarray 并且 numpy.ndarray 没有属性 to_frame()。
我遇到此错误是因为我将数据转换为 np.array
。我通过将我的数据转换为 np.matrix
并进行转置来解决问题。
值错误:
regr.fit(np.array(x_list), np.array(y_list))
正确:
regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))
要分析两个数组(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 是数组中的项目数。 要为 array1 提供正确数量的轴,请执行:
array1 = array1[:, numpy.newaxis]
正如上面提到的,X 参数必须是矩阵或具有已知维度的 numpy 数组。所以你可能会使用这个:
df2.iloc[1:1000, 5:some_last_index].values
因此您的数据框将被转换为具有已知维度的数组,您不需要重新整形
在 Udacity 深度学习基础课程上看到:
df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
我遇到了类似的问题。我的问题是,X 中的行数不等于 y 中的行数。
即特征列中的条目数不等于目标变量中的整体数,因为我从特征列中删除了一些行。
在火车测试拆分期间,您可能犯了一个错误
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)