利用线性模型解决非线性问题的两种方法

解决非线性问题

  • 线性模型 + 分箱
    • 原理:将数据分为n段,对每一段进行分段线性拟合,拟合的结果是线性分段函数
    • KBinsDiscretizer
      • 参数
        • n_bins
          • 分几箱
        • encode
          • ‘onehot’
            • 独热编码,将数据的分箱转化为1——n列,特征为(0,1),属于哪一列在相应的列上编码为1
      • 接口
        • 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_
      • 接口
        • 模型名称.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’)
      • 实现
        • 导入模块
          • 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_代入到线性模型中进行训练
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值