如何修复代码以基于X1和X2预测Y

时间:2019-06-13 11:22:57

标签: python scikit-learn

我有以下数据:

X1   X2   Y
-10  4    0
-10  3    4
-10  2.5  8
-8   3    7
-8   4    8
-8   4.4  9
0    2    9
0    2.3  9.2
0    4    10
0    5    12

我需要创建一个简单的回归模型来预测给定X1和X2的Y:Y = f(X1,X2)。

这是我的代码:

poly = PolynomialFeatures(degree=2)
X1 = poly.fit_transform(df["X1"].values.reshape(-1,1))
X2 = poly.fit_transform(df["X2"].values.reshape(-1,1))
clf = linear_model.LinearRegression()
clf.fit([X1,X2], df["Y"].values.reshape(-1, 1))
print(clf.coef_)
print(clf.intercept_)

Y_test = clf.predict([X1, X2])
df_test=pd.DataFrame()
df_test["X1"] = df["X1"]
df_test["Y"] = df["Y"]
df_test["Y_PRED"] = Y_test

df_test.plot(x="X1",y=["Y","Y_PRED"], figsize=(10,5), grid=True)
plt.show()

但是它在第clf.fit([X1,X2], df["Y"].values.reshape(-1, 1))行失败:

  

ValueError:找到的数组为暗3。估计器应为<= 2

该模型似乎无法使用2个输入参数X1和X2。我应该如何更改代码以对其进行修复?

1 个答案:

答案 0 :(得分:0)

好吧,您的错误在于附加要素数据帧的方式。相反,您应该将它们串联起来,例如使用pandas:

import pandas as pd

X12_p = pd.concat([pd.DataFrame(X1), pd.DataFrame(X2)], axis=1)

或使用numpy相同:

import numpy as np

X12_p = np.concatenate([X1, X2], axis=1)

您的最终代码段应如下所示:

# Fit
Y = df["Y"].values.reshape(-1,1)
X12_p = pd.concat([pd.DataFrame(X1), pd.DataFrame(X2)], axis=1)
clf.fit(X12_p, Y)

# Predict
Y_test = clf.predict(X12_p)

您还可以使用以下方法评估一些性能指标,例如rmse:

from sklearn.metrics import mean_squared_error
print('rmse = {0:.5f}'.format(mean_squared_error(Y, Y_test)))

请注意,您可以通过更改默认参数来从多项式特征中排除偏差项:

PolynomialFeatures(degree=2, include_bias=False)

希望这会有所帮助。