由于总是扎在深度学习的坑里,机器学习的其他算法总是学了就忘,模棱两可,前几天刚又刷了下数理统计,所以本着打造一个扎实及基础的思想,决定好好推一下各种常见的机器学习算法,留作学习笔记。说不定面试就手推公式了呢。。。其实再推一遍也没啥用。。。。放下书就又忘了。。。

线性回归

表面理解

  1. 所谓线性:体现在y于x仅仅存在 1次方 函数关系
  2. 所谓回归:体现在我们所学习和预测的数据会回归到某一区间,比如正态分布,回归到平均值

  1. 具象化出来,也就是图中的线,要尽可能的穿过所有的点,穿不过的也要尽量使loss最小,(loss由loss-function计算得出简单可以理解为图上点到线的距离求和最小)
  2. 多元线性回归也不过是多添加了几个维度,也就是特征数,y=x1w1+x2w2…+b (其中b并不考虑各种影响下的本身的偏移量)

深入理解线性回归:从数学上搞出解析解

  1. 什么是中心极限定理(Central Limit Theorem)
    中心极限定理指的是给定一个任意分布的总体。我每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然 后把这 m 组抽样分别求出平均值。 这些平均值的分布接近正态分布。

  2. 我们这里假设每一个误差(也就是:(|<y真实> - y<预测>| 记做 ε) 是随机的)那么根据中心极限定理,ε服从正态分布。
    那么现在看看:我们知道了ε,知道了真实的y,就可以求预测的y了,知道了输入的x,最后我们就可以求出w了。

  3. 下式代表:误差+预测=真实

  4. 正态分布的概率密度

  5. 然后我们用ε替换掉x-μ
    得到:

  6. 再用8里的公式:

  7. 多个概率密度函数连乘近似约等于概率的连乘(因为只知道概率密度不知道概率,只能近似了)这样就有了极大似然函数。
    大佬给出的极大似然函数的超详细解释,读完之后全身都通透了!

  8. 然后这里就是期末考试刷题的万年套路了,取㏒,把乘变加。

    求l(θ)最大,也就是求J(θ)最小,因为这是个凸函数,也就是J(θ)求导=0时的θ的值。


代码实现

import numpy as np
import matplotlib.pyplot as plt__author__ = 'yasaka'# 这里相当于是随机X维度X1,rand是随机均匀分布
X = 2 * np.random.rand(100, 1)
# 人为的设置真实的Y一列,np.random.randn(100, 1)是设置error,randn是标准正太分布
y = 4 + 3 * X + np.random.randn(100, 1)
# 整合X0和X1
X_b = np.c_[np.ones((100, 1)), X]
print(X_b)# 常规等式求解theta
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print(theta_best)# 创建测试集里面的X1
X_new = np.array([[0], [2]])
X_new_b = np.c_[(np.ones((2, 1))), X_new]
print(X_new_b)
y_predict = X_new_b.dot(theta_best)
print(y_predict)plt.plot(X_new, y_predict, 'r-')
plt.plot(X, y, 'b.')
plt.axis([0, 2, 0, 15])
plt.show()

补充:

Q:为什么求总似然的时候,要用正太分布的概率密度函数?
A:中心极限定理,如果假设样本之间是独立事件,误差变量随机产生,那么就服从正太分布!

Q:总似然不是概率相乘吗?为什么用了概率密度函数的f(xi)进行了相乘?
A:因为概率不好求,所以当我们可以找到概率密度相乘最大的时候,就相当于找到了概率相乘最大的时候!

Q:概率为什么不好求?
A:因为求得是面积,需要积分,麻烦,大家不用去管数学上如何根据概率密度函数去求概率!

Q:那总似然最大和最优解的关系?
A:当我们找到可以使得总似然最大的条件,也就是可以找到我们的DataSet数据集最吻合某个正太分布!
即找到了最优解!

通过最大似然估计得思想,利用了正太分布的概率密度函数,推导出来了损失函数

Q:何为损失函数?
A:一个函数最小,就对应了模型是最优解!预测历史数据可以最准!

Q:线性回归的损失函数是什么?
A:最小二乘法,MSE,mean squared error,平方均值损失函数,均方误差

Q:线性回归的损失函数有哪些假设?
A:样本独立,随机变量,正太分布

通过对损失函数求导,来找到最小值,求出theta的最优解!

深入理解线性回归:梯度下降法

Q:梯度下降法是干嘛的?
A:梯度下降法是一种以最快的速度找到最优解的方法!


求解步骤:

  1. 初始化theta,w0…wn
  2. 接着求梯度gradient
  3. theta_t+1 = theta_t - grad * learning_rate
    learning_rate是个超参数,太大容易来回振荡,太小步子太短,需要走很长时间,不管太大还是太小,
    都会迭代次数很多,耗时很长
  4. 等待grad < threshold,迭代停止,收敛,threshold是个超参数

公式推导:

  1. 核心公式就是这个:
  2. 下面我们来对损失求导:注意这里的θ和y都是向量,x是输入矩阵。

代码实现

