使用svm机器学习模型对抓取异常进行挖掘

自从去年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中抓取的结果,与预测的值做对比,其中相同的占所有 中的比例,则为其准确率。





你可能感兴趣的:(url,c,百度,测试,工作)