這篇部落格主要介紹
pca演算法的應用
ratings.dat (場次)和
movies.dat
.第二步:pandas 讀取資料
第三步:建立乙個m*u 的rating 矩陣,
m 是電影,u是使用者。
user1_id
user2_id
movie1_id20
movie2_id21
movie2_id02
第四步:標準化
m*u
矩陣(減去均值,因為中心矩才能反應資料的離散的程度)
normalized_mat
第五步:計算協方差矩陣和計算特徵值和特徵向量
**如下
10部電影的索引值。
第七步:從特徵向量中選擇前
k個向量作為代表資料,
movie_id
是推薦電影的索引值,
top_n =10
,是利用
pca選擇出與其相似的十部電影。
其中,也可以使用
svd演算法,
u,s,v
』=svd(a)
。svd
演算法不用計算協方差矩陣(速度要比
pcas
快),且a』
*a等價於
normlize_mat
的協方差矩陣,
v向量列值是
normalized_mat
的主分量!
**如下:
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
#讀檔案
data = pd.read_csv(r'c:\users\y\desktop\ml\ml-1m/ratings.dat',
names=['user_id', 'movie_id', 'rating', 'time'],
engine='python', delimiter='::')
movie_data = pd.read_csv(r'c:\users\y\desktop\ml\ml-1m/movies.dat',
names=['movie_id', 'title', 'genre'],
engine='python', delimiter='::')
# 建立乙個m*u的陣列
ratings_mat = np.ndarray(
shape=(np.max(data.movie_id.values), np.max(data.user_id.values)),
dtype=np.uint8)
ratings_mat[data.movie_id.values-1, data.user_id.values-1] = data.rating.values
#歸一化計算特徵向量
normalised_mat = ratings_mat - np.matrix(np.mean(ratings_mat, 1)).t
cov_mat = np.cov(normalised_mat)#
evals, evecs = np.linalg.eig(cov_mat)
def compute_cosine(data,movie_id,top_n=10):
index=movie_id-1
movie_row = data[index, :]
similarity = np.dot(movie_row, data.t)/(np.linalg.norm(movie_row)*np.linalg.norm(data.t))
sort_indexes = np.argsort(-similarity)
return sort_indexes[:top_n]
def print_movie(movie_data,movie_id,top_indexes):
print("推薦的電影是%s"%movie_data[movie_data.movie_id==movie_id].title.values[0])
print("與其相似的%g部電影:\n"%len(top_indexes))
for id in top_indexes+1:
print(movie_data[movie_data.movie_id == id].title.values[0])
k = 50
movie_id = 1 # grab an id from movies.dat
top_n = 10
sliced = evecs[:, :k] # representative data
top_indexes = compute_cosine(sliced, movie_id, top_n)
print_movie(movie_data, movie_id, top_indexes)
spark電影推薦系統的簡單測試
objectmovie users analyzer rddelse if args.length 1 valsc newsparkcontext newsparkconf setmaster masterurl valusersrdd sc.textfile datapath users.dat ...
電影推薦系統的建模
11336241 葉均明 一 概述 由movielens評分資料集作為訓練集 含943名使用者對1682部電影的評分 根據使用者資訊和過往打分進行電影推薦,即允許使用者對自己所看過的電影進行打分,並且根據使用者歷史的打分資訊,為使用者 他對其他未 的電影的打分,或 他對其他電影的評分分類,將 分值高...
應用PCA的建議
pca運用在監督學習演算法下,可以對資料x降維,從而加速學習演算法的速度。如下所示,我們的訓練集x是10000維向量,我們可以通過pca將其降維成z是1000維的向量,此時訓練集從 x,y 變成 z,y 每次輸入x都通過pca的對映變成z,然後再帶入到假設函式中計算。除了加速學習演算法的速度,pca...