funk_SVD 个人理解
目标函数:
$ J = \frac{1}{2} \left\| R - PQ \right\|^{2} + \lambda \left( \left\|P \right\|^{2} +\left\| Q \right\|^{2} \right) $
矩阵R为$ m \times n$的稀疏矩阵(sparse matrix),考虑用 $ P_{m \times r}$ 和 $ Q_ {r \times n }$ 两个矩阵的乘积 $ \hat{R} $ 去逼近矩阵R,误差用SSE,后面面 两项为 正则项。

1,Gradient Descent
$ J = \frac{1}{2}\sum _{\left(i,j \right) \in D} \left( r_{ij} - \sum_{k=1}^{r} p_{ik} q_{kj}\right)^2 + \lambda \left ( \left \| P \right \| ^2+ \left \| Q \right \|^2 \right )$
整体误差$ J $对 因子矩 P 中某元素 $ p_{ik} $ 的偏导数:
$\frac{\partial J}{\partial p_{ik}} = \sum _{\left(i,j \right) \in D} \left( r_{ij} - \sum_{k=1}^{r} p_{ik} q_{kj}\right)q_{kj}+ \lambda p_{ik} $
偏导数矩阵应注意的几项:
1 $ \sum _{\left(i,j \right) \in D} \left( r_{ij} - \sum_{k=1}^{r} p_{ik} q_{kj}\right)q_{kj} $ 中并不是所有项都有定义的,只取有定义位置。
2 对于给定的元素 $ p_{ik} $,i,k都是确定的,$ \sum _{\left(i,j \right) \in D} \left( r_{ij} - \sum_{k=1}^{r} p_{ik} q_{kj}\right)q_{kj} $所以可以看成$ \left ( \hat{R} -R \right )$ 和 Q 红色非空部分的内积, 进一步还能得到因子矩阵的梯度矩阵 $ \frac{\partial J}{\partial P} = \left ( R-\hat{R} \right ) Q^T + \lambda P $
也可以直接用矩阵求导的方法来求解:

当然,做乘法时依然只是那些有记录的位置参与计算。
funk_SVD 个人理解的更多相关文章
- 理解CSS视觉格式化
前面的话 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...
- 彻底理解AC多模式匹配算法
(本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...
- 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信
接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- ThreadLocal简单理解
在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...
- JS核心系列:理解 new 的运行机制
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...
- 深入理解JS 执行细节
javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...
随机推荐
- struts2学习(7)值栈简介与OGNL引入
一.值栈简介: 二.OGNL引入: com.cy.action.HelloAction.java: package com.cy.action; import java.util.Map; impor ...
- appium在android7.0上无法启动问题
前言 由于最近很多android手机升级到7.0系统了,有些小伙伴的appium版本用的还是1.4版本,在运行android7.0的app自动化时候遇到无法启动问题:WebDriverExceptio ...
- Java-Runoob-面向对象:Java 多态
ylbtech-Java-Runoob-面向对象:Java 多态 1.返回顶部 1. Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操 ...
- java 检测代理IP是否准确
我这里提供2个方法都可以实现:第一个是createIPAddress()和convertStreamToString() import java.io.IOException; import java ...
- vptr, vtable, virtual base class table
#include <iostream> using namespace std; class X { int x, y, z; }; class Y: public virtual X { ...
- css选择器30种
CSS 选择器是一种模式,用于选择需要添加样式的元素.平时使用最多也是最简单的就是 #id..class 和标签选择器,在 CSS 中还有很多更加强大更加灵活的选择方式,尤其是在 CSS3 中,增加了 ...
- Hibernate 一对一、一对多、多对多注解cascade属性的总结
作用:是否级联被注解字段里面的对象.可选值:javax.persistence.CascadeType.PERSIST, MERGE, REMOVE, REFRESH, DETACH, ALL.可选其 ...
- 原生JS模拟jQuery $
模拟jQuery的$选择器 在获取元素的时候使用ID选择器,返回的是一个对象:使用类选择器或者标签选择器返回可能是一组元素:将获取到的一个或一组元素进行一个简易的封装封装成一个TQObject 什么是 ...
- 仅用CSS3创建h5预加载跳动圈
<head> <meta charset="UTF-8"> <title></title> <style type=" ...
- leetcode380
class RandomizedSet { public: /** Initialize your data structure here. */ RandomizedSet() { } /** In ...