解决非线性问题
- 线性模型 + 分箱
- 原理:将数据分为n段,对每一段进行分段线性拟合,拟合的结果是线性分段函数
- KBinsDiscretizer
- 参数
- n_bins
- 分几箱
- encode
- ‘onehot’
- 独热编码,将数据的分箱转化为1——n列,特征为(0,1),属于哪一列在相应的列上编码为1
- ‘onehot’
- n_bins
- 接口
- bin_edges_
- 返回分箱的上下边界
- bin_edges_
- 实现
- 导入模块
- from sklearn.preprocessing import KBinsDiscretizer
- 建立模型
- enc = KBinsDiscretizer(n_bins = 10, encode = ‘onehot’)
- 训练和输出
- X_binned = enc.fit_transform(X)
- 转化测试类(直接用训练x的分箱数据对测试集进行分箱)
- line_binned = enc.transform(line)
- 查看分箱界限
- enc.bin_edges_[0]
- 画出分箱界限
- ax.vlines(enc.bin_edges_[0], *plt.gca().get_ylim(), linewidth = 1, alpha = 0.2)
- 将训练的x直接代入到线性模型中
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1tNdAB0-1683700195399)(data/user-data/509837/images/1bc608c2b2aa9d595176bb0c93d85fbc.png)]
- 导入模块
- 最佳分箱数目确定
- 绘制学习曲线
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sag2GD9h-1683700195401)(data/user-data/509837/images/879d2f405239cacc5cf2cebc6fe9892b.png)]
- 绘制学习曲线
- 参数
- 线性模型 + 多项式(多项式回归)
- 原理:对原有数据特征进行升维,在高维空间中进行线性拟合,拟合的结果是曲线。多项式回归是广义上的线性模型,因为特征升维独立于线性模型算法之外,当这些特征被输入到线性模型当中依然是一次方数据。多项式回归是侠义上的非线性模型,因为特征本质上是由原来的特征交叉相乘而得出,存在高次方特征,不符合线性模型侠义上输入的x最高次项为1的定义。
- 天生存在过拟合的特点,可以和lasso、lr、ridge模型联用
- PolynomialFeatures
- 既能够拟合数据,又能保留线性模型计算速度快的特点
- 参数
- degree
- 特征的最高次项
- include_bias
- 默认为True
- 是否产生0次项(1)
- 在建模可以关闭,因为模型自身会产生截距项intercept_
- degree
- 接口
- 模型名称.get_feature_names_out()
- 返回升维之后的特征组合
- 查看特征重要性
- features = 模型名称.get_feature_names_out()
- coef = 线性模型.coef_
- [*zip(features, coef)]
- coeff = pd.DataFrame([*zip(features, coef)])
- coeff.columns = [‘features’, ‘coef’]
- coeff.sort_values(by = ‘coef’)
- 模型名称.get_feature_names_out()
- 实现
- 导入模块
- from sklearn.preprocessing import PolynomialFeatures as PF
- 线性模型选择
- from sklearn.linear_model import LinearRegression
- 建立模型
- poly = PF(degree = d)
- 训练模型
- poly = poly.fit(X)
- 数据转换
- X_ = poly.transform(X)
- 训练数据 line_ = poly.transform(line)
- 将得到的X_代入到线性模型中进行训练
- 导入模块