前言

文章转载自:https://www.cnblogs.com/wuliytTaotao/p/10814770.html

1. 矩阵补全

矩阵补全(Matrix Completion),就是补上一个含缺失值矩阵的缺失部分。

矩阵补全可以通过矩阵分解(matrix factorization)将一个含缺失值的矩阵 XXX 分解为两个(或多个)矩阵,然后这些分解后的矩阵相乘就可以得到原矩阵的近似 X′X^{\prime}X′,我们用这个近似矩阵 X′X^{\prime}X′ 的值来填补原矩阵 X 的缺失部分。

矩阵补全有很多方面的应用,如推荐系统、缺失值预处理。

除了 EM 算法、树模型,机器学习中的大多数算法都需要输入的数据是不含缺失值的。在 deep learning 模型中,通过梯度的计算公式就可以发现,如果 feature 中含有缺失值,那么梯度也会含缺失值,梯度也就未知了。对缺失值的处理是在模型训练开始前就应该完成的,故也称为预处理。

据缺失在实际场景中不可避免,对于一个包含 nnn 个 samples,每个 sample 有 mmm 个 features 的数据集 D,我们可以将该数据集 D 整理为一个 n∗mn * mn∗m 的矩阵 XXX。

通过矩阵分解补全矩阵是一种处理缺失值的方式,但在介绍之前,先介绍一些简单常用的缺失值预处理方式。

2. 常用的缺失值预处理方式

2.1 不处理

不进行缺失值预处理,缺了就缺了,找一个对缺失值不敏感的算法(如“树模型”),直接训练。

2.2 剔除

对于矩阵 XXX 中缺失值很多的行或列,直接剔除。

1列代表1个sample,1行代表一个feature。

缺失值较多的行,即一个 sample 的很多 features 都缺失了;缺失值较多的列,即大部分 samples 都没有该 feature。剔除这些 samples 或 features,而不是填充它们,避免引入过多的噪声。

当数据超级多时,我们甚至可以对含有缺失值的样本直接剔除,当剔除的比例不大时,这也完全可以接受。

2.3 填充

2.3.1 简单填充

在矩阵 XXX 的每个缺失位置上填上一个数,来代替缺失值。填一个数也不能乱来,如果 feature 代表年龄,那么肯定要填正数;如果 feature 代表性别,那么填 0 或 1 更合适(0 代表男,1 代表女)。
一般有以下几种简单的填充值:(均值和众数都是在一个 feature 下计算,即在矩阵 XXX 的每一列中计算均值和众数)

  • 填 0
  • 填 均值
  • 填 众数
  • 填 中位数

2.3.2 建模填充

这种方式通过观察缺失的 feature 和其它已有的 features 之间的联系,建立一个统计模型或者回归模型,然后然后预测缺失 feature 的值应该是什么。

用 EM 算法估计缺失值也可以归为这一类。

当然,常用的缺失值处理方式还有许多,这里就不再列举了。可以看看博客http://118.31.76.100:100/math/statics_topic/deal-na/

3. 利用矩阵分解补全缺失值

如果矩阵 XXX 不含缺失值,那么矩阵分解可以将矩阵 XXX 分解成两个矩阵 UUU (大小 m×km×km×k)、VVV (大小 m×km×km×k),其中 k<min{m,n}k<min\{m,n\}k<min{m,n},则:X=UVTX = UV^TX=UVT
因为 k<min{m,n}k<min\{m,n\}k<min{m,n},所以 rank(U)≤krank(U)≤krank(U)≤k、rank(V)≤krank(V)≤krank(V)≤k,该矩阵分解又叫做低秩矩阵分解(low-rank matrix factorization)。

为什么 k<min{m,n}k<min\{m,n\}k<min{m,n}

  • 在 samples 和 features 之间存在 kkk 个关系,每个关系的具体含义不得而知,但如果 k≥min{m,n}k≥min\{m,n\}k≥min{m,n},那么意味着每个 sample 和 feature 之间可以构建一个的关系,而其它的 samples 或者 features 可以和该关系基本无关,体现在矩阵 U(或 V)中就是某一列仅有一个元素不为0,这是不合理的。(参考矩阵分解用在推荐系统方面的解释)
  • 当 k 越大,计算量也会越大。

