机器学习入门----以阿里移动推荐算法大赛为例

来源:互联网 发布:js控制视频进度条 编辑:程序博客网 时间:2024/05/18 17:05
如果我说的不对请留言告诉我,谢谢!红字部分来自南京大学周志华教授写的机器学习一书。

赛题在这:天池新人实战赛----阿里移动推荐算法大赛

从数据中学的模型的过程称为“学习”(learning)或“训练”(training),这个过程通过执行某个学习算法来完成,如GBDT。训练过程中使用的数据称为“训练数据”,其中的每个样本称为一个“训练样本”(training sample),训练样本组成的集合称为“训练集”(training set)。
比如阿里移动推荐算法大赛中要求的预测第31天购买情况,可以将前20-29天数据作为训练集,但要训练出模型只有这10天数据是不够的,要建立关于“预测”(prediction)的模型,我们还需获得训练样本的结果信息例如第30天的购买与没购买的数据((前一天浏览十次x商品,前一天收藏x商品,前一天加入购物车x商品),购买x商品),这里的“购买”,被称为“标记”(label),拥有了标记信息的示例,则称为“样例”(example),若将标记看作对象本身的一部分,则“样例”有时也称为“样本”。若我们欲预测的是离散值,例如本赛题中的“购买”,“不购买”,此类学习任务称为“分类”(classification);若预测的是连续值,此类学习任务称为“回归”(regression)。根据训练数据是否有标记信息,学习任务可大致分为两大类:“监督学习”(supervised learning)和“无监督学习”(unsupervised learning),分类和回归是前者的代表,而聚类是后者的代表。
学的模型后,使其进行预测的过程称为“测试”(testing),被预测的样本称为“测试样本”(testing sample),亦称“测试示例”(testing instance)或“测试例”,测试样本组成的集合称为“测试集”(testing set)
学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。
我们无法直接获得泛化误差,而训练误差又由于过拟合现象的存在而不适合作为标准,在现实中我们会使用测试集来测试学习器对新样本的判别能力,以测试集上的“测试误差”作为泛化误差的近似。
测试集应与训练集互斥!

在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train set) 验证集(validation set) 测试集(test set)。

http://blog.sina.com.cn/s/blog_4d2f6cf201000cjx.html

一般需要将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。
样本少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。

http://www.cppblog.com/guijie/archive/2008/07/29/57407.html

这三个名词在机器学习领域的文章中极其常见,但很多人对他们的概念并不是特别清楚,尤其是后两个经常被人混用。Ripley, B.D(1996)在他的经典专著Pattern Recognition and Neural Networks中给出了这三个词的定义。
Training set: A set of examples used for learning, which is to fit the parameters [i.e., weights] of the classifier. 
Validation set: A set of examples used to tune the parameters [i.e., architecture, not weights] of a classifier, for example to choose the number of hidden units in a neural network. 
Test set: A set of examples used only to assess the performance [generalization] of a fully specified classifier.
显然,training set是用来训练模型或确定模型参数的,如ANN中权值等; validation set是用来做模型选择(model selection),即做模型的最终优化及确定的,如ANN的结构;而 test set则纯粹是为了测试已经训练好的模型的推广能力。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。但实际应用中,一般只将数据集分成两类,即training set 和test set,大多数文章并不涉及validation set。
Ripley还谈到了Why separate test and validation sets?
1. The error rate estimate of the final model on validation data will be biased (smaller than the true error rate) since the validation set is used to select the final model.
2. After assessing the final model with the test set, YOU MUST NOT tune the model any further.



接下来根据下面这个图具体说一下。feats_30是有标记(买,没买)的训练集,里面有20-29天的数据,因为正负样本极不均匀,负样本是正样本的五十倍左右,所以要对负样本进行随机采样,随机取出其中的1/50,union之后进行训练,训练出模型(公式,比如y=ax+b,解出a,b之后),然后根据左边的测试集(feats_30_o2o,也就是x)预测出第30天购买情况(pred_day30,也就是y),或是右边的实际要预测的样本(feats_31_o2o,也就是x)预测出第31天购买情况(pred_day31,也就是y)。赛题只让我们预测第31天购买情况,而且第30天的实际购买情况我们是有的,为什么还要预测第30天呢?因为我们要把第30天预测结果与实际结果进行比较、计算,以此来查看训练的模型是否有效。如果效果不错,我们就可以提交预测的第31天购买情况了。


训练集的结果指的是 AUC(Area Under Curve被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。)或者MSE(均方差,该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是SSE/n,和SSE没有太大的区别)这一类的指标,
测试集的结果就是算出来的准确率、召回率、
f1值
。可以认为预测准确率、召回率都比理论上最佳拟合函数低很多,则为欠拟合。训练集预测效果好,测试集预测效果差,则为过拟合。

0 2