机器学习之多项式拟合

  • 实验内容
    • 目标
    • 要求
  • 实验步骤
    • 生成随机数据
    • 高阶多项式拟合
    • 无正则项的解析解
    • 有正则项的解析解
    • 梯度下降法
    • 共轭梯度法

实验内容

目标

掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2范数)的损失函数优化、梯度下降法、共轭梯度法、理解过拟合、克服过拟合的方法(如加惩罚项、增加样本)

要求

  1. 生成数据,加入噪声;
  2. 用高阶多项式函数拟合曲线;
  3. 用解析解求解两种loss的最优解(无正则项和有正则项)
  4. 优化方法求解最优解(梯度下降,共轭梯度);
  5. 用你得到的实验数据,解释过拟合。
  6. 用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。
  7. 语言不限,可以用matlab,python。求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如pytorch,tensorflow的自动微分工具。

实验步骤

生成随机数据

sin(2πx) 加入高斯噪声

def generateData(x1, x2, noise, n):mu, sigma = 0, 0.1while True:s = np.random.normal(mu, sigma, n)if (abs(mu-np.mean(s)) < 0.01) & (abs(sigma - np.std(s, ddof=1)) < noise):breakx = np.linspace(x1, x2, n)y = np.sin(2.0*math.pi*x) + s * noisereturn x, y

高阶多项式拟合

从0阶到10阶,调用polyfit函数进行拟合并绘图

trainSet = generateData(0.1, 0.9, 0.5, 10)
for degree in range(10):coff = polyfit(trainSet[0], trainSet[1], degree)my_plot = np.polyval(coff, x_plot)plt.plot(trainSet[0], trainSet[1], color='g', linestyle='', marker='o', label=u"generate data with noise")plt.plot(x_plot, my_plot, linestyle='-', marker='', label="degree: " + str(degree))plt.legend(loc='upper left')plt.show()


无正则项的解析解

推导过程网上有很多,比如这个.
首先构造矩阵,因为系数从高阶到低阶,所以矩阵要从左到右的降阶数构造,然后直接套公式即可。

X0 = np.zeros((10, 10))
for k0 in range(10):for n0 in range(10):n0 = 9 - n0if (n0 == 9):X0[k0][n0] = 1else:X0[k0][n0] = X0[k0][n0 + 1] * trainSet[0][k0]a1 = X0
a2 = np.transpose(a1)
Ans = np.dot(np.dot(np.linalg.inv(np.dot(a2, a1)), a2), np.transpose(trainSet[1]))

有正则项的解析解

直接加入正则项即可。e-18 效果最好,可调整参数看效果

lam = np.exp(-18)
Ans = np.dot(np.dot(np.linalg.inv(np.dot(a2, a1) + lam * np.eye(10)), a2), np.transpose(trainSet[1]))

梯度下降法

关于原理,参见这里,或者这里.
当然有能力最好维基百科,全面清晰。

网上很多包括csdn上都有很多代码分享,但确实很多都有问题,老师也不推荐csdn上。之前搜索学习的时候参考的几份代码也都是有问题的,搞学术这种东西还是不能马虎,自己系统学习比照葫芦画瓢不明所以还是要好很多的。

def loss_function(theta, X):P = np.mat(trainSet[1])diff = np.dot(X, theta) - np.transpose(P)return 0.5 / 10 * np.dot(np.transpose(diff), diff) + lam * np.dot(np.transpose(theta), theta)def gradient_function(theta):P = np.mat(trainSet[1])diff = np.dot(X, theta) - np.transpose(P)return 1.0 / 10 * np.dot(np.transpose(X), diff) + lam * thetadef gradient_descent(lr):theta = np.ones((10, 1))gradient = gradient_function(theta)while not np.all(np.absolute(gradient) <= 1e-5):theta = theta - lr * gradientgradient = gradient_function(theta)return thetaX = np.zeros((10, 10))
for k0 in range(10):for n0 in range(10):if (n0 == 0):X[k0][n0] = 1else:X[k0][n0] = X[k0][n0 - 1] * trainSet[0][k0]lr = 0.01
optimal = gradient_descent(lr)
print('optimal:', optimal)
print('error function:', loss_function(optimal, X)[0, 0])

共轭梯度法

强推维基百科的条目。
原理基本就是线性代数那一套,推导还有示例还是很容易明白的。

代码基本初始化之后套进去就ok。

while True:alphak = np.dot(np.transpose(r[k]), r[k]) / np.dot(np.dot(np.transpose(p[k]), A), p[k])x[k + 1] = x[k] + alphak * p[k]r[k + 1] = r[k] - alphak * np.dot(A, p[k])if (np.all(np.absolute(r[k + 1]) < 1e-5)):breakbeita = np.dot(np.transpose(r[k + 1]), r[k + 1]) / np.dot(np.transpose(r[k]), r[k])p[k + 1] = r[k + 1] + beita * p[k]k = k + 1

然后就是对比两种梯度法的优劣了,网上有很多。

