【发布时间】:2020-03-27 20:55:15
【问题描述】:
我正在尝试使用多元线性回归机器学习根据某些输入评估输出。我已经训练了数据并在运行以下代码时获得了正确的预期值:
dataset = pd.read_excel('TEST.xlsx')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 5].values
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[:, 0] = labelencoder.fit_transform(X[:, 0]) # 1ST COLUMN
labelencoder1 = LabelEncoder()
X[:, 1] = labelencoder1.fit_transform(X[:, 1]) # 2ND COLUMN
labelencoder2 = LabelEncoder()
X[:, 2] = labelencoder2.fit_transform(X[:, 2]) # # 3RD COLUMN
onehotencoder = OneHotEncoder(categorical_features = "all")
X = onehotencoder.fit_transform(X).toarray()
# Avoiding the Dummy Variable Trap
X = X[:, 1:]
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test) # TILL HERE ITS WORKING AS EXPECTED
现在我正在尝试使用相同的模型来评估另一组输入数据,如下所示:
dataset1 = pd.read_excel('TEST1.xlsx') # NEW SET OF INPUT RECORDS TO BE EVALUATE
X1 = dataset1.iloc[:, :-1].values
# Encoding categorical data
labelencoder3 = LabelEncoder()
X1[:, 0] = labelencoder3.fit_transform(X1[:, 0])
labelencoder4 = LabelEncoder()
X1[:, 1] = labelencoder4.fit_transform(X1[:, 1])
labelencoder5 = LabelEncoder()
X1[:, 2] = labelencoder5.fit_transform(X1[:, 2])
onehotencoder2 = OneHotEncoder(categorical_features = "all")
X1 = onehotencoder2.fit_transform(X1).toarray()
X1 = X1[:, 1:]
output = regressor.predict(X1)
但是当我运行这段代码时出现以下错误:
ValueError:形状 (6,13) 和 (390,) 未对齐:13 (dim 1) != 390 (dim 0)
如果有人能帮我解决这个问题,那就太好了。
【问题讨论】:
-
X.shape和X1.shape的输出是什么 -
首先,你不能为
X1创建新的labelencoder和onehotencoder。使用与X_train相同的labelenocders和onehotencoder。此外,在预处理步骤后显示完整的错误消息和X_train和X1的形状。 -
如果您使用最新的 scikit-learn,
OneHotEncoder将自行处理标签编码。不需要单独的LabelEncoder对象。至于错误,正如@TirthPatel 所说,如果模型相同,那么预处理也应该保持不变。您应该使用相同的对象来仅transform()(不适合转换)新数据。 -
@Rajitha:特征数据和测试数据中的列数看起来不同,这就是它给出 ValueError 的原因。你能帮我解决一下吗?
标签: python-3.x machine-learning scikit-learn