【数据挖掘】特征抽取之NMF

本文探讨了矩阵分解技术,特别是非负矩阵分解(NMF)在数据挖掘中的角色。通过将大型矩阵分解为两个较小的非负矩阵,可以揭示特征与item之间的关系。特征矩阵展示了每个item对特定特征的重要性,而权重矩阵则描述了特征如何分配到不同的article上。通过这两种矩阵的乘积,能够重构原始矩阵。文章还介绍了NMF算法的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

矩阵分解:找到两个更小的矩阵,两者相乘可以重新构造这个矩阵。

特征矩阵:每一行一个特征,每一列一个item,这些值代表了item对此特征的重要性。


权重矩阵:此矩阵映射特征到aricle矩阵。每行是一个aritcle,每一列是一个特诊,此矩阵反映了多少个特征应用到aritcle上。


矩阵重新构建


 #!/usr/bin/python
 import numpy
 def difcost(a,b):#距离函数
     dif=0
     for i in range(numpy.shape(a)[0]):#行数
         for j in range(numpy.shape(a)[1]):#列数
             dif+=math.pow(a[i][j]-b[i][j],2)
     return dif


NMF非负矩阵分解算法实现:

 #!/usr/bin/python
 #-*-encoding:utf-8-*-
import numpy

def factorize(v,pc=10,iter=50):#此处v为data matrix
    ic=numpy.shape(v)[0]
    fc=numpy.shape(v)[1]
    #初始化权重和特征矩阵
    w=numpy.matrix([[random.random() for i in range(pc)]] for i in range(ic))#权重矩阵
    h=numpy.matrix([[random.random() for i in range(fc)]] for i in range(pc))#特征矩阵
    for i in range(iter):#迭代次数
        wh=w*h
        cost=difcost(wh,v)
        if i%10==0:print cost
        if cost == 0:break
        hn=(numpy.transpose(w)*v)#权重矩阵转置矩阵*data matrix
        hd=(numpy.transpose(w)*w*h)#权重矩阵转置矩阵*权重矩阵*特征矩阵
        h=numpy.matrix(numpy.array(h)*numpy.array(hn)/numpy.array(hd))#更新特征矩阵
        #更新权重矩阵
        wn=(v*numpy.transpose(h))#data matrix*特征矩阵转置矩阵
        wd=(w*h**numpy.transpose(h))#特征矩阵转置*权重矩阵*特征矩阵
        w=numpy.matrix(numpy.array(w)*numpy.array(wn)/numpy.array(wd))#更新权重矩阵
    return w,h




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值