机器学习之多项式拟合相关推荐

  1. java 多项式拟合最多的项数_机器学习(1)--线性回归和多项式拟合

    机器学习(1)--线性回归和多项式拟合 机器学习(2)逻辑回归 (数学推导及代码实现) 机器学习(3)softmax实现Fashion-MNIST分类 一 线性回归 线性回归,顾名思义是利用线性模型对 ...

  2. 机器学习实验一-多项式拟合

    一.实验目的 掌握最小二乘法求解(无惩罚项的损失函数).掌握加惩罚项(2范数)的损失函数优化.梯度下降法.共轭梯度法.理解过拟合.克服过拟合的方法(如加惩罚项.增加样本) 实验要求及实验环境 实验要求 ...

  3. 机器学习——多项式拟合

    文章目录 一.多项式拟合 1.1 多项式函数拟合 1.2 过拟合与正则化 1.3 维数灾难 二.基于概率的曲线拟合 2.1 高斯分布 2.2 重新理解曲线拟合 最大似然 最大化后验概率(maximum ...

  4. 数值计算之 拟合法,线性拟合,多项式拟合

    数值计算之 拟合法之线性拟合,多项式拟合 前言 最小二乘法 多项式拟合 线性拟合 后记 前言 拟合法是另一种由采样数据求取潜在函数的方法.插值要求函数必须经过每一个采样节点,而拟合则要求函数与全部节点 ...

  5. python做多项式拟合并绘图

    本文所用文件的百度云链接: 链接:https://pan.baidu.com/s/15-qbrbtRs4frup24Y1i5og 提取码:pm2c   之前有说过线性拟合了,显而易见,线性拟合在实际应 ...

  6. 【机器学习】欠拟合 过拟合 正则化

    正则化 拟合效果 拟合效果分析 欠拟合原因 特征量过少 参数太少,模型复杂度过低 过拟合原因 建模样本选取有误 样本噪音干扰过大 假设不成立 参数太多,模型复杂度过高 其他 tree-based模型 ...

  7. 趋势预测方法(一) 多项式拟合(最小二乘法)_函数拟合

    多项式拟合(最小二乘法) a基本原理: b拟合函数原理: c方法优缺点: 优点: 思想简单,实现容易.建模迅速,对于小数据量.简单的关系很有效. 解决回归问题,拥有很好的解释性. 是很多非线性模型的基 ...

  8. python多项式拟合_最小二乘法—多项式拟合非线性函数

    本章涉及到的知识点清单: 1.函数的近似表示-高次多项式 2.误差函数-最小二乘法 3.引出案例函数曲线 4.目标函数 5.优化目标函数 6.优化目标函数-梯度下降法 7.优化目标函数-求解线性方程组 ...

  9. 机器学习:过拟合与欠拟合问题

    本文首发于 AI柠檬博客,原文链接:机器学习:过拟合与欠拟合问题 | AI柠檬 过拟合(overfitting)与欠拟合(underfitting)是统计学中的一组现象.过拟合是在统计模型中,由于使用 ...

  10. python多项式拟合问题

    某次项目中遇到,需要预测某个值.数据大概是这样的: 有4个特征,特征之间数据差异较大,根据四个特征预测需要预测一个值,数据量是24条.其实就是一个多项式的拟合问题.刚开始,我想着用一些简单的模型去拟合 ...

最新文章

  1. 一文读懂:深扒人脸识别60年技术发展史
  2. 软件测试第二次作业:JUNIT单元测试方法
  3. 秒杀多线程第十一篇 读者写者问题
  4. 十年后,你在元宇宙中的一天是什么样?
  5. golang 日志分析_Saferwall:下一代开源恶意软件分析平台
  6. xcode 不值钱的动画UIButton
  7. 计算机辅助建筑制图规范,房屋建筑制图统一标准 [附条文说明] GB/T50001-2017
  8. java8: hashmap性能提升
  9. 2015最新Linkedin人才趋势报告
  10. OpenCV入门教程,超详细OpenCV入门教程!10小时让你轻松掌握opencv的使用
  11. 淘宝装修:1920全屏海报(源代码免费下载)
  12. 网页版bpc电波对时_BPC电波对时app
  13. android pin码解锁,解锁三星的3种方法:SIM网络解锁PIN码
  14. win 11 博通网卡解决蓝牙驱动问题 黑苹果在win11系统中
  15. 皮皮虾如何引流?皮皮虾运营如何变现?皮皮虾APP怎么引流?
  16. 通过NFS(nfsroot)启动linux系统
  17. 爆笑课堂:程序员看得懂的搞笑段子
  18. STEP找不到CPU
  19. Comet OJ - Contest #6 双倍快乐
  20. java文章管理系统源码_融成Java后台网站内容管理系统 v3.2.1

热门文章

  1. 纯注解整合SSM框架
  2. 概念(理论)---积分方程1:赋范线性空间,线性算子,有界线性算子和连续线性算子
  3. 二极管 三极管 mos管
  4. Scintilla开源库使用指南
  5. 锁定计算机的软件,易通电脑锁(控制上网时间必备软件)
  6. 软考软件设计师下午真题-面向对象的程序设计与实现-组合设计模式(2021年上半年试题六))Java代码讲解
  7. VMware网络设置详解 打造超级虚拟网络
  8. yum安装ruby_Centos安装ruby
  9. linux flash 存储寿命,关于 Flash 存储,你应该知道的一些事情
  10. MTK手机烧录与调试