提问者:小点点

如果您的数据具有单个特征,则使用array. reshape(-1,1)重塑数据,如果包含单个样本,则使用array.reshape(1,-1)重塑数据


当我从我的数据中预测一个样本时,它会给出重塑错误,但我的模型具有相同数量的行数。这是我的代码:

import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
x = np.array([2.0 , 2.4, 1.5, 3.5, 3.5, 3.5, 3.5, 3.7, 3.7])
y = np.array([196, 221, 136, 255, 244, 230, 232, 255, 267])

lr = LinearRegression()
lr.fit(x,y)

print(lr.predict(2.4))

错误是

if it contains a single sample.".format(array))
ValueError: Expected 2D array, got scalar array instead:
array=2.4.
Reshape your data either using array.reshape(-1, 1) if your data has a 
single feature or array.reshape(1, -1) if it contains a single sample.

共2个答案

匿名用户

您应该将X重塑为2D数组而不是1D数组。拟合模型需要2D数组。i. e(n_samples,n_features)

x = np.array([2.0 , 2.4, 1.5, 3.5, 3.5, 3.5, 3.5, 3.7, 3.7])
y = np.array([196, 221, 136, 255, 244, 230, 232, 255, 267])

lr = LinearRegression()
lr.fit(x.reshape(-1, 1), y)

print(lr.predict([[2.4]]))

匿名用户

错误基本上是说将平面特征数组转换为列数组。reshape(-1,1)完成了这项工作;也可以使用[:,无]

特征数组X的第二维必须与传递给预测()的任何第二维相匹配。由于X被强制转换为2D数组,传递给预测()的数组也应该是2D的。

x = np.array([2.0 , 2.4, 1.5, 3.5, 3.5, 3.5, 3.5, 3.7, 3.7])
y = np.array([196, 221, 136, 255, 244, 230, 232, 255, 267])
X = x[:, None]         # X.ndim should be 2

lr = LinearRegression()
lr.fit(X, y)

prediction = lr.predict([[2.4]])

如果你的输入是一个熊猫列,那么使用双括号([[]])得到一个2D特征数组。

df = pd.DataFrame({'feature': x, 'target': y})
lr = LinearRegression()
lr.fit(df['feature'], df['target'])            # <---- error
lr.fit(df[['feature']], df['target'])          # <---- OK
#        ^^         ^^                           <---- double brackets 

如果我们查看fit()的源代码,首先要做的事情之一是通过validate_data()方法验证输入,该方法调用check_array()来验证Xcheck_array()检查X是否是2D的。X必须是2D的,因为最终,LinearRegression(). fit()调用scery.linalg.lstsq来解决最小二乘问题,lstsq要求X是2D来执行矩阵乘法。

对于分类器,需要第二维来获得特征的数量,这对于获得正确形状的模型系数至关重要。