机器学习实战的P264中代码对应的公式推导
文章针对以下代码重点研究:
xformedItems = dataMat.T * U[:,:4] * Sig4.I
首先是SVD分解的公式(注意不是SVD近似公式):
Mm⋅n=Um⋅m⋅Σm⋅n⋅(Vn⋅n)TM_{m·n}=U_{m·m}·Σ_{m·n}·{(V_{n·n})}^{T} Mm⋅n=Um⋅m⋅Σm⋅n⋅(Vn⋅n)T
注意ΣΣΣ在python代码中返回时,是一个向量,矩阵论中是一个对角矩阵。
对角线上都是各个奇异值,其余元素都是0.
并且ΣΣΣ矩阵必定是从大到小排序过的。
其中Um⋅mU_{m·m}Um⋅m和Vn⋅nV_{n·n}Vn⋅n是正交阵
正交矩阵的各行是单位向量且两两正交
正交矩阵的各列是单位向量且两两正交
对于正交阵AAA(特指方阵)有以下性质:
AT=A−1A^T=A^{-1}AT=A−1
如果从Um⋅mU_{m·m}Um⋅m中抽取k列,构成Um⋅kU_{m·k}Um⋅k,且Uk⋅m=(Um⋅k)TU_{k·m}=(U_{m·k})^{T}Uk⋅m=(Um⋅k)T
如果从Vm⋅mV_{m·m}Vm⋅m中抽取k列,构成Vm⋅kV_{m·k}Vm⋅k,且Vk⋅m=(Vm⋅k)TV_{k·m}=(V_{m·k})^{T}Vk⋅m=(Vm⋅k)T
那么有:
Uk⋅m⋅Um⋅k=Ek⋅k①U_{k·m}·U_{m·k}=E_{k·k}①Uk⋅m⋅Um⋅k=Ek⋅k①
Um⋅k⋅Uk⋅mU_{m·k}·U_{k·m}Um⋅k⋅Uk⋅m≠Em⋅mE_{m·m}Em⋅m
Vk⋅m⋅Vm⋅k=Ek⋅k②V_{k·m}·V_{m·k}=E_{k·k}②Vk⋅m⋅Vm⋅k=Ek⋅k②
Vm⋅k⋅Vk⋅mV_{m·k}·V_{k·m}Vm⋅k⋅Vk⋅m≠Em⋅mE_{m·m}Em⋅m
上述等式的成立条件是:k≤m
注意上面①②的每个式子的顺序不能反,
接下来是SVD的近似公式:
Mm⋅n≈Um⋅k⋅Σk⋅k⋅(Vn⋅k)T③M_{m·n}≈U_{m·k}·Σ_{k·k}·{(V_{n·k})}^{T} ③Mm⋅n≈Um⋅k⋅Σk⋅k⋅(Vn⋅k)T③
下面根据该式进行推导,对于③中,等式左右两边乘以Uk⋅mU_{k·m}Uk⋅m,得到:
Uk⋅m⋅Mm⋅n≈(Uk⋅m⋅Um⋅k)⋅Σk⋅k⋅(Vn⋅k)TU_{k·m}·M_{m·n}≈(U_{k·m}·U_{m·k})·Σ_{k·k}·{(V_{n·k})}^{T}Uk⋅m⋅Mm⋅n≈(Uk⋅m⋅Um⋅k)⋅Σk⋅k⋅(Vn⋅k)T
代入式①得到:
Uk⋅m⋅Mm⋅n≈Ek⋅k⋅Σk⋅k⋅(Vn⋅k)T④U_{k·m}·M_{m·n}≈E_{k·k}·Σ_{k·k}·{(V_{n·k})}^{T}④Uk⋅m⋅Mm⋅n≈Ek⋅k⋅Σk⋅k⋅(Vn⋅k)T④
两边乘以(Σk⋅k)−1(Σ_{k·k})^{-1}(Σk⋅k)−1,得到:
(Σk⋅k)−1⋅Uk⋅m⋅Mm⋅n≈(Vn⋅k)T⑤{(Σ_{k·k}})^{-1}·U_{k·m}·M_{m·n}≈{(V_{n·k})}^{T}⑤(Σk⋅k)−1⋅Uk⋅m⋅Mm⋅n≈(Vn⋅k)T⑤
等式两边进行转置操作:
Vn⋅k≈((Σk⋅k)−1⋅Uk⋅m⋅Mm⋅n)T{V_{n·k}}≈({(Σ_{k·k}})^{-1}·U_{k·m}·M_{m·n})^{T}Vn⋅k≈((Σk⋅k)−1⋅Uk⋅m⋅Mm⋅n)T
对等式右边进行展开:
Vn⋅k≈(Mm⋅n)T⋅Um⋅k⋅((Σk⋅k)−1)T⑥{V_{n·k}}≈({M_{m·n})^{T}·U_{m·k}·((Σ_{k·k}})^{-1})^{T}⑥Vn⋅k≈(Mm⋅n)T⋅Um⋅k⋅((Σk⋅k)−1)T⑥
∵(Σk⋅k)(Σ_{k·k})(Σk⋅k)是对角阵,
∴(Σk⋅k)−1(Σ_{k·k})^{-1}(Σk⋅k)−1也是对角阵
∴(Σk⋅k)−1(Σ_{k·k})^{-1}(Σk⋅k)−1的转置矩阵等于(Σk⋅k)−1⑦(Σ_{k·k})^{-1}⑦(Σk⋅k)−1⑦
将⑦中关系,代入⑥,得到
Vn⋅k≈(Mm⋅n)T⋅Um⋅k⋅(Σk⋅k)−1⑧{V_{n·k}}≈({M_{m·n})^{T}·U_{m·k}·(Σ_{k·k}})^{-1}⑧Vn⋅k≈(Mm⋅n)T⋅Um⋅k⋅(Σk⋅k)−1⑧
对比⑧和书上的这句代码进行比较:
xformedItems = dataMat.T * U[:,:4] * Sig4.I
我们会发现是一模一样的。
所以上述推导是这句代码的理论依据。
借助的在线公式编辑器链接为:
http://www.sciweavers.org/free-online-latex-equation-editor
机器学习实战的P264中代码对应的公式推导相关推荐
- 【ML/DL】python3学习《机器学习实战》书中的报错及解决办法
python3学习<机器学习实战>书中的报错及解决办法(更新中) <机器学习实战>是一本很不错的书,其采用的是py2的语法格式,在用最新的python3.6编写代码的过程中,书 ...
- 机器学习实战 —— 决策树(完整代码)
声明: 此笔记是学习<机器学习实战> -- Peter Harrington 上的实例并结合西瓜书上的理论知识来完成,使用Python3 ,会与书上一些地方不一样. 机器学习实战-- 决策 ...
- 机器学习实战——绘制决策树(代码)
最近在学习Peter Harrington的<机器学习实战>,代码与书中的略有不同,但可以顺利运行. import matplotlib.pyplot as plt# 定义文本框和箭头格式 ...
- 免费课程 | 云脑机器学习实战训练营,中美大咖携手带你飞!
随着机器学习的不断发展,人工智能掀起了新一轮的热潮.这次人工智能的复兴,最大的特点就是AI能够走入业界的真实应用场景,与商业模式紧密结合,开始在产业界发挥出真正的价值. 在业界的真实应用中,如何挖掘用 ...
- 机器学习实战-决策树 java版代码开发实现
话不多说,直接上代码,若有帮助,帮忙点赞哦 python版,或其他机器学习算法,可发邮箱:476562571@qq.com 主要实现功能: 特征 二值判别 递归遍历文件目录加载训练数据集 召回率计算 ...
- 【机器学习实战】python中使用Matplotlib绘制树形图
上一篇:决策树--构造决策树 文章目录 Matplotlib注解 使用文本注解绘制树节点 测试 构造注解树 获取叶节点的数目和树的层数 测试 plotTree 测试 Matplotlib注解 Matp ...
- 《机器学习实战》之KNN代码基础
理论不在赘述,自己明白就行,代码基础记录如下: 1.sum(axis=0/1) import numpy as np np.sum([0,1,2],[1,2,3],axis=1) >>ar ...
- 机器学习实战--决策树ID3的构建、画图与实例:预测隐形眼镜类型
声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...
- 机器学习实战--Logistic回归与实例:从疝病症预测病马的死亡率
声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...
最新文章
- Ubuntu13.04 下源码安装Rapidsvn
- Android TV 快进帧预览
- 最短路径 - 迪杰斯特拉(Dijkstra)算法
- 计算机学院五名学生开发手语app,大学生团队研发成功“聋人自然手语翻译器”APP...
- 水滴石穿之页面遮罩层实现、向window.open()打开的窗口POST数据
- .NET 原理之 ViewState
- FlexForAndroid:文件读写
- 安装cdr2019卡在正在下载_cdr2019最新版下载-coreldraw2019安装包中文版 - 极光下载站...
- nrf52840 内部 flash 结构
- Windows系统下使用WCP搭建自己的本地知识库管理平台
- 获取input输入值和获取form表单中的组件输入值区别
- Google Chrome for mac(谷歌浏览器)
- 统计了300位硬件工程师的工资,我悟了
- 用 Python 写一个俄罗斯方块游戏
- 【大数据处理】广州餐饮店铺爬虫并可视化,上传至hdfs
- 【C++】引用、内联函数、函数重载、函数默认参数(缺省参数)与占位参数、extern “C“ 浅析
- 实验一 基于TCP和UDP的客户端和服务器端
- 浅探 进程的家族关系
- 调用二级页面的html代码,从一级页面直接调用二级页面中的iframe框架
- ConTeXt 插入Visio图解决方案
热门文章
- IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权
- think in java - 第四章 学习笔记
- 【深入浅出WF】——令牌环的变身—书签
- XCTF-MISC-新手区:pdf
- java高级知识点_JAVA高级阶段知识点汇总
- 【Git】pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
- github unity 图片切换效果_CSS3图片模糊切换效果
- git reset之后找回本地未提交(未add+commit)的代码
- VScode配置ESlint自动修复格式化
- 一次合同违约复盘(一)