CUR分解

要理解CUR分解,需要先看下SVD分解。SVD理论以及Python实现

算法流程

给定输入的矩阵A。

A=C∗U∗RA = C* U *RA=C∗U∗R

  • 随机选r个列构成C和r个行构成R(也可以使用,平方和加权过的行和列(常用))
  • 然后选取W矩阵(C和R的交集,也就是被选出来的部分,在C和R中同时出现的A矩阵中的位置。)
  • 对W做SVD分解,得到X∑YTX\sum Y^TX∑YT
  • 对∑\sum∑做广义逆矩阵(∑)+(\sum)^+(∑)+,也就是只有非0元的部分才变成原来的倒数。
  • U=Y∗(∑)+∗XTU = Y*(\sum)^+* X^TU=Y∗(∑)+∗XT

Python实现

  • 导入包
import numpy as np
  • 数据
A = np.linspace(0, 14, 15).reshape((3, -1))
  • 算法
def CUR(A, n): A_sq = A ** 2sum_A_sq = np.sum(A_sq)sum_A_sq_0 = np.sum(A_sq, axis=0)sum_A_sq_1 = np.sum(A_sq, axis=1)P_x_c = sum_A_sq_0 / sum_A_sqP_x_r = sum_A_sq_1 / sum_A_sqr, c = A.shapec_index = [np.random.choice(np.arange(0, c), p=P_x_c) for i in range(n)]r_index = [np.random.choice(np.arange(0, r), p=P_x_r) for i in range(n)]
#     print(c_index, r_index)C = A[:, c_index]R = A[r_index, :]W = C[r_index]
#     print(C, R, W)def SVD(A, n):M = np.dot(A, A.T)eigval, eigvec = np.linalg.eig(M)indexes = np.argsort(-eigval)[:n]U = eigvec[:, indexes]sigma_sq = eigval[indexes]M = np.dot(A.T, A)eigval, eigvec = np.linalg.eig(M)indexes = np.argsort(-eigval)[:n]V = eigvec[:, indexes]sigma = sigma_sq # not diag and not sqrtreturn U, sigma, VX, sigma, Y = SVD(W, n)for i in range(len(sigma)):if sigma[i] == 0:continueelse:sigma[i] = 1 / sigma[i]sigma = np.diag(sigma)U = np.dot(np.dot(Y, sigma), X.T)return np.dot(np.dot(C, U), R)
  • 调用
CUR(A, 3)

CUR分解算法及Python实现相关推荐

  1. 几个常用信号分解算法的python包

    小波分析(Wavelet) PyWavelets 经验模态分解(Empirical Mode Decomposition,EMD) EMD-signal 经验小波分解(Empirical Wavele ...

  2. python怎么修改while循环类型_python 的for与while 的i改变

    最近使用实验楼撸代码 http://www.shiyanlou.com/register?inviter=NTY0MzE5NDE2NjM5 做一道count and say 的算法题的时候,有c++语 ...

  3. python 释放链表节点_四种常见链表的实现及时间复杂度分析(Python3版)

    四种常见的链表包括:单向链表,单向循环链表,双向链表,双向循环链表. 要实现的链表操作包括 - is_empty() 判断链表是否为空 - length() 求链表长度 - traversing() ...

  4. 必须放在特定的文件夹中才能运行的Python程序

    下面的小代码要演示的问题是,可以规定某个Python程序必须放在特定的文件夹(代码中假设必须放到Python安装目录中)中才能运行,移动到其他文件夹之后会拒绝运行. import os import ...

  5. 为什么SQL Server DBA对Python感兴趣?

    If we follow blogs and publications on the technological advancement with respect to SQL, we notice ...

  6. python进阶14文件路径(找不到文件)

    原创链接:python进阶14文件路径(找不到文件) 开发时遇到问题,文件路径不正确,找不到文件等等,都是这一类问题. curdir,argv,file 举例: 文件1代码: 1 2 3 4 5 6 ...

  7. 基于Python的淘宝自动回复助手

    前言 看到有人从blink上发需要用python做一个类似于淘宝自动回复助手的作业 好久没玩python了,就写了一下 实现了 1.退货 2.查库存 3.商品查看 这三个功能 整理一下心路历程 搞到一 ...

  8. python中最小公倍数函数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  9. pythonsqlite事务_python sqlite3 的事务控制

    Python sqlite3 的事务控制 官方文档的描述: Controlling Transactions By default, the sqlite3 module opens transact ...

最新文章

  1. Docker(二):Docker 容器使用
  2. MongoDB:快速入门,掌握这些刚刚好!
  3. Linux小工具(4)之apt软件管理
  4. textfield获取其中内容_天涯明月刀天下镖镖旗数量 天下镖内容介绍
  5. php点击按钮显示隐藏代码,jQuery中点击按钮实现显示与隐藏的方法
  6. 如何在ESX下抓取数据包
  7. mysql注入漏洞修复方案_注入漏洞修复方案
  8. python3安装json库-python库json快速入门
  9. [转]JavaScript事件(Event)
  10. 【教程】javascript浏览器对象入门教程
  11. 华为云PaaS梳理了客户可能上云的三类场景和七种解决方案
  12. json取数据怎么取_灯罩怎么取下来 各种吸顶灯的灯罩拆卸方法
  13. 使用hexo搭建github个人博客网站
  14. 2020牛客多校训练2 I Interval(对偶图最短路求最小割)
  15. c语言中fork,C语言fork函数学习
  16. 戴尔计算机网卡驱动程序,台式机网卡驱动,小编教你戴尔台式机网卡驱动
  17. 耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道
  18. 【读书笔记】《正面管教》——我们都不完美,但我们相处的很快乐
  19. Java基本控制流程的理解之输出三角形和乘法表
  20. Mac Elasticsearch 7.9.3 安装指南

热门文章

  1. 如何提高android串口kernel log等级
  2. 并不是所有的程序员都适合做技术管理
  3. 前端如何搭建一个成熟的脚手架
  4. 系统相关的信息模块: import sys
  5. java数据结构读书笔记--引论
  6. 《编写高质量代码:改善c程序代码的125个建议》——建议4-1:整数转换为新类型时必须做范围检查...
  7. ARM的嵌入式Linux移植体验之操作系统
  8. 这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多
  9. 【正一专栏】恒大中超七连冠到手了
  10. 开始→运行→输入的命令集锦(转载)