【小白学机器学习3】关于最简单的线性回归,和用最小二次法评估线性回归效果, 最速下降法求函数的最小值

本文主要是介绍【小白学机器学习3】关于最简单的线性回归,和用最小二次法评估线性回归效果, 最速下降法求函数的最小值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 什么是回归分析

1.1 什么是线性回归

1.2非线性回归

2 数据和判断方法

2.1 原始数据

2.2 判断方法:最小二乘法

3 关于线性回归的实测

3.1 用直线模拟

3.2 怎么判断哪个线性模拟拟合更好呢?

3.2.1 判断标准

3.2.2 最小二乘法

3.2.3 高维度数据

3.3 用python来算下?(暂缺,用plot画图?)

4 关于误差和 E(θ)=1/2*(f(xi)-yi)^2 这个函数本身

4.0 注意新手错误

4.1  E(θ)这个函数本身

4.2 E(θ) 是否有最小值?

4.3 但是如何获得这个最小值呢?

4.3.1 方法1,直接求导数

4.3.2 如果找到E(θ)的最小值,就能找到对应的参数

5 用最速下降方法找到一个函数的最小值

5.1 最速下降法

5.2 假设 f(x) 如下,且从图像上看是有最小值的

5.3 最速下降方法的详细计算过程

5.3.0 最速下降方法公式

5.3.2 先分析函数f(x) 和其导函数 f(x)'       

5.3.3 最速下降方法的迭代过程

5.3.4 可以看到2个结论


1 什么是回归分析

  • 从时序数据来看,从过去数据去分析,生成1个模拟曲线。
  • 然后用这个模拟曲线去,用新的 x  去预测新的数据

1.1 什么是线性回归

  • 线性,就是指直线
  • 从线性代数的角度来看,就是这些向量是否线性相关,如果线性无关就是共线。
  • 线性回归,就是回归分析的模拟曲线是直线


1.2非线性回归

  • 如果用曲线模拟,也就是用非一次函数/非直线去模拟
  • 这样就是非线性回归了把
  • 等会儿试试

2 数据和判断方法

2.1 原始数据

  • 构造的原始数据
  • 故意构造了一个类二维曲线数据,这样用直线去模拟就一定有较大的误差
  • ROUND(0.5*C10^1.8+0.5*C10+2,0)

2.2 判断方法:最小二乘法

  • 均方误差  MSE=1/n*(f(xi)-yi)^2
  • 误差和:E(θ)1/2*(f(xi)-yi)^2 ,类似MSE

3 关于线性回归的实测

3.1 用直线模拟

做了3个线性模拟

  • f(x)=1+2x
  • f(x)=1+3x
  • f(x)=1+2.8x

3.2 怎么判断哪个线性模拟拟合更好呢?

3.2.1 判断标准

  • E(θ)=1/2*(f(xi)-yi)^2
  • 判断标准就是用 E(θ),哪个E(θ)更小,哪个的拟合效果更好。
  • 配合图形上曲线的对比,也可以看到这个结论

3.2.2 最小二乘法

  • 用E(θ)的大小可以判断不同的拟合曲线的优劣
  • 理论上E(θ)趋近于0,就可以找出拟合最好的曲线

3.2.3 高维度数据

实际上即使不是二维数据,不能用图形化的形式直观的看到。

仍然还是可以用E(θ)=1/2*(f(xi)-yi)^2来判断,比较,模拟曲线的拟合程度

  • 上帝视角的 y=ROUND(0.5*C10^1.8+0.5*C10+2,0)
  • f(x)=1+2x ,  E(θ)=352
  • f(x)=1+3x,   E(θ)=60.5
  • f(x)=1+2.8x,E(θ)=48.4
  • 从图形看,f(x)=1+2.8x , E(θ)=48.4 ,这个直线模拟的效果也确实相对更好

3.3 用python来算下?(暂缺,用plot画图?)

4 关于误差和 E(θ)=1/2*(f(xi)-yi)^2 这个函数本身

