当前位置: 首页 > article >正文

机器学习(四)—— 多项式回归

多项式回归

1. 概述

多项式回归,回归函数是回归变量多项式的回归。多项式回归模型是线性回归模型的一种,此时回归函数关于回归系数是线性的 ——百度百科

使用多项式回归可以使回归模型拟合的更好

如有一元多项式:y=w0+w1x+w2x**2w3x**3+...+wdx**d
w0、w1、……、wd为多个参数项
此时可以将高次项看作对一次项的扩展 转换为多元线性函数即:y=w0+w1x1+w2x2+w3x3+...+wdxd  (复合函数)x1 = xx2 = x**2……
所以多项式回归可以看作是多元线性回归,按照类似一元线性回归的处理获取到最佳的模型参数w0、w1、……组合

2. 一元多项式回归模型

一元多项式回归的步骤:a、将一元多项式回归转换为多元线性回归(给出最高次即可);b、将得到的多元线性回归中的w0、w1...作为样本特征,在LinearRegression模型中进行训练
对应代码:import sklearn.pipeline as plimport sklearn.preprocessing as spimport sklearn.linear_model as lmmodel = pl.make_pipeline(  # pl为sklearn的数据管线 作用:实现两个步骤顺序执行sp.polynomialFeatures(最高次幂), # 多项式特征扩展,将一元多项式转换为多元线性方程lm.LinearRegression() # 多元线性回归模型训练)

代码示例:

import sklearn.pipeline as pl
import sklearn.preprocessing as sp
import sklearn.linear_model as lm
import numpy as np
import sklearn.metrics as sm
import matplotlib.pyplot as plttx = np.array([0.5, 0.6, 0.8, 1.1, 1.4, 1.6, 1.7, 2.0, 2.5, 2.6, 3.0, 3.1, 3.3, 3.6, 3.8, 3.9, 4.0, 4.1, 4.2])
ty = np.array([5.0, 5.5, 6.0, 6.8, 7.0, 11, 8.4, 9.0, 9.2, 10.5, 11, 11.1, 12.0, 13.3, 13.4, 15.7, 16, 14.8, 14.9])
tx_arr = tx.reshape(-1, 1)
# 多项式模型训练
model = pl.make_pipeline(sp.PolynomialFeatures(10), lm.LinearRegression())
model.fit(tx_arr, ty)
# 测试
res = model.predict(tx_arr)
# 训练集评分
print(sm.r2_score(ty, res))# 画图
plt.figure('polynomial regression', facecolor='lightgray')
plt.title('polynomial regression', fontsize=18)
plt.grid(linestyle=':')
plt.scatter(tx, ty, s=80, color='dodgerblue', label='simple points')
plt.plot(tx, res, color='orangered', label='LR')
plt.legend()
plt.show()

在这里插入图片描述
由上图可以看出得到的拟合模型是一条没有规律的曲线,随着sp.PolynomialFeatures()中最高次幂的增大,拟合度会随之增加,但是达到一定的拟合度后,模型预测结果偏差会出现逐渐增大的现象,即过拟合现象

相关概念:欠拟合:过于简单的模型,无论是训练数据还是测试数据都无法给出足够精度的现象;过拟合:过于复杂的模型,对于训练数据具有很高的精度,但对于测试数据通常精度很低的现象;

所以多项式拟合需要根据实际情况对模型进行调整、测试

总结

前面提到的线性回归模型、岭回归模型、多项式回归模型都属于基于模型的机器学习的模型;后边会提到基于实例的机器学习的模型:决策树、正向激励、随机森林

http://www.lryc.cn/news/2419513.html

相关文章:

  • 如何解决IDEA中输入sout,psvm后没有自动联想功能的问题。
  • Linux-UGO用户权限
  • HTML Help Workshop(chm生成工具)的使用
  • 汉字转Unicode编码
  • Java 性能优化实战工具实践:基准测试 JMH,精确测量方法性能
  • 网络通信基础(入门知识总结)
  • 实现动态数组
  • 四大主流云平台对比--CloudStack, Eucalyptus, vCloud Director和OpenStack。
  • 37.绘制文本DrawText、DrawTextEx、DRAWTEXTPARAMS 使用
  • SQL语法——触发器
  • 卷!推荐11个做PPT的神仙网站
  • xshell安装错误:-1605这个操作只对当前安装的产品有效
  • 系统架构图
  • Python 三个拆分函数(split、rsplit、splitlines)不同的用法
  • PUBG介绍
  • 网页星号密码查看器_四大密码查看器 星号、浏览器保存密码、连接过的WIFI账号密码...
  • Java中慎用e.printStackTrace()
  • 2022年诺贝尔物理学奖背后的故事——贝尔不等式诞生之后
  • SurfaceView 基本使用
  • 硬件测试需要什么软件是什么原因,什么硬件软件检测温度准啊
  • zeros什么意思_什么是张量?
  • Ubuntu Touch的小确幸(Linux系统手机Ubports)
  • 数据结构(C语言版)--速成笔记【持续更新中。。】
  • MPEG-4视频压缩基础
  • 【FISCO-BCOS】 一、默认配置搭建区块链网络
  • textmate开发一个blog
  • 8个简单有用windows命令,电脑小白的高级命令!
  • MultiByteToWideCharWideCharToMultiByte 函数介绍
  • 机器学习——多项式拟合
  • java6下载安装_windows下如何安装java6.0