多项式回归其实本质上与线性回归一样,在sklearn中,多项式回归与线性回归的使用方法一致,唯一不同的是需要我们自己手动创造多项式(生成新特征),然后再使用线性回归的方法来进行拟合,同样该方法可以在逻辑回归上尝试。
多项式变化
sklearn.preprocessing.PolynomialFeatures(degree=2,interaction_only=False,include_bias=True)
1.degree
多项式中的次数,默认为2
2.interaction_only
布尔值是否只产生交互项,默认为False
3.include_bias
布尔值,是否产出与截距项相乘的 ,默认True
对于多项式回归来说,我们已经为线性回归准备好了x0(截距的系数),但是线性回归并不知道,会将x0当作一个特征,所以一般将include_bias设置为false,或者关闭线性回归中的fit_intercept。
如果我们只要求高次项的话,X1X2会是一个比X1**2更好的高次项,因为X1X2和X1之间的共线性会比X1**2与X1之间的共线性好那么一点点(只是一点点),当interaction_only为True的时候,只生成交互项。
重要接口get_feature_names(),返回每个特征的名称,括号内还可以传入例如DataFrame的列标签,返回的结果就会使列标签的变化,不然默认x0,x1等等
同时可以使用DataFrame,将特征对用的系数放到dataframe中进行排序
coeff = pd.DataFrame([poly.get_feature_names(X.columns),reg.coef_.tolist()]).T
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
# 生成数据
X = np.arange(6).reshape(3, 2)
# array([[0, 1],
# [2, 3],
# [4, 5]])
# 尝试二次多项式
print(PolynomialFeatures(degree=2).fit_transform(X))
# X**0 x1 x2 x1**2 x1*x2 x2**2
# array([[ 1., 0., 1., 0., 0., 1.],
# [ 1., 2., 3., 4., 6., 9.],
# [ 1., 4., 5., 16., 20., 25.]])
# 只生成交互项
print(PolynomialFeatures(degree=2,interaction_only=True).fit_transform(X))
# array([[ 1., 0., 1., 0.],
# [ 1., 2., 3., 6.],
# [ 1., 4., 5., 20.]])
# 取消截距项
print(