4.0 注意新手错误

  • 要分析得是 E(θ) 是否有最小值,从而找到误差最小得模拟曲线--以及模拟曲线的参数。
  • 而不是分析f(x) 这个模拟函数是否有最小值!!

4.1  E(θ)这个函数本身

  • 一般来说是多元函数曲线
  • 这样很可能就有最小值

4.2 E(θ) 是否有最小值?

  • 首先说明
  • 如果E(θ)=1/2*(f(xi)-yi)^2 这个函数本身 是直线,哪是无法找到最小值的
  • 如果E(θ)是一个开头向下,向上凹的曲线,也是没有最小值的
  • 只有E(θ)是一个开头向上,向下凹的曲线,即使有多个波段,也应该是有最小值的

例子:如果E(θ)=1/2*(f(xi)-yi)^2 这个函数本身 是直线,哪是无法找到最小值的

4.3 但是如何获得这个最小值呢?

  • 方法1,直接求导数
  • 方法2,用最速下降法来逐步达到最小值

4.3.1 方法1,直接求导数

  • 知道函数形式后,求导函数
  • 但是后面的函数可能很复杂,导函数不好求

4.3.2 如果找到E(θ)的最小值,就能找到对应的参数

  • 后面说明怎么求这样E(θ)函数的最小值
  • 只有E(θ)是一个开头向上,向下凹的曲线,即使有多个波段,也应该是有最小值的

  • 求E(θ)的最小值的目的,就是为了判断这个模拟曲线的拟合程度最好
  • 而前提是,曲线足够通用,
  • 比如  E(θ)=θ0+θ1x+θ2x^2+....
  • 函数是通用形式,哪剩下的就是去用  求E(θ)的最小值得过程,去找到合适得 参数(θ0,θ1,θ2...)

5 用最速下降方法找到一个函数的最小值

5.1 最速下降法

  • 最速下降方法:x=x-rate*f(x)'
  • 用学习率找到 f(x)取最小值时的x
  • 学习率一般要取小点,比如0.1,0.01 等等
  1. 学习率太大可能无法收敛
  2. 学习率太小收敛速度会慢

5.2 假设 f(x) 如下,且从图像上看是有最小值的

5.3 最速下降方法的详细计算过程

5.3.0 最速下降方法公式

  • 最速下降方法:x=x-rate*f(x)'                    
  • 用学习率找到 f(x)取最小值时的x                    

5.3.2 先分析函数f(x) 和其导函数 f(x)'       

  • x=1时取最小值    
  • 函数      f(x)=x^2-2x+1
  • 导函数   f(x)'=2x-2   (那么x=1时,f(x)'=0就是f(x)取到最小值)


5.3.3 最速下降方法的迭代过程(不断迭代取新的x)

  • 比如取 x=0为初始,rate=0.1
  • 第1轮:new x= x-rate*f(x)' =0-0.1*(2*0-2)=0-0.1*(-2)=0.2,新增了0.2
  • 第2轮:new x= x-rate*f(x)' =0.2-0.1*(2*0.2-2)=0.2-0.1*(-1.6)=0.2+0.16=0.36,新增了0.16
  • 第2轮:new x= x-rate*f(x)' =0.36-0.1*(2*0.36-2)=0.36-0.1*(-1.28)=0.36+0.128=0.488,新增了0.128

5.3.4 可以看到几个结论

  • 1)通过x=x-rate*f(x)' 公式迭代算出来的新的x, 每次增加的幅度再减小:0.2→0.16→0.128
  • 2)只有增加值逐渐减小,这样计算多次后,x会收敛。
  • 3)收敛在x=1与x的初始值无关,
  • 可以看到无论x的初始值取多少,比如初始x=0 或者x=5,经过这个算法,计算20次后,都趋近了x=1这个值。
  • 4)EXCEL里计算的数列是符合的,x=0时,这1行新x数据0.2    0.36    0.488    0.5904    0.67232    0.737856

5.3.5如果学习率rate=1 取值过大,导致永远无法收敛。见下图

这篇关于【小白学机器学习3】关于最简单的线性回归,和用最小二次法评估线性回归效果, 最速下降法求函数的最小值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636714

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];