zoukankan      html  css  js  c++  java
  • python 机器学习多项式回归

      现实世界的曲线关系都是通过增加多项式实现的,现在解决多项式回归问题

      住房价格样本

      

      样本图像

    import matplotlib.font_manager as fm
    import matplotlib.pyplot as plt
    myfont = fm.FontProperties(fname='C:WindowsFontssimsun.ttc')
    # plt.figure()  # 实例化作图变量
    plt.title('房价面积价格样本', fontproperties = myfont)  # 图像标题
    plt.xlabel('面积(平方米)', fontproperties = myfont)  # x轴文本
    plt.ylabel('价格(万元)', fontproperties = myfont)  # y轴文本
    # plt.axis([30, 400, 100, 400])
    plt.grid(True)  # 是否绘制网格线
    
    X = [[50], [100], [150], [200], [250], [300]]
    y = [[150], [200], [250], [280], [310], [330]]
    
    X_test = [[250], [300]]  # 用来做最终效果测试
    y_test = [[310], [330]]  # 用来做最终效果测试
    # plt.plot(X, y, 'b.')#点
    # plt.plot(X, y, 'b-')#线
    plt.scatter(X, y, marker='*',color='blue',label='房价面积价格样本')
    plt.show()

      

      用线性回归

         添加以下代码

    model = LinearRegression()
    model.fit(X, y)
    print('一元线性回归 r-squared', model.score(X_test, y_test))
    
    X2 = [[30], [400]]
    y2 = model.predict(X2)
    plt.plot(X2, y2, 'g-')
    plt.show()

      

      实际情况是,如果房屋面积一味的增加,房价并不会线性增长,因此线性关系已经无法描述真实的房价问题

      采用多项式回归

      首先我们用二次多项式
      
    # 实例化一个二次多项式特征实例
    quadratic_featurizer = PolynomialFeatures(degree=2)
    
    # 用二次多项式对样本X值做变换
    X_train_quadratic = quadratic_featurizer.fit_transform(X)
    
    # 创建一个线性回归实例
    regressor_model = LinearRegression()
    
    # 以多项式变换后的x值为输入,代入线性回归模型做训练
    regressor_model.fit(X_train_quadratic, y)
    
    # 设计x轴一系列点作为画图的x点集
    xx = np.linspace(30, 400, 100)
    
    # 把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
    xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
    
    yy_predict = regressor_model.predict(xx_quadratic)
    
    # 用训练好的模型作图
    plt.plot(xx, yy_predict, 'r-')
    
    
    X_test_quadratic = quadratic_featurizer.transform(X_test)
    print('二次回归     r-squared', regressor_model.score(X_test_quadratic, y_test))
    #
    #
    plt.show()  # 展示图像

      

      继续三次回归

    cubic_featurizer = PolynomialFeatures(degree=3)
    X_train_cubic = cubic_featurizer.fit_transform(X)
    regressor_cubic = LinearRegression()
    regressor_cubic.fit(X_train_cubic, y)
    xx_cubic = cubic_featurizer.transform(xx.reshape(xx.shape[0], 1))
    plt.plot(xx, regressor_cubic.predict(xx_cubic))
    
    X_test_cubic = cubic_featurizer.transform(X_test)
    print('三次回归     r-squared', regressor_cubic.score(X_test_cubic, y_test))
    plt.show()  # 展示图像

      

      

       可以看到三次回归比二次回归效果又好了一些,但是不是很明显。所以二次回归更可能是最适合的回归模型,三次回归可能有过拟合现象

       参考:http://www.aboutyun.com/thread-19073-1-1.html

  • 相关阅读:
    质子喜欢的和他推荐的
    Linux
    Linux
    Spring Boot入门教程1、使用Spring Boot构建第一个Web应用程序
    单点登录(SSO)的设计
    .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
    .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
    .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
    .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
    .NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿
  • 原文地址:https://www.cnblogs.com/shaosks/p/9896640.html
Copyright © 2011-2022 走看看