机器学习实战的P264中代码对应的公式推导

文章针对以下代码重点研究:

xformedItems = dataMat.T * U[:,:4] * Sig4.I 

首先是SVD分解的公式(注意不是SVD近似公式):
M m ⋅ n = U m ⋅ m ⋅ Σ m ⋅ n ⋅ ( V n ⋅ n ) T M_{m·n}=U_{m·m}·Σ_{m·n}·{(V_{n·n})}^{T} Mmn=UmmΣmn(Vnn)T
注意 Σ Σ Σ在python代码中返回时,是一个向量,矩阵论中是一个对角矩阵。
对角线上都是各个奇异值,其余元素都是0.
并且 Σ Σ Σ矩阵必定是从大到小排序过的。
其中 U m ⋅ m U_{m·m} Umm V n ⋅ n V_{n·n} Vnn是正交阵
正交矩阵的各行是单位向量且两两正交
正交矩阵的各列是单位向量且两两正交
对于正交阵 A A A(特指方阵)有以下性质:
A T = A − 1 A^T=A^{-1} AT=A1
如果从 U m ⋅ m U_{m·m} Umm中抽取k列,构成 U m ⋅ k U_{m·k} Umk,且 U k ⋅ m = ( U m ⋅ k ) T U_{k·m}=(U_{m·k})^{T} Ukm=(Umk)T
如果从 V m ⋅ m V_{m·m} Vmm中抽取k列,构成 V m ⋅ k V_{m·k} Vmk,且 V k ⋅ m = ( V m ⋅ k ) T V_{k·m}=(V_{m·k})^{T} Vkm=(Vmk)T
那么有:
U k ⋅ m ⋅ U m ⋅ k = E k ⋅ k ① U_{k·m}·U_{m·k}=E_{k·k}① UkmUmk=Ekk
U m ⋅ k ⋅ U k ⋅ m U_{m·k}·U_{k·m} UmkUkm E m ⋅ m E_{m·m} Emm
V k ⋅ m ⋅ V m ⋅ k = E k ⋅ k ② V_{k·m}·V_{m·k}=E_{k·k}② VkmVmk=Ekk
V m ⋅ k ⋅ V k ⋅ m V_{m·k}·V_{k·m} VmkVkm E m ⋅ m E_{m·m} Emm

上述等式的成立条件是:k≤m
注意上面①②的每个式子的顺序不能反,
接下来是SVD的近似公式:
M m ⋅ n ≈ U m ⋅ k ⋅ Σ k ⋅ k ⋅ ( V n ⋅ k ) T ③ M_{m·n}≈U_{m·k}·Σ_{k·k}·{(V_{n·k})}^{T} ③ MmnUmkΣkk(Vnk)T
下面根据该式进行推导,对于③中,等式左右两边乘以 U k ⋅ m U_{k·m} Ukm,得到:
U k ⋅ m ⋅ M m ⋅ n ≈ ( U k ⋅ m ⋅ U m ⋅ k ) ⋅ Σ k ⋅ k ⋅ ( V n ⋅ k ) T U_{k·m}·M_{m·n}≈(U_{k·m}·U_{m·k})·Σ_{k·k}·{(V_{n·k})}^{T} UkmMmnUkmUmkΣkk(Vnk)T
代入式①得到:
U k ⋅ m ⋅ M m ⋅ n ≈ E k ⋅ k ⋅ Σ k ⋅ k ⋅ ( V n ⋅ k ) T ④ U_{k·m}·M_{m·n}≈E_{k·k}·Σ_{k·k}·{(V_{n·k})}^{T}④ UkmMmnEkkΣkk(Vnk)T
两边乘以 ( Σ k ⋅ k ) − 1 (Σ_{k·k})^{-1} Σkk1,得到:
( Σ k ⋅ k ) − 1 ⋅ U k ⋅ m ⋅ M m ⋅ n ≈ ( V n ⋅ k ) T ⑤ {(Σ_{k·k}})^{-1}·U_{k·m}·M_{m·n}≈{(V_{n·k})}^{T}⑤ Σkk1UkmMmn(Vnk)T
等式两边进行转置操作:
V n ⋅ k ≈ ( ( Σ k ⋅ k ) − 1 ⋅ U k ⋅ m ⋅ M m ⋅ n ) T {V_{n·k}}≈({(Σ_{k·k}})^{-1}·U_{k·m}·M_{m·n})^{T} VnkΣkk1UkmMmnT
对等式右边进行展开:
V n ⋅ k ≈ ( M m ⋅ n ) T ⋅ U m ⋅ k ⋅ ( ( Σ k ⋅ k ) − 1 ) T ⑥ {V_{n·k}}≈({M_{m·n})^{T}·U_{m·k}·((Σ_{k·k}})^{-1})^{T}⑥ Vnk(Mmn)TUmk(Σkk1)T

( Σ k ⋅ k ) (Σ_{k·k}) Σkk是对角阵,
( Σ k ⋅ k ) − 1 (Σ_{k·k})^{-1} Σkk1也是对角阵
( Σ k ⋅ k ) − 1 (Σ_{k·k})^{-1} Σkk1的转置矩阵等于 ( Σ k ⋅ k ) − 1 ⑦ (Σ_{k·k})^{-1}⑦ Σkk1
将⑦中关系,代入⑥,得到

V n ⋅ k ≈ ( M m ⋅ n ) T ⋅ U m ⋅ k ⋅ ( Σ k ⋅ k ) − 1 ⑧ {V_{n·k}}≈({M_{m·n})^{T}·U_{m·k}·(Σ_{k·k}})^{-1}⑧ Vnk(Mmn)TUmkΣkk1

对比⑧和书上的这句代码进行比较:

xformedItems = dataMat.T * U[:,:4] * Sig4.I 

我们会发现是一模一样的。
所以上述推导是这句代码的理论依据。

借助的在线公式编辑器链接为:
http://www.sciweavers.org/free-online-latex-equation-editor

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
机器学习公式推导代码实现是非常重要的部分。公式推导可以帮助我们理解算法的原理,而代码实现则是将算法应用到实际问题的具体步骤。 在公式推导方面,我们可以使用神经网络作为例子。神经网络是一种用于解决分类和回归等问题的机器学习模型。它可以通过前向传播和反向传播来进行训练和预测。 在前向传播,神经网络根据输入数据和权重参数计算出预测结果。具体来说,我们可以使用一系列的线性变换和激活函数来计算每个隐藏层和输出层的值。通过不断传递数据和权重,我们可以得到最终的预测结果。 在反向传播,神经网络根据预测结果和真实标签之间的误差来更新权重参数。这个过程可以使用梯度下降法来实现。我们首先计算出损失函数对于每个权重的偏导数,然后根据偏导数的方向来更新权重。 具体的推导过程可以参考引用的文章。文章详细介绍了神经网络的公式推导和参数更新的推导过程。 在代码实现方面,我们可以使用Python来手动实现神经网络。可以使用NumPy等库来进行矩阵运算和激活函数的计算。具体的代码实现可以参考引用给出的示例代码。 综上所述,机器学习公式推导代码实现是我们理解和应用算法的重要步骤。通过推导公式和实现代码,我们可以更深入地理解算法的原理,并将其应用到实际问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [机器学习之神经网络的公式推导与python代码(手写+pytorch)实现](https://blog.csdn.net/qq_52785473/article/details/127454390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值