【问题标题】:Multiple Linear Regression Machine Learning in PythonPython中的多元线性回归机器学习
【发布时间】: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.shapeX1.shape 的输出是什么
  • 首先,你不能为X1创建新的labelencoderonehotencoder。使用与 X_train 相同的 labelenocdersonehotencoder。此外,在预处理步骤后显示完整的错误消息和X_trainX1 的形状。
  • 如果您使用最新的 scikit-learn,OneHotEncoder 将自行处理标签编码。不需要单独的 LabelEncoder 对象。至于错误,正如@TirthPatel 所说,如果模型相同,那么预处理也应该保持不变。您应该使用相同的对象来仅transform()(不适合转换)新数据。
  • @Rajitha:特征数据和测试数据中的列数看起来不同,这就是它给出 ValueError 的原因。你能帮我解决一下吗?

标签: python-3.x machine-learning scikit-learn


【解决方案1】:

X和X1的future大小一样吗??
如果X包含五个单词,例如用OneHotEncoder转换的X的形状是(n,5),regressor.fit(X_train, y_train)返回y=b+a1x1+a2x2+…a5x5的反对
如果 X_1 包含 10 个词,例如用 OneHotEnd 转换的 X_1 的形状为 (n,10),则需要 y=b+a1x1+a2x2+….a10x10 的回归量对象来计算 X_1 ,它由使用仅包含 10 个单词的数据进行训练。因此,X_1 (n,10) 不会用 y=b+a1x1+a2x2+…a5x5 计算
更何况,我觉得onehotencoder.fit_transform()之后不需要toarray
我不确定我的回答是否有助于解决您的问题,但我希望。

【讨论】:

  • 非常感谢您的宝贵意见。如果我删除 toarray() ,它会在运行代码时抛出“尺寸不匹配”: output = regressor.predict(X1)
  • 很高兴听到您的结果!如果您对答案有些满意,请考虑通过单击投票旁边的绿色对勾来接受它,以便其他人可以立即看到结果。
猜你喜欢
  • 2019-04-17
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
相关资源
最近更新 更多