自从去年11月17号来到了百度,工作一直是太忙了,这一年时间内,都很少打开自己的博客,更没有再发表文章了。恰逢十一国庆,可以休息下,趁机把用svm机器学习模型对抓取异常进行预测的编码步骤给总结下。
一、准确数据
输入的数据格式为: 结果 站点 某个值 url 各个属性值
首先,把输入的数据,输出两个文件,用途和格式分别如下:
(1)gain.url : result url 用来与最终的预测结果进行对比,得到模型的准确率。
(2)scale.before: result 1:a 2:b 3:c ... 用来做机器学习建模。
接着,进行用来做训练的数据scale.before进行数据归一化:
./svm-scale -l 0 -u 1 scale.before 1>cawl.attr 将归一化后的数据,保存为crawl.attr
最后,把gain.url, crawl.attr进行切分,分化为训练集和验证集所需要的几个文件,如下:
NF%3 == 0为验证集: url.check: result url 用来对比准确率 data.check: result 1:a 2:b 无用 data.predict: 1:a 2:b 用来做预测
NF%3 != 0为训练集: url.train: result url 无用 data.train: result 1:a 2:b用来做训练
另外,还有全量的数据为data.crawl,其实就是crawl.attr的内容
二、进行训练的参数调优
首先得到用来算逆序率评分所需的数据data.crawl.info: result qid:1 4:d 5:e
把模块训练参数C, r分别从2调到6,用训练集来做模块训练,并测试所有的数据,然后对预测的训练集得分+验证集得分求和,取最大的总和所对应的参数。
./svm-train -v 1 -c $c_value -g $g_value data.train
./svm-predict -b 1 data.crawl data.train.model data.crawl.predict.tmp
将验证数据与训练数据进行区分:
NR%3==1: result.check.tmp : 为1的可能性 result qid=1 $4 $5
NR%3!=1: result.train.tmp: 为1的可能性 result qid=1 $4 $5
score1=5c_ana_result result.check.tmp 2 1 0 0 0
score2=5c_ana_result result.train.tmp 2 1 0 0 0
求score1 + score2 得分最高的参数。
三、用调到最优的参数,进行机器学习模型训练,并对验证数据集进行预测,得到评分。
./svm-train -b 1 -c c -g g data.train
./svm-predict -b 1 data.predict data.train.model data.svm.predict
对验证集data.svm.predict的第二列, 与result qid:1 $4 $5进行合并,保存为data.crawl.analyze
调用./5c_ana_result data.crawl.analyze 2 1 0 0 0 得到模型最终的逆序率评分。
将url.check中抓取的结果,与预测的值做对比,其中相同的占所有 中的比例,则为其准确率。