scikit-learn:通过Non-negative matrix factorization (NMF or NNMF)实现LSA(隐含语义分析)
之前写过两篇文章。各自是
1)矩阵分解的综述:scikit-learn:2.5.矩阵因子分解问题
2)关于TruncatedSVD的简介:scikit-learn:通过TruncatedSVD实现LSA(隐含语义分析)
今天发现NMF也是一个非常好非常有用的模型,就简介一下。它也属于scikit-learn:2.5.矩阵因子分解问题的一部分。
NMF是还有一种压缩方法,前提是如果数据矩阵是非负的。
在数据矩阵不包括负值的情况下。 NMF能够取代PCA及他的变形(NMF can
be plugged in instead of PCA or
its variants, in the cases where the data matrix does not contain negative values.)。
他通过把X分解成W和H。并优化下式:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
This norm is an obvious extension of the Euclidean norm to matrices. (Other optimization objectives have been suggested in the NMF literature, in particular Kullback-Leibler divergence, but these are not currently implemented.)
和PCA不同的是。NNMF通过增量式(通过叠加每个子成分而不做相减操作)的方式表示一个向量,这样的增量式模型能有效表示图像和文本。
NNMF实现了非负双神秘值分解( Nonnegative Double Singular Value Decomposition,NNDSVD)。NNDSVD基于两个SVD过程。一个SVD过程用来近似数据矩阵,还有一个SVD过程利用单位秩矩阵的代数性质来近似第一步产生的SVD因子的正值部分。NNDSVD的基本实现能非常好地用于稀疏矩阵分解。
对于非稀疏矩阵,能够使用变形NNDSVDa (in which all zeros are set equal to the mean of all elements of the data)和NNDSVDar (in which the
zeros are set to random perturbations less than the mean of the data divided by 100)
这个样例非常不错哦:
http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html#example-applications-topics-extraction-with-nmf-py
scikit-learn:通过Non-negative matrix factorization (NMF or NNMF)实现LSA(隐含语义分析)的更多相关文章
- Matrix Factorization, Algorithms, Applications, and Avaliable packages
矩阵分解 来源:http://www.cvchina.info/2011/09/05/matrix-factorization-jungle/ 美帝的有心人士收集了市面上的矩阵分解的差点儿全部算法和应 ...
- 关于NMF(Non-negative Matrix Factorization )
著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- 《Non-Negative Matrix Factorization for Polyphonic Music Transcription》译文
NMF(非负矩阵分解),由于其分解出的矩阵是非负的,在一些实际问题中具有非常好的解释,因此用途很广.在此,我给大家介绍一下NMF在多声部音乐中的应用.要翻译的论文是利用NMF转录多声部音乐的开山之作, ...
- Non-negative Matrix Factorization 非负矩阵分解
著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...
- Understanding matrix factorization for recommendation
http://nicolas-hug.com/blog/matrix_facto_4 import numpy as np import surprise # run 'pip install sci ...
- Matrix Factorization SVD 矩阵分解
Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
随机推荐
- 【Codeforces】383.DIV2
昨天一场CF发挥不好.抽点时间总结一下,然后顺带算是做个题解. 第一题水题 第二题思路很清晰,大概十分钟就想出来规模100000明显复杂度最多nlog所以只能一遍loop然后里利用map统计得到后面的 ...
- Java系列学习(十四)-集合
1.java中的集合学习 2.Collection中常用方法 1.添加功能 boolean add(E e):添加一个元素 boolean addAll(Collection<? extends ...
- Android ScrollView里嵌套RecyclerView时,在RecyclerView上滑动时出现卡顿(冲突)的现象
最近在项目中遇到一个现象,一个界面有一个RecyclerView(GridView型的),外面套了一层ScrollView,通过ScrollView上下滚动,但是在滑动的时候如果是在RecyclerV ...
- Android FrameWork 学习之Android 系统源码调试
这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...
- Java_Web三大框架之Hibernate增删改查
下面介绍一下Hibernate的增删改查. 第一步:编写用户实体类以及User.hbm.xml映射 package com.msl.entity; public class User { privat ...
- JSP学习笔记 - 内置对象 Request
1.主要掌握以下5个内置对象及其所属类,必须学会在java docs里根据类名查找相应的方法 request javax.servlet.http.HttpServletRequest res ...
- (转)Arcgis for Js之Graphiclayer扩展详解
http://blog.csdn.net/gisshixisheng/article/details/41208185 在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种 ...
- day01-编程与计算机组成原理
什么是编程 编程语言:是人与计算机沟通交流的介质,通过标准化的规则传递信息 编程:就是为了使计算机能够理解人的意图,通过编程语言写出一个个文件,这堆文件完成相应的目的 编程的目的:用计算机取代人完成工 ...
- 浅谈jQuery宽高及其应用
[前言] 今天讲了讲jQuery各种元素宽高的获取和设置,下面简单总结下,希望对各位小伙伴有所帮助 [主体] 补充知识点: (1)width()返回结果无单位,css("width" ...
- Quartz.NET 定时任务使用
class Program { static void Main(string[] args) { StartJob(); Console.ReadKey(); } static void Start ...