如果矩阵 XXX 是完整的,那么矩阵分解 X=UVTX=UV^TX=UVT 完全没问题,但现在 XXX 中含了缺失值,故没有办法用线性代数的知识直接进行矩阵分解,我们需要一种近似的解法——梯度下降法

这个时候我们令 X≈X^=UVTX≈\hat{X}=UV^TX≈X^=UVT,∥X−X^∥F2∥X−\hat{X}∥^2_F∥X−X^∥F2​ 表示含缺失值的原矩阵 XXX 和 还原后的近似矩阵 X^\hat{X}X^ 之间误差的平方(Square error),或者称之为 reconstruction error,当然 ∥X−X^∥F2∥X−\hat{X}∥^2_F∥X−X^∥F2​ 的计算只能在不含缺失值的项上。(∥⋅∥F 表示 Frobenius norm。)

文献中一般会将 reconstruction error ∥X−X^∥F2∥X−\hat{X}∥^2_F∥X−X^∥F2​ 记为 ∥RΩ(X−X^)∥F2∥\mathcal{R}_Ω(X−\hat{X})∥^2_F∥RΩ​(X−X^)∥F2​,其中[RΩ(X−X^)]ij={xij−x^ij,if (i,j)ϵΩ0,otherwise[\mathcal{R}_Ω(X−\hat{X})]_{ij} = \begin{cases} x_{ij}-\hat{x}_{ij}, & \text{if $(i,j) \epsilon Ω$} \\[2ex] 0, & \text{otherwise} \end{cases} [RΩ​(X−X^)]ij​=⎩⎨⎧​xij​−x^ij​,0,​if (i,j)ϵΩotherwise​
其中ΩΩΩ 表示非缺失值矩阵元素下标的集合。这里为了简便,直接使用 ∥X−X^∥F2∥X−\hat{X}∥^2_F∥X−X^∥F2​,知道只在不含缺失值的项上计算平方和即可。

我们的目标的是找到矩阵 XXX 的近似矩阵 X^\hat{X}X^,通过 X^\hat{X}X^ 中对应的值来填充 XXX 中缺失的部分。而想要找到 X^\hat{X}X^,就是要找到矩阵 UUU 和 VVV。当然 X^\hat{X}X^ 要尽可能像 XXX,体现在函数上就是 min∥X−X^∥F2min∥X−\hat{X}∥^2_Fmin∥X−X^∥F2​。

Loss function JJJ 为

其中,i,ji,ji,j 分别表示矩阵 XXX 的行和列,要求 xij≠nanx_{ij}≠nanxij​​=nan,否则没有办法求最小值了。上式中,未知的就是 uilu_{il}uil​,vjlv_{jl}vjl​,也是我们想要求的。

随机初始化矩阵 UUU,VVV,loss function JJJ 就可以得到一个误差,基于该误差计算梯度,而想要更新 UUU,VVV,只需要按照梯度下降的公式来即可。

算法到这里其实就可以用了,但为了更加完美,可以考虑以下步骤,加入正则项偏置

3.1 加入正则项

加入正则项,保证矩阵 UUU,VVV 中元素不要太大,此时 loss function JJJ 如下所示:

3.2 加入偏置

偏置可以理解为每个样本都有其特性,每个feature也有其特点,故可以加入 bias 来控制。bias 分为三种,第一种是矩阵 XXX 整体的的 bias,记为 bbb,那么 b=mean(X)b=mean(X)b=mean(X),即可以用矩阵 XXX 中存在元素的均值来赋值;第二种是 sample 的 bias,记为 buib_{ui}bui​;第三种是 feature 的 bias,记为 bvjb_{vj}bvj​。 则:


矩阵补全(Matrix Completion)和缺失值预处理相关推荐

  1. 低秩矩阵补全算法matlab实现,推荐系统中的矩阵补全算法

    最基本的问题,以用户电影评分为例,也就是这个用户-电影矩阵. 表中是用户多电影的评分,但评分有缺失,因为用户不可能对所有电影作出评价. 那么推荐问题就是给用户合理推荐一个没看过的电影,合理是指,预测用 ...

  2. 图片补全《Globally and locally consistent image completion》

    图像补全 – Globally and Locally Consistent Image Completion 文章来源:SIGGRAPH 2017 下载链接:http://iizuka.cs.tsu ...

  3. 论文笔记:Matrix Completion in the Unit Hypercube via Structured Matrix Factorization

    2019 IJCAI 0 摘要 复杂任务可以通过将它们映射到矩阵完成(matrix completion)问题来简化.在本文中,我们解决了我们公司面临的一个关键挑战:预测艺术家在电影镜头中渲染视觉效果 ...

  4. 笔记:Matrix completion by Truncated Nuclear Norm Regularization

    Zhang, D., Hu, Y., Ye, J., Li, X., & He, X. (2012, June). Matrix completion by truncated nuclear ...

  5. Graph Convolutional Matrix Completion

    Graph Convolutional Matrix Completion 该篇文章提出了基于图卷积的矩阵补全方法. 图卷积编码器 文章提出了一种能为每种边的类型分配单独的处理过程(简而言之,不同类型 ...

  6. python自动补全库_叼炸天的库! 自动补全 Python 代码,能节省 60% 敲码时间

    近日,Reddit 上的一篇帖子引起了网友的热议.帖子作者「mlvpj」称: 「我们使用深度学习完成了一个简单的项目,可以自动进行 Python 代码补全.」 根据介绍,该项目基于 LSTM 模型,训 ...

  7. python自动补全库_这个库厉害了,自动补全Python代码,节省50%敲码时间

    近日,Reddit 上的一篇帖子引起了网友的热议.帖子作者「mlvpj」称: 「我们使用深度学习完成了一个简单的项目,可以自动进行 Python 代码补全.」 根据介绍,该项目基于 LSTM 模型,训 ...

  8. shell 补齐路径_Linux中10个有用的命令行补全例子

    在 Linux 系统中,当你输入一个命令,再按两次TAB 键,就会列出所有以你输入字符开头的可用命令.这并不新鲜,可能你已经知道了.这个功能被称作命令行补全bash completion.默认情况下, ...

  9. Exact Low-Rank Matrix Completion from Sparsely Corrupted Entries Via Adaptive Outlier Pursuit

    在测量中无法有效处理随机值的噪声,这篇文章提出一种鲁棒方法的异常值处理方法,用来处理测量值中部分值被异常值毁坏的情况.这种方法可以准确的识别异常值的位置,并且使用正确的值来替代异常值. 1 介绍 略 ...

  10. python最新技术开锁工具_这个库厉害了,自动补全 Python 代码,节省 50% 敲码时间...

    摘要:介绍一个优秀代码自动补全工具库. 近日,Reddit 上的一篇帖子引起了网友的热议.帖子作者「mlvpj」称: 「我们使用深度学习完成了一个简单的项目,可以自动进行 Python 代码补全.」 ...

最新文章

  1. 客快物流大数据项目(十五):DockeFile常用命令
  2. Python基础-----while循环语句
  3. 对h.264压缩视频码流中i帧的提取(firstime)
  4. php策略模式,PHP策略模式定义与用法(详解)
  5. iOS最好用的弹出框
  6. 3.GitLab 用户管理
  7. PR菜鸟入门 -- PR下载安装
  8. word章节模板构建:新建样式和多级列表。(附插入目录)
  9. destoon php.ini,解决Destoon下载远程图片失败的错误
  10. Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods
  11. 软件测试行业中ta表示什么意思,软件测试架构师(TA)的职位特点
  12. 《“十四五”现代能源体系规划》划重点
  13. Python爬虫 之 异步爬虫
  14. java中根据权重随机获取数据
  15. 猿团项目实战-仿途牛旅行APP免费视频课程
  16. (转)Java开源CMS系统 一
  17. WIFI6模块--RW6852_PCIE接口--WIFI/蓝牙协议讲解
  18. web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)
  19. 防瞎指南----程序员如何保护自己的眼睛
  20. 开源硬件maple驱动安装问题

热门文章

  1. Linux shell中21的含义解释 (全网最全,看完就懂)
  2. 读研整活笔记1:调研编译器solang
  3. 有道云笔记·协作android版,【每天一品】有道云笔记协作
  4. Arduino超声波模块原理
  5. 跨境电商亚马逊最新骗局揭秘:所谓的跨境电商亚马逊店铺真的能赚钱吗?真的靠谱?
  6. Mybatis Plus分页Page total始终为0
  7. 国内电影下载网站收集
  8. echarts 饼图文字图例多种颜色
  9. Laravel学习记录--数据填充
  10. 【剧透】2017云栖大会·北京峰会——企业云上业务优化专场