我有以下数据:
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。我应该如何更改代码以对其进行修复?
答案 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)
希望这会有所帮助。