11336241 叶均明
一、概述
由MovieLens评分数据集作为训练集(含943名用户对1682部电影的评分),根据用户信息和过往打分进行电影推荐,即允许用户对自己所看过的电影进行打分,并且根据用户历史的打分信息,为用户预测他对其他未观看的电影的打分,或预测他对其他电影的评分分类,将预测分值高的电影推荐给用户,认为这些电影是用户下一步感兴趣的电影。
二、思路
整理MovieLens评分数据集,使其包括如下信息:用户ID,用户信息,含年龄、职业(泛化成21种)等,电影ID,电影特性(泛化成18类),以及用户对产品的评分信息Rating。然后,对评分数据集进行了训练集和测试集的划分,划分比例为80%的训练集+20%的测试集,共有5组随机划分的结果,这5组划分中的测试集是互相不重叠的,即交叉验证的数据集。
训练方法可以尝试采用回归或分类的思想(如果用回归模型,根据用户信息和过往评分可以得到其他未观看电影的具体分值并排序;如果用分类模型,只能对其他未观看电影进行分值的分类,并在最高评分的一类电影中随机抽取进行推荐)。
三、建模
先整理出我们需要的评分数据集
base=read.table("u1.base",header=T)
test=read.table("u1.test",header=T)
user=read.table("u.user",header=T)
item=read.table("u.item",header=T)
testing=NA
d=nrow(base)
for(i in 1:d){
uID=base[i,]$userID
mID=base[i,]$movieID
tmp1=cbind(user[uID,-1],item[mID,-1],base[i,]$rating)
testing=rbind(testing,tmp1)
}
在训练集上用AdaBoost算法得到一个分类器
library(rpart)
library(mlbench)
library(lattice)
library(ggplot2)
library(caret)
library(adabag)
model.boosting=boosting(rating~.,data=training)
四、测试
整理测试集数据
testing=NA
d=nrow(test)
for(i in 1:d){
uID=base[i,]$userID
mID=base[i,]$movieID
tmp2=cbind(user[uID,-1],item[mID,-1],base[i,]$rating)
testing=rbind(testing,tmp2)
}
进行预测并检查分类器在测试集上的正确率
pre.boosting=predict(model.boosting,testing)
summary(pre.boosting)
五、附件说明
1) u.item 电影类别,分为18类,0值表示不属于,1值表示属于
2) u1.base 随机抽取80%的评分数据用于训练
3) u1.test 随机抽取20%的评分数据用于测试
4) u.user 用户信息,包括用户ID、年龄和职业,
其中,各职业编号如下:
1 technician 2 writer 3 executive 4administrator
5 student 6 lawyer 7 educator 8scientist
9 entertainment 10programmer 11 librarian 12homemaker
13 artist 14engineer 15 healthcare 16marketing
17 salesman 18 other 19retired 20 none
21 doctor