import numpy as npX = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
# print(X_b)learning_rate = 0.1
n_iterations = 10000    # 迭代次数
m = 100  # 100个样本# 1,初始化theta,w0...wn
theta = np.random.randn(2, 1)
count = 0# 4,不会设置阈值,之间设置超参数,迭代次数,迭代次数到了,我们就认为收敛了
for iteration in range(n_iterations):count += 1# 2,接着求梯度gradientgradients = 1/m * X_b.T.dot(X_b.dot(theta)-y)   # 这里用了X_b,也就是整体的输入矩阵,这里和公式推导的不一样,这样导致算出来的是个梯度矩阵,矩阵中的是特征的梯度。      # 3,应用公式调整theta值,theta_t + 1 = theta_t - grad * learning_ratetheta = theta - learning_rate * gradientsprint(theta)

线性回归(数学解析法+梯度下降法)相关推荐

  1. 人工智能必备数学知识· 学习笔记 ·001【线性回归,最小二乘法梯度下降法】

    注:笔记 来自课程 人工智能必备数学知识 Tips①:只是记录从这个课程学到的东西,不是推广.没有安利 Tips②:本笔记主要目的是为了方便自己遗忘查阅,或过于冗长.或有所缺省.或杂乱无章,见谅 Ti ...

  2. 单变量线性回归中的梯度下降法求解代价函数的最小值

    1. 什么是代价函数 在线性回归中我们有一个像这样的训练集,m代表了训练样本的数量,比如 m = 47.而我们的假设函数, 也就是用来进行预测的函数,是这样的线性函数形式, 则代价函数可以表示为: 我 ...

  3. 线性回归最小二乘法和梯度下降法-详细

    原文: https://blog.csdn.net/y990041769/article/details/69567838 问题描述 首先我们定义问题,线性回归要解决的问题就是根据给出的数据学习出一个 ...

  4. 【机器学习】总结:线性回归求解中梯度下降法与最小二乘法的比较

    在线性回归算法求解中,常用的是最小二乘法与梯度下降法,其中梯度下降法是最小二乘法求解方法的优化,但这并不说明梯度下降法好于最小二乘法,实际应用过程中,二者各有特点,需结合实际案例具体分析. 最后有两份 ...

  5. 机器学习中的数学(二)--梯度下降法

    写在前面 <机器学习中的数学>系列主要列举了在机器学习中用到的较多的数学知识,包括微积分,线性代数,概率统计,信息论以及凸优化等等.本系列重在描述基本概念,并不在应用的方面的做深入的探讨, ...

  6. 机器学习中的数学原理——梯度下降法(最速下降法)

    好久没更新了,确实是有点懒了,主要是这两天返乡在隔离(借口).这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新 ...

  7. 线性回归之随机梯度下降法(Stochastic Gradient Descent,SGD)

    通俗易懂 一个经典的例子就是假设你现在在山上,为了以最快的速度下山,且视线良好,你可以看清自己的位置以及所处位置的坡度,那么沿着坡向下走,最终你会走到山底.但是如果你被蒙上双眼,那么你则只能凭借脚踩石 ...

  8. Python机器学习:梯度下降法004实现线性回归中的梯度下降法

    直接上代码 import numpy as np import matplotlib.pyplot as plt 生成模拟数据 np.random.seed(666) x = 2 * np.rando ...

  9. [云炬python3玩转机器学习]6-3线性回归中的梯度下降法

最新文章

  1. SqlServer的SSIS导入导出数据时找不到连接错误处理
  2. linux 搭建jenkins
  3. C/Cpp / STL / map 的 key 为自定义的 struct 或者 class 时,有什么注意事项?
  4. 荣耀MagicV今晚亮相:刷新对传统折叠屏厚重的认知
  5. 知识点收录01---关于Tomcat的一些知识点
  6. 大数据开发:数据仓库分层设计
  7. 硬盘分区的类型:mbr分区和gpt分区的区别
  8. PL3376C-ASEMI电源管理芯片PL3376C
  9. 键盘没有pause break,该怎么办?
  10. Java测试框架系列:Mockito 详解:第二部分:创建存根
  11. 一阶电路暂态响应的结果分析。_【技术】关于开关电源的分析、计算、仿真
  12. Flyme应用中心应用认领
  13. 三维空间图像轮廓 c语言,三维模型轮廓线抽取算法.doc
  14. 数仓可视化,低代码开发平台
  15. Vue判断IE浏览器版本并提示
  16. android JIN 第一步 生成java转换成class然后再转化成.h文件
  17. [python爬虫]爬取电影,电视剧
  18. 服务器系统开机提示0xc000007b,示例电脑开机出现0xc000007b蓝屏解决办法
  19. 2022年汽车配件市场分析
  20. 实现用户名字母数字大小写符号(正则表达式)

热门文章

  1. 使用Excel时上下左右键不能使用
  2. R语言画中国地图-新方法
  3. count/count if函数的基本用法
  4. 计算机java毕业设计 SSM房屋租赁管理系统(源码+论文)
  5. win7两个mysql数据同步_两台服务器两个数据库怎么实现数据同步备份。
  6. 华为云账号实名认证流程(材料及图文教程)
  7. 天机-破解达芬奇密码
  8. Qt for Android(14) —— Android Q 适配之无法接受广播
  9. 奈雪的茶:茶饮战争才刚打响
  10. Windows 搜索神器,Everything、AnyTXT