数据挖掘 - 低秩矩阵恢复与非负矩阵分解

本文介绍了低秩矩阵恢复和非负矩阵分解在数据挖掘中的角色。低秩矩阵恢复常用于推荐算法,通过预测未评分项来完成矩阵。非负矩阵分解则适用于文本挖掘,通过分解矩阵找出文章的主题和关键词。K值的选择对模型复杂度和过拟合风险有直接影响,通常依据经验和实验调整。
摘要由CSDN通过智能技术生成

1. 低秩矩阵恢复

低秩矩阵恢复主要应用于推荐算法,对矩阵中的未评分位置进行评分。具体原理推导见这里吧:http://download.csdn.net/download/zk_j1994/9983147


代码:

# -*- coding: utf-8 -*-
"""
基于矩阵分解的推荐算法

1. 使用梯度下降进行迭代更新;

"""
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)

def load_data():
    data = [[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],
            [0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],
            [0, 0, 0, 0, 4, 0, 0, 1, 0, 4, 0],
            [3, 3, 4, 0, 0, 0, 0, 2, 2, 0, 0],
            [5, 4, 5, 0, 0, 0, 0, 5, 5, 0, 0],
            [0, 0, 0, 0, 5, 0, 1, 0, 0, 5, 0],
            [4, 3, 4, 0, 0, 0, 0, 5, 5, 0, 1],
            [0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4],
            [0, 0, 0, 2, 0, 2, 5, 0, 0, 1, 2],
            [0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0],
            [1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0]]
    return np.array(data)

def gradAscent(data, K, max_iter, alpha, beta):
    """ 梯度下降更新P, Q矩阵的元素, 使均方误差最小 """
    if not isinstance(data, np.matrix):
        data = np.mat(data)
        
    # 初始化P, Q矩阵
    n, m = data.shape
    P = np.mat(np.random.random((n, K)))
    Q = np.mat(np.random.random((K, m)))
    print("\nP = \n{0}".format(P))
    print("\nQ = \n{0}".format(Q))
    
    loss_list = []
    _iter = 0
    while _iter < max
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值