zoukankan      html  css  js  c++  java
  • 线回与非线回---sklearn--多项式回归

    前言:

    有些生活中的问题也许符合一元或多元线性回归的标准,但还有很多问题无法用一条直线来解决,需要使用样式更多更复杂的曲线来说明问题,因此今天我将要解决多项式的问题。

    正文:

    import numpy as np
    import matplotlib.pyplot as plt
    #这下面这个是多项式的数据库
    from sklearn.preprocessing import PolynomialFeatures
    #这个是线性回归模型的数据库
    from sklearn.linear_model import LinearRegression
    
    #载入并切分数据,依旧按照你需要的方式取切分
    data = np.genfromtxt("job.csv",delimiter = ",")
    x_data = data[1:,1]
    y_data = data[1:,2]
    #画图并展示
    plt.scatter(x_data,y_data)
    plt.show()
    

    图片展示如下:在这里插入图片描述
    可以看出这个图片属于曲线类型,如果用直线来表示,效果一定不好!

    #给你切分好的数据增加维度以符合函数所需要的格式
    x_data = x_data[:,np.newaxis]
    y_data = y_data[:,np.newaxis]
    
    #创建并拟合线性回归模型
    model = LinearRegression()
    model.fit(x_data,y_data)
    
    #画图
    plt.plot(x_data,y_data,'b.')
    plt.plot(x_data,model.predict(x_data),'r')
    plt.show()
    

    展示一下直线的效果:
    在这里插入图片描述
    可以发现直线的效果很差,完全达不到预期的标准
    因此我们需要换一种方式来做

    #建立多项式回归模型
    #polynomialfeatures可以给你的数据提供更高次的项
    #具体用法百度直接搜索
    #degree的值由你自己决定,不要太高也不要太低
    poly_reg = PolynomialFeatures(degree=3)
    #特征处理,fit来适配数据,transform来自动处理数据
    x_poly = poly_reg.fit_transform(x_data)
    #定义回归模型
    lin_reg = LinearRegression()
    #把处理好的x_poly带入fit函数中
    #训练模型
    lin_reg.fit(x_poly,y_data)
    
    #画图
    plt.plot(x_data,y_data,'b.')
    #在1~10范围内生成20个点
    x_test = np.linspace(1,10,20)
    #给x_test增加维度
    x_test = x_test[:,np.newaxis]
    #将数据带入fit_transform中,并画出来
    plt.plot(x_test,lin_reg.predict(poly_reg.fit_transform(x_test)),'r')
    plt.show()
    

    图片展示如下:
    在这里插入图片描述

    总结:

    可以看出多项式回归确实比一元形象多了!

  • 相关阅读:
    js全选 反选 不选 代码示例。
    前端超级好用a标签跳转带锚点效果
    10分钟倒计时简易
    点赞投票+1简单jq代码
    登录注册密码可见与不可见jquery简易效果开发
    JS调用函数内部变量有以下两种方法:
    关于clipboard.js复制图片以及文本的随笔
    这是我的第一个博客,我叫小白菜!
    前端之路(一)之W3C是什么?
    知识普及
  • 原文地址:https://www.cnblogs.com/lqk0216/p/12340788.html
Copyright © 2011-2022 走看看