详细的理论解释和Java实现参考: 附上详细的理论解释和Java实现LTA_ALBlack的博客

在多标签学习中,标签矩阵Y,存在标签缺失情况,利用Funk-SVD,将矩阵Y 分解为矩阵U 和V ,使得满足 Y = U * V,即可将确失标签补充。具体步骤如下:

1、随机初始化 U、V。

2、确定包含正则化的损失函数。

3、对损失函数求导,利用梯度下降法,更新U、V。

4、循环步骤3,直到损失函数小于某个值为止。

from math import *
import numpy as np
import matplotlib.pyplot as pltdef matrix_factorization(Y, rank, aplha, beta, steps):''':param Y: label matrix m*n:param U: 对象向隐含标签的映射 m*k:param V: 标签向隐含标签的映射 m*k:param K: 隐向量的维度:param aplha: 学习率:param beta: 正则化参数:param steps::return:'''print('开始分解原矩阵:\n')Y = np.array(Y)# Number of rows of label matrix Yrows_Y = len(Y)# Number of columns of label matrix Ycolumns_Y = len(Y[0])  # 原矩阵R的列数# Random initialization matrix. [0 1]U = np.random.rand(rows_Y, rank)V = np.random.rand(columns_Y, rank)# TransposeV = V . Tresult=[]# update parameters using gradient descent methodprint('开始训练: \n')for step in range(steps):for i in range(len(Y)):for j in range(len(Y[0])):eij=Y[i][j]-np.dot(U[i,:],V[:,j])for k in range(rank):if Y[i][j]>0:# update parametersU[i][k]=U[i][k]+aplha*(2*eij*V[k][j]-beta*U[i][k])V[k][j]=V[k][j]+aplha*(2*eij*U[i][k]-beta*V[k][j])# losse=0for i in range(len(Y)):for j in range(len(Y[i])):if Y[i][j] > 0:e = e + pow(Y[i][j] - np.dot(U[i, :], V[:, j]), 2)  # lossfor k in range(rank):e = e + (beta / 2) * (pow(U[i][k], 2) + pow(V[k][j], 2))  # loss with regularizationresult.append(e)if e < 0.001:breakprint('training Finshed 。。。。')return U, V.T, resultif __name__ == '__main__':   #主函数Y=[                 #原始矩阵[5,3,0,1],[4,0,0,1],[1,1,0,5],[1,0,0,4],[0,1,5,4]]Y=np.array(Y)U,V,result=matrix_factorization(Y, 3, aplha=0.0002,beta=0.02,steps=5000)# show the resultprint(result)print('原矩阵',Y)Y_MF=np.dot(U,V.T)print('计算出的矩阵',Y_MF)# display the results with a chartplt.plot(range(len(result)),result)plt.xlabel("time")plt.ylabel("loss")plt.show()

Python 实现矩阵分解相关推荐

  1. Python中矩阵SVD分解及还原

    python中SVD分解及还原: import numpy as np from numpy import linalg as la S = np.zeros([5,5]) A=np.random.r ...

  2. 基于SVD矩阵分解的用户商品推荐(python实现)

    加粗样式## SVD矩阵分解 SVD奇异值分解 优点:简化数据,去除噪声,提高算法的结果 缺点:数据的转换可能难以理解 适用范围:数值性数据 原始数据data,我们把它分解成3个矩阵. 其中 只有对角 ...

  3. python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码

    首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导:然后用Python代码在Movielens数据集上进行测试实验. 一. 背景知识 文中作者提 ...

  4. python实现推荐系统代码_推荐系统之矩阵分解及其Python代码实现

    有如下R(5,4)的打分矩阵:("-"表示用户没有打分) 其中打分矩阵R(n,m)是n行和m列,n表示user个数,m行表示item个数 那么,如何根据目前的矩阵R(5,4)如何对 ...

  5. 机器学习笔记(二)矩阵和线性代数 例:用Python实现SVD分解进行图片压缩

    线性代数基本只要是理工科,都是必修的一门课.当时学习的时候总是有一个疑惑,这个东西到底是干嘛用的?为什么数学家发明出这么一套方法呢,感觉除了解方程没发现有什么大用啊!但随着学习的深入,慢慢发现矩阵的应 ...

  6. Python解决矩阵的PLU分解及求矩阵的逆

    Python解决矩阵的PLU分解及求矩阵的逆 关于PLU的分解基础知识就不叙述了,可以自己去看矩阵分析的书,大体上和高斯消去法差不多. PLU分解被经常用在Ax=bAx=bAx=b的求解上 在这里xx ...

  7. 推荐系统之矩阵分解MF原理及Python实现

    矩阵分解(Matrix Factorization) 矩阵分解基本原理 用户矩阵U与物品矩阵V求解 矩阵分解详解好文 实现矩阵分解Python代码 参考 矩阵分解基本原理 将mn维的共现矩阵R分解为m ...

  8. python实现lfm_推荐系统召回算法之——LFM(矩阵分解)

    目录 1.LFM算法原理 2.LFM数学原理 3.应用场景 4.python实现 5.总结 算法原理:LFM(later factor model)是一种基于矩阵分解的召回算法,输入UI点展矩阵,输出 ...

  9. 稀疏表示与非负矩阵分解(3)矩阵分解基本原理和chirp信号处理的简单python实现

    稀疏表示与非负矩阵分解(3)矩阵分解基本原理和chirp信号处理的简单python实现 1. 非负矩阵分解 2. 时频图制作 2.1 时频图的指标与方法比较 2.1.1 时间分辨率和频域分辨率 2.1 ...

最新文章

  1. 软考上午题难点5分钟攻克系列(十)
  2. Modesim 仿真 ERRO VSIM-19
  3. 用户接口(User exit)
  4. 小米空调来了,意外的是还一起来了一个马桶盖
  5. Linux上传文件和下载文件命令行方式
  6. bbPress 介绍,安装和中文包
  7. OpenWrt常用命令总结
  8. Keli Proteus 8 的使用教程
  9. STM32学习心得二十九:I2C通讯实验及相关代码解读
  10. 联想g510拆键盘教程_联想g510快捷键
  11. 红帽linux考证时间,红帽认证考试时间
  12. 华为路由器设置静态IP
  13. 没有这个传奇工程师,就没有今天的 Windows
  14. Easyui datagrid数据清空
  15. 中国杰出前十大程序员_10个值得关注的杰出青少年应用程序开发人员
  16. 如何批量修改文件名?教你一招,轻松解决
  17. 迁移学习知识 - 迁移学习的四种应用场景
  18. 一个非常好的大数据学习网站
  19. 【SSR服务端渲染+CSR客户端渲染+post请求+get请求+总结】三种开启服务器的方法总结
  20. 8139d网卡工作原理 [不断更新]

热门文章

  1. python金融风控评分卡模型和数据分析(加强版)-收藏
  2. 基于PID算法的循迹小车
  3. ubuntu php composer,Ubuntu16.4下安装Composer
  4. 男朋友老惹我生气怎么办
  5. UDP实现的群聊软件-源码
  6. 网站被DDOS攻击怎么办?防护经验!
  7. 【概率论与数理统计】统计学假设检验的原假设H0、备择假设H1怎么确定?
  8. 腾讯云服务器远程连接登陆的方法
  9. 论文分类号(计算机专业)
  10. 经众多Nature文章使用认证!艾美捷抗酒石酸酸性磷酸酶TRAP染色试剂盒