介绍就从简了,阿里和新浪微博举办的数据比赛,用数据挖掘机器学习那一套对新浪微博数据进行预测分析。详细的介绍还是拜读官网吧,下面开始进入正题:
一、数据的载入和处理
本次竞赛的数据量有几百M,如果用matlab来进行处理的话,内存会吃不消,因为matlab变量是存在内存里面的,笔者的台式机8G内存,除去系统的3G,剩下的5G用来读这些数据,读取进来就已经很吃力了,别说处理了,所以,数据的载入和处理,我决定交给SQL server 这样的数据库系统软件来做。我matlab并不熟练,可能有更好的方法来载入处理,如果读者知道的话,请务必在下面留言,告知笔者,给笔者一个长知识的机会,谢谢!
差点又离题了,这次数据的载入,关键需要注意的地方就是中文文本的处理方式,因为官方给予的数据的默认编码方式是utf-8的统一编码格式,如果你数据库设置的排序规则——就是语言首选项之类的设置的不对的话,那么你导入进去也是乱码显示的。这个时候,需要你更改语言的排序规则,或者把元数据稍微用系统自带的记事本打开数据,另存为中文格式的数据一下(就是ANSI的格式),也可以。关键就是,一定要统一,这点很重要,官方数据是utf-8的话,你的数据库默认的排序规则就要设置为latin,但不巧的是,我安装的时候设置成简体中文了,修改排序规则的话,我其他的数据库也得变,所以,我尽量不该底层,用记事本修改下官方的数据,再导入,也不失为一种折衷的高效之举。
好了,数据导入已经完毕了,下次再写好了,笔者困到不行了。
二,提交一份数据
这次要预测的数据是微博的转发数,评论数,和赞的数量。而且评测的方法是类似于MSE准则的评分方式,详情请见大赛官网,如果是MSE准则评分方式,采取提交平均分的方式是非常占便宜的,因为根据统计学的知识,样本的均方值会在样本数趋于无穷的时候,收敛于真实的均值,也就是说,平均分这样的做法,对于采取MSE准则来说,是比较容易获得高分的。这样解释可能大家都豁然开朗了。接下来想说一下我的具体的解题思路,就是把数据进行文本关键词分类,时间分类,之后再聚类,然后在这些聚类下分别进行平均,然后得出一个比较精确的平均结果,那你有可能有疑问,既然是平均,最容易想到的是整体的平均值,如果提交一份整体的平均值,不是也可以吗?对,那样是平均值,但是那样的平均值太粗糙了,每个人发的每篇微博的情况都不一样,假如你把每个人的每篇微博都平均了,之后的得出来的结果就是一个过拟合的结果了,因为你认为每个人都是服从整体平均的,这样的依据是不合理的,所以,还需要科学合理的分类,或者用一些巧妙的聚类手段,将我们的用户和博文进行分类之后,在细分的基础上进行平均,这样的成绩理应比粗糙的平均更有说服力,而且成绩更高才对。
基于这样一个想法,我们今天就提交了一份,每个用户的平均。因为要预测的用户,和训练的用户是有重叠的,换句话说,训练数据中,甲发了微博A,微博B,有了它的评论数,转发数,和赞数,而预测数据同样数显了甲,但是,我们就是要预测他的微博C和微博D的评论数,转发数,和赞数,其中,90%以上都是这样一种情况,剩下的10%是什么情况呢?剩下的是一些新用户。比如训练数据中,出现了乙的微博M,微博N的评论数,转发数和赞数,但是预测数据出现了新用户丙,我们要预测新用户丙的微博X的评论数,转发数,和赞数。这样就明显制造了一个分类,就是,预测数据中在训练数据中出现的老用户,和训练数据中没有出现的新用户,这样两大阵营。我们对老用户,用老用户的平均数据来预测,我们对于新用户,用整体的平均数据来预测(保守起见而已),那么就得出了一份比较基本的结果了。
今天的结果是,正确率37.24%,看来下一步还需要进一步的分类和分析才行呢。加油。持续更新中~