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