热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用scikit-learnNMF和一组预先计算的基矢量(Python)

如何解决《使用scikit-learnNMF和一组预先计算的基矢量(Python)》经验,为你挑选了1个好方法。

我想使用scikit-learn NMF(从这里)(或任何其他NMF,如果它确实起作用,实际上).

具体来说,我有一个输入矩阵(这是一个音频幅度谱图),我想分解它.

我已经预先计算了W矩阵.如何使用一个固定的W¯¯sklearn.decompose.NMF?我还没有找到任何其他问题.

我看到这个方法在fit参数中也提到了类似的东西:"如果为False,假设组件被预先计算并存储在变换器中,并且不会被更改." 但是,我不知道如何制作变换器对象.



1> sascha..:

这部分代码解释了内部处理.

这听起来你想修复W.根据代码,你只能修复H,同时优化W.这不是问题,因为你可以切换那些矩阵(反转他们的角色).

这样做,代码说:use init='custom'和set update_h=False.

所以一般来说我希望用法看起来像(根据这里的例子):

未经测试!

import numpy as np
X = np.array([[1,1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]])

fixed_W = np.array([[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1])  # size=3 just an example
                                                                      # might break
fixed_H = fixed_W.T  # interpret W as H (transpose)

from sklearn.decomposition import NMF
model = NMF(n_compOnents=2, init='custom', H=fixed_H, update_H=False, random_state=0)
model.fit(X) 

您可能希望在再次求解后切换变量.

编辑:如评论中所述,上面未经测试的代码将无效.我们需要使用更低级别的功能来做到这一点.

这是一个快速入侵(我不关心正确的预处理; transpose和co.),这应该使你能够解决你的任务:

import numpy as np
X = np.array([[1,1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]])

fixed_W = np.array([[0.4,0.4],[0.2,0.1]])  # size=2 just an example
fixed_H = fixed_W.T  # interpret W as H (transpose)

from sklearn.decomposition import NMF, non_negative_factorization

W, H, n_iter = non_negative_factorization(X, n_compOnents=2, init='random', random_state=0)
print(W)
print(H)
print('error: ')
print(W.dot(H) - X)  # just a demo, it's not the loss minimized!

W, H, n_iter = non_negative_factorization(X, n_compOnents=2, init='custom', random_state=0, update_H=False, H=fixed_H)
print(W)
print(H)
print('error: ')
print(W.dot(H) - X)

输出:

[[ 0.          0.46880684]
 [ 0.55699523  0.3894146 ]
 [ 1.00331638  0.41925352]
 [ 1.6733999   0.22926926]
 [ 2.34349311  0.03927954]
 [ 2.78981512  0.06911798]]
[[ 2.09783018  0.30560234]
 [ 2.13443044  2.13171694]]
error: 
[[  6.35579822e-04  -6.36528773e-04]
 [ -3.40231372e-04   3.40739354e-04]
 [ -3.45147253e-04   3.45662574e-04]
 [ -1.31898319e-04   1.32095249e-04]
 [  9.00218123e-05  -9.01562192e-05]
 [  8.58722020e-05  -8.60004133e-05]]
[[  3.           0.        ]
 [  5.           0.        ]
 [  4.51221142   2.98707026]
 [  0.04070474   9.95690087]
 [  0.          12.23529412]
 [  0.          14.70588235]]
[[ 0.4  0.2]
 [ 0.4  0.1]]
error: 
[[  2.00000000e-01  -4.00000000e-01]
 [ -2.22044605e-16  -1.11022302e-16]
 [ -2.87327549e-04   1.14931020e-03]
 [ -9.57758497e-04   3.83103399e-03]
 [ -1.05882353e-01   4.23529412e-01]
 [ -1.17647059e-01   4.70588235e-01]]


推荐阅读
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
author-avatar
sdr700724
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有