• sklearn实现多项式线性回归_一元/多元 【Python机器学习系列(八)】


    sklearn实现多项式线性回归_一元/多元 【Python机器学习系列(八)】


          ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ
                     在这里插入图片描述请添加图片描述请添加图片描述请添加图片描述在这里插入图片描述
        ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ


    大家好,我是侯小啾!在这里插入图片描述

    在这里插入图片描述今天分享的内容是,通过python的sklearn机器学习库实现多项式线性回归。blog内容分为一元和多元两部分。欢迎大家访问!


    1. 多项式一元回归

    自行准备一组数据,满足有两列可以做一元回归即可。读取数据并查看数据分布情况,代码如下:

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures
    import pandas as pd
    
    df = pd.read_csv("data.csv")
    features = [df.columns.values[1]]
    # 获取数据
    data = df.values
    
    
    # 特征
    x_data = data[1:, 1]
    # 标签
    y_data = data[1:, 2]
    
    # 查看数据分布状况
    plt.scatter(x_data, y_data)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    绘制出散点图如下图所示:
            在这里插入图片描述


    以最高项为5次项为例,进行多元回归的建模,并绘制出曲线图。

    # 将x_data转为二维数组
    x_data = x_data[:, np.newaxis]
    
    # 创建多项式对象,degree调节多项式的特征 5表示最高次项为5次项 x的5次方
    poly_reg = PolynomialFeatures(degree=5)
    # 数据转换 x0-->1  x1-->x  x2-->x^2  x3-->x^3
    x_poly = poly_reg.fit_transform(x_data)
    
    # 建模
    lin_reg = LinearRegression().fit(x_poly, y_data)
    
    # 可视化
    # 绘制x,y散点图
    plt.scatter(x_data, y_data, color="r")
    # 绘制x,y^曲线图
    plt.plot(x_data, lin_reg.predict(x_poly))
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    因为选择的数据中样本相对较少,绘制出的曲线图如下图所示:
            在这里插入图片描述


    以DataFrame的形式输出系数,以及截距。代码如下所示:

    point = poly_reg.get_feature_names(features)
    coefs = lin_reg.coef_
    inter = lin_reg.intercept_
    combine = [*zip(point, coefs)]
    sort_coef = pd.DataFrame(combine, columns=['features', 'coef'])
    print(sort_coef)
    print(inter)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出结果:
                 在这里插入图片描述


    做预测,以x=20为例,首先需要把测试的数据转为多项式格式。然后才能使用predict()方法。

    test = poly_reg.fit_transform([[20]])
    print(lin_reg.predict(test))
    
    • 1
    • 2

    预测结果:
                 在这里插入图片描述


    2. 多项式多元回归

    做完一元的多项式回归,接下来做多元的多项式回归。以最高项指定为4次项为例,使用内置的加利福尼亚房价数据集,代码示例如下:

    import pandas as pd
    from sklearn.linear_model import LinearRegression
    from sklearn.datasets import fetch_california_housing as fch
    from sklearn.preprocessing import PolynomialFeatures
    
    # 读取数据集
    house_value = fch()
    x = pd.DataFrame(house_value.data)
    y = house_value.target
    # print(x.head())
    
    # 将数据集进行多项式转化
    poly = PolynomialFeatures(degree=4)
    x_ = poly.fit_transform(x)
    print(x_)
    print(x.shape)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    简单查看一下数据的结构,以便对后续代码的输出的理解。从下图可以看到,原始数据x中,共有8个特征,经过多项式转化后,特征数变为了495-1=494个。
    在这里插入图片描述


    # 对原始数据进行线性回归进行拟合
    reg = LinearRegression().fit(x, y)
    # 计算R^2
    score = reg.score(x, y)
    
    # 对多项式化数据集进行线性回归拟合
    reg_ = LinearRegression().fit(x_, y)
    # 获取R2指数
    score_ = reg_.score(x_, y) 
    
    point = poly.get_feature_names(house_value.feature_names)
    coef = reg_.coef_
    combine = [*zip(point, coef)]
    sort_coef = pd.DataFrame(combine, columns=['features', 'coef'])
    print(sort_coef)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出系数与截距结果如下图所示:
               在这里插入图片描述


    本次分享就到这里,小啾感谢您的关注与支持!
    🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ

  • 相关阅读:
    SpringBoot整合Shiro和加密
    HDU 1009 FatMouse‘ Trade (贪心算法)
    Laravel笔记-自定义登录中新增登录5次失败锁账户功能(提高系统安全性)
    Openai CLIP模型论文精读及详解
    按键检测|中断检测
    Word docx转html和markdown
    循环链表3
    linux文件属性
    rust中的函数和常见错误分析
    Springboot+vue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
  • 原文地址:https://blog.csdn.net/weixin_48964486/article/details/126222929