我在解决一个在线课程中的多变量多项式回归问题时,需要构建一个模型(多项式形式)来预测“汽车价格”,这个价格是“马力”、“整备质量”、“发动机尺寸”和“高速公路油耗”的函数。课程幻灯片中提供的代码对我不起作用,因此我尝试用稍微不同的方法自己解决这个问题,并且(不确定)我成功了。
现在我想确定每个系数对应哪个变量以及对应的幂次。
from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures lm=LinearRegression() pr=PolynomialFeatures(degree=2, include_bias=False) zi=df[['horsepower','curb-weight','engine-size','highway-mpg']] y=df["price"] x_poly=pr.fit_transform(zi) lm.fit(x_poly,y) y_poly_pred=lm.predict(x_poly) print(lm.intercept_) print(lm.coef_)
输出 ‘print(lm.coef_)’ 是一个数组:
[ 3.76158683e+02, 1.09866844e+01, -1.15342835e+02, 2.20081486e+02, 1.67487147e+00, -1.85925420e-01, -1.27963440e+00, -1.97616945e+00, 5.93872420e-04, 1.11397083e-01, -2.12935236e-01, 1.04605018e-01, 2.69312438e-01, 4.36657298e+00]
我如何知道这些系数分别对应哪些变量和哪些幂次?
回答:
一种方法是,你可以这样获取多项式特征的列名:
pr.get_feature_names(zi.columns)
然后
pd.DataFrame(zip(pr.get_feature_names(zi.columns),lm.coef_),columns=["feature","coef_"])
上述代码应该会打印出每个特征的系数
工作示例:
from sklearn.preprocessing import PolynomialFeaturesfrom sklearn.linear_model import LinearRegressionimport pandas as pdimport numpy as npdata = pd.DataFrame.from_dict({ 'x': np.random.randint(low=1, high=10, size=5), 'y': np.random.randint(low=-1, high=1, size=5),})lm=LinearRegression()p = PolynomialFeatures(degree=2)p_data = p.fit_transform(data)lm.fit(p_data,data['y'])print (p.get_feature_names(data.columns))coefmapping = pd.DataFrame(zip(p.get_feature_names(data.columns),lm.coef_),columns=["feature","coef_"])print(coefmapping)
输出:
feature coef_0 1 -1.204939e-141 x -1.165951e-152 y 5.000000e-013 x^2 -6.938894e-184 x y -3.156113e-165 y^2 -5.000000e-01