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

[从0开始机器学习]4.线性回归 正规方程

🐺本博主博客:ζั͡ ั͡雾 ั͡狼 ั͡✾的博客

🎀专栏:机器学习

🎀专栏:爬虫

🎀专栏:OpenCV图像识别处理

🎀专栏:Unity2D


⭐本节课理论视频:P23-P25 正规方程

⭐本节课推荐其他人笔记:正规方程(Normal equations)推导过程_momentum_的博客

🐺机器学习通过文字描述是难以教学学会的,每一节课我会推荐这个理论的网课,一定要看上面的理论视频!一定要看上面的理论视频!一定要看上面的理论视频!所以我只是通过代码实现,并通过注释形式来详细讲述每一步的原因,最后通过画图对比的新式来看结果比较。

⭐机器学习推荐博主:GoAI的博客_CSDN博客-深度学习,机器学习,大数据笔记领域博主

😊如果你什么都不懂机器学习,那我推荐GoAI的入门文章:机器学习知识点全面总结_GoAI的博客-CSDN博客_机器学习笔记

线性回归中实际就是求代价函数对系数变量求导,导数为0的时候,即代价函数最小的时候,系数矩阵的值。以多元一次函数为例

 使用前提:1.X特征数量小于样本数量

                    2.X矩阵中不存在线性相关的量

缺点:n很大时候(n>10000),比起梯度下降法,运行远远慢

import numpy as np

# 全局变量

# 生成数据
# X中每一行代表一条数据i,代表着一个等式,其中列数代表着变量数,每个变量的系数是不知道的
# 每一行数据是y=k0x0+k1x1+k2x2+k3x3+k4x4,
# k是我们要回归的系数向量,x1,x2,x3,x4是每一行数据其中
# k0代表常数,x0恒为1
X = np.array([[5, 100, 58, -3],
              [7, 120, 59, -3],
              [3, 140, 50, -5],
              [10, 80, 45, -1],
              [6, 96, 55, -7],
              [15, 200, 52, -11],
              [11, 125, 65, -5],
              [12, 63, 100, -3],
              [20, 500, 66, -10]])
# 假设K系数为这个,咱们的算法就是逼近这个结果,当然,如果有自己的数据就更好了
preK = [12, -1, 2, 8] + np.random.random((1, 4))
# Y中的数据量等于X矩阵的行数
Y = (np.dot(preK, X.T) + np.random.random() * 15).ravel()  # 加的一项是随机常数项,最后将矩阵转换成数组向量


# X矩阵中第一列加入x0=1参数
X = np.insert(X, 0, np.ones((1, len(X))), axis=1)
# 数据个数
m = len(X)
# 参数个数
n = len(X[0])
# 输出
print(f"有{n}个参数,就是X列数算上常数项所乘的单位1")
print(f"有{m}条数据,就是加常数后X行数")
# 系数变量K矩阵就是多元参数的系数,就是我们要递归的重点变量,先给这个矩阵的每个值都赋予初始值1
K = np.ones(n)

#正规方程,固定公式详细推导见吴恩达P23
def NorEq():
    global X,Y,K
    m1=np.dot(X.T,X)
    m2=np.matrix(m1).I
    m3=np.dot(m2,X.T)
    K=np.dot(m3,Y.T)

if __name__ == "__main__":
    print("X",X)
    print("Y",Y)
    NorEq()
    print("K",K)
    print("preK",preK)

可见结果完全一致

相关文章:

  • RayVentory以改进IT的分析,RayVentory原始数据之间轻松切换
  • Oracle 递归案例
  • Python编程 print输出函数
  • WordPress JSON REST API OAuth 1.0 认证获取Authorization Basic 码+Python api 创建文章(一)
  • 力扣 每日一题 1235. 规划兼职工作【难度:困难,rating: 2022】(动态规划+二分查找)
  • 数据挖掘-模型的评估(四)
  • 开源远程桌面软件_RustDesk_(可自建远程桌面服务器)
  • 【Django框架】——11 Django模型——02创建模型类
  • 【考研】暨南大学 848 操作系统简答题(2020-2022)
  • docker-compose部署hive、kafka服务
  • @Import注解详解
  • 基于springboot+vue的美食分享网站
  • 动态规划-斐波拉契数列笔记
  • 农民工学CSAPP题目解析-前篇题目解答以及答疑总结
  • HBase系列从入门到精通(二)
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • jQuery(一)
  • MySQL QA
  • 程序员该如何有效的找工作?
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 码农张的Bug人生 - 初来乍到
  • 批量截取pdf文件
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 微信小程序:实现悬浮返回和分享按钮
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (1)bark-ml
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)c52学习之旅-独立按键
  • (南京观海微电子)——I3C协议介绍
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)JPA - JQPL 实现增删改查
  • (原)本想说脏话,奈何已放下
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)linux下的时间函数使用
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • **PHP二维数组遍历时同时赋值
  • ..回顾17,展望18
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .htaccess 强制https 单独排除某个目录
  • .NET Core 成都线下面基会拉开序幕
  • .Net mvc总结
  • .NET4.0并行计算技术基础(1)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET文档生成工具ADB使用图文教程
  • [C++基础]-入门知识
  • [docker]docker网络-直接路由模式
  • [Excel] vlookup函数
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • [Lucene] Lucene 全文检索引擎简介