• 02-08 多项式回归(波士顿房价预测)



    更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

    多项式回归(波士顿房价预测)

    一、导入模块

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import r2_score
    %matplotlib inline
    font = FontProperties(fname='/Library/Fonts/Heiti.ttc')
    

    二、获取数据

    在《代码-普通线性回归》的时候说到特征LSTAT和标记MEDV有最高的相关性,但是它们之间并不是线性关系,因此这次尝试使用多项式回归拟合它们之间的关系。

    df = pd.read_csv('housing-data.txt', sep='s+', header=0)
    X = df[['LSTAT']].values
    y = df['MEDV'].values
    

    三、训练模型

    # 增加二次方,即二项式回归
    quadratic = PolynomialFeatures(degree=2)
    # 增加三次方,即三项式回归
    cubic = PolynomialFeatures(degree=3)
    # 训练二项式和三项式回归得到二次方和三次方的X
    X_quad = quadratic.fit_transform(X)
    X_cubic = cubic.fit_transform(X)
    

    # 增加x轴坐标点
    X_fit = np.arange(X.min(), X.max(), 1)[:, np.newaxis]

    lr = LinearRegression()

    # 线性回归
    lr.fit(X, y)
    lr_predict = lr.predict(X_fit)
    # 计算线性回归的R2值
    lr_r2 = r2_score(y, lr.predict(X))

    # 二项式回归
    lr = lr.fit(X_quad, y)
    quad_predict = lr.predict(quadratic.fit_transform(X_fit))
    # 计算二项式回归的R2值
    quadratic_r2 = r2_score(y, lr.predict(X_quad))

    # 三项式回归
    lr = lr.fit(X_cubic, y)
    cubic_predict = lr.predict(cubic.fit_transform(X_fit))
    # 计算三项式回归的R2值
    cubic_r2 = r2_score(y, lr.predict(X_cubic))
    print(lr.score(X_cubic, y))
    print(cubic_r2)

    0.6578476405895719
    0.6578476405895719
    

    3.1 报告决定系数

    r2_score即报告决定系数(R2),可以理解成MSE的标准版,R2的公式为

    R2=11ni=1n(y(i)y(i)^)21ni=1n(y(i)μ(y))2

    其中μ(y)y的平均值,即1ni=1n(y(i)μ(y))2y的方差,公式可以写成

    R2=1MSEVar(y)

    R2的取值范围在01之间,如果R2=1,则均方误差MSE=0,即模型完美的拟合数据。

    四、可视化

    plt.scatter(X, y, c='gray', edgecolor='white', marker='s', label='训练数据')
    plt.plot(X_fit, lr_predict, c='r',
             label='线性(d=1),$R^2={:.2f}$'.format(lr_r2), linestyle='--', lw=3)
    plt.plot(X_fit, quad_predict, c='g',
             label='平方(d=2),$R^2={:.2f}$'.format(quadratic_r2), linestyle='-', lw=3)
    plt.plot(X_fit, cubic_predict, c='b',
             label='立方(d=3),$R^2={:.2f}$'.format(cubic_r2), linestyle=':', lw=3)
    plt.xlabel('地位较低人口的百分比[LSTAT]', fontproperties=font)
    plt.ylabel('以1000美元为计价单位的房价[RM]', fontproperties=font)
    plt.title('波士顿房价预测', fontproperties=font, fontsize=20)
    plt.legend(prop=font)
    plt.show()
    

    png

    上图可以看出三项式的拟合结果优于二项式和线性回归的结果,但是在增加模型复杂度的同时,也需要时刻考虑到是否会出现过拟合的问题。

  • 相关阅读:
    MyBatis的入门案例
    MySQL数据库解决乱码 latin1 转 gbk
    13.MD5对用户密码进行加密
    Windows下永久解决数据库乱码 utf8 转 gbk
    SpringMVC 异常处理
    SpringMVC 实现返回一段数据 & 实现自动发送json格式数据
    SpringMVC中session的使用
    SpringMVC中的重定向和转发的实现
    SpringMVC 获取请求参数
    vue-router介绍
  • 原文地址:https://www.cnblogs.com/abdm-989/p/14111358.html
Copyright © 2020-2023  润新知