用户的信息预测实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三报告

一、实验目的

这篇报告中完成的是task 1,即用户的信息预测。任务是要由给定的数据集训练出一个预测器,然后利用用户对电影的打分来预测用户的性别和年龄。在10折交叉验证中分别计算出每次验证的错误率和加权错误率,并且给出最终的平均错误率。 二、数据描述

数据集包含了用户信息、电影信息以及用户对电影的打分[1]。用户信息被分成了10个文件(用于做10折交叉验证),每个用户的信息由五部分组成:

用户ID ::性别::年龄::职业::邮编

其中,用户ID 从1到6040,表示一共有6040个用户。性别用’M ’表示男性,’F ’表示女性。用户年龄被分成了7段,每段用一个数字表示,具体的含义如下:

1:18岁以下 18:18岁~24岁 25:25岁~34岁 35:35岁~44岁 45:45岁~49岁 50:50岁~55岁 56:56岁以上

用户的职业被分成了21种,从0到20,每个数字代表一种职业。 每部电影的信息由三部分组成:

电影ID ::电影名::电影类别

电影ID 的范围是从1到3952,但是要注意的是有些ID 并不存在,电影的数目为3883

部。电影的类别一共有18种。

用户对电影的打分信息由四部分组成:

用户ID ::电影ID ::分数::时间戳

分数的范围从1到5共有5个等级。 三、实验内容及结果 (一)所用方法

1)朴素贝叶斯分类器:

对于实验要求的朴素贝叶斯分类器问题,假设数据条件独立,于是可以通过下式计算出

联合似然函数:

12(,,

)()D i i p x x x y p x y =∏

其中,()i p x y 可以有给出的样本数据计算出的经验分布估计。 在实验中,朴素贝叶斯分类器问题可以表示为下面的式子:

1

*arg max ()()D

i y

i y p y p x y ==∏

其中,()p y 是从给出的样本数据计算出的经验分布估计出的先验分布。 2)Laplace 平滑:

在分类器中加入Laplace 平滑目的在于,对于给定的训练数据中,有可能会出现不能完全覆盖到所有变量取值的数据,这对分类器的分类结果造成一定误差。

解决办法,就是在分类器工作前,再引入一部分先验知识,让每一种变量去只对应分类情况与统计的次数均加上Laplace 平滑参数∂。依然采用最大后验概率准则。

这里采用的是朴素贝叶斯[2]的方法来得到预测器,变量是用户对某类型电影的喜好程度(即对电影的打分),最后还考虑了用户的职业信息。 另外,在处理数据的过程中,发现对于一些用户,有些电影ID 并不存在,于是在实验中,采用了拉普拉斯平滑。

(二)数据预处理

运行程序“pre_data.m ”,可得到movie_kinds.mat 、user_like.mat 、user_infor.mat 三个文件。

1. 建立电影类型表:

文件“movie_kinds.mat”表示电影类型表。

电影的类别一共有18种。在这个表中,记录这18种电影类型名。 2. 建立用户对电影类型的喜好表

文件“user_like.mat ”表示用户对电影类型的喜好表。

考虑到用户的性别和年龄与用户喜欢的电影种类有关系,所以对分数做如下的划分:4分~5分表示该用户喜欢这部电影,1分~3分表示该用户不喜欢这部电影。这样划分分数可以避免过拟合现象。数据预处理中需要建立一个用户对电影类型的爱好表,表的横向变量是用户ID ,纵向变量是某种电影类型的喜恶。由于电影类型有18种,考虑喜恶就有36种,所以最后的用户爱好表是一个36行,6040列的表格。

对于每个分数,找出电影的类别,然后在用户爱好表中对应的位置加一,表示“该用户对这类型的电影喜欢或不喜欢”事件的发生次数加一。最终得到的用户爱好表的一部分如下:

表1. 用户爱好表的一部分(左上角)

例如表中的14就表示用户1不喜欢Animation 这种类型的电影发生了14次。 3. 建立用户信息表

文件“user_infor.mat ”表示用户对电影类型的喜好表。

由于用户信息被随机分到10个文件中,为了便于得到先验概率先对用户的信息进行整理。用户信息表的横向变量是用户ID ,纵向变量分别是性别、年龄和职业。用户信息表的一部分如下所示:

表2. 用户信息表的一部分(左上角)

例如表中第二列表示用户2的性别为“M ”,年龄在第7段,职业为第16种职业。 电影的类别一共有18种。 (三)训练

为了进行分类(预测),首先要计算出先验概率 和条件概率,为此,

需要建立两个表格,一个是电影类别喜恶的条件概率表,其中,横向变量是电影类型的喜恶,纵向变量是待预测值,第1到7列表示7个年龄段,第8、9列表示性别。

得到这张条件概率表的过程如下:对于每个训练样本,由用户ID 在用户信息表中找到该用户的性别和年龄段,在用户爱好表中找到该用户对电影类型的喜好信息,然后在条件概率表中相应的位置进行累加,结果是在该用户信息条件下喜恶某种类型电影的次数。对训练集合users.dat0~users.dat8中的用户都进行以上操作后,将表中的每行进行归一化,得到相应的先验概率,如果有0存在,则进行拉普拉斯平滑,这样就可以得到不同的用户条件(年龄、性别)下关于某种类型电影喜好的条件概率。该条件概率表的示意图如下:

表3. 电影条件概率表的一部分(左上角)

例如表中的红色0.00680表示在用户年龄为35的条件下喜欢Animation 的条件概率为0.00680,而绿色的0.10410表示在用户为男性的条件下不喜欢Drama 的条件概率为0.10410. 按照相同的方式可以建立一张不同的用户条件(年龄、性别)下关于工作种类的条件概率表,表的横向变量是工作的种类,纵向变量是待预测值,第1到7列表示7个年龄段,第8、9列表示性别。

对于训练集中的用户统计出其性别和年龄的先验概率分别为:

表4. 用户性别的先验概率

(四)测试:

在训练得到上述先验概率和条件概率之后,对于每个测试样本,就可以利用下式预测样本的类别(性别或者年龄段)。

()()1

arg max |D

i y

i y p y p x y *==∏

相关文档
最新文档