【水比赛】中国高校计算机大赛

【水比赛】中国高校计算机大赛

环境:win7,anaconda+python3.5

暑假第一次做了数据比赛,比赛地址:中国高校计算机大赛
总结一下我第一次数据比赛的经验(主要是失败的经验)

-【赛题描述】-

  • 鼠标轨迹识别当前广泛运用于多种人机验证产品中,不仅便于用户的理解记忆,而且极大增加了暴力破解难度。但攻击者可通过黑产工具产生类人轨迹批量操作以绕过检测,并在对抗过程中不断升级其伪造数据以持续绕过同样升级的检测技术。我们期望用机器学习算法来提高人机验证中各种机器行为的检出率,其中包括对抗过程中出现的新的攻击手段的检测。

  • 本题目数据来源于某人机验证产品采集的鼠标轨迹,经过脱敏处理,数据分为3部分(数据量分别为3000条,10万,200万)。

【训练数据】

训练数据表名称:dsjtzs_txfz_training

字段 类型 解释
a1 bigint 编号id
a2 string 鼠标移动轨迹(x,y,t)
a3 string 目标坐标(x,y)
label string 类别标签:1-正常轨迹,0-机器轨迹

【测试数据】

测试数据表名称:dsjtzs_txfz_test1

字段 类型 解释
a1 bigint 编号id
a2 string 鼠标移动轨迹(x,y,t)
a3 string 目标坐标(x,y)

【测评标准】

选手请将识别为机器行为的编号id提交到计算平台,需要提交的结果表,只包含一个字段:编号id。

初赛提交表名:dsjtzs_txfzjh_preliminary
复赛提交表名:dsjtzs_txfzjh _semifinal

设定Precision为P,Recall为R,白样本为正常轨迹,黑样本为机器轨迹其中:

P = 判黑的数据中真正为黑的数量/判黑的数据总量,
R = 判黑的数据中真正为黑的数量/真实黑数据总量,

比如10w条数据,其中8w条为白样本,2w条为黑样本,参赛者一共将1w条判断为黑样本(其中真正的黑样本有8000条,错将2000条白样本判黑),那么,

    P=8000/10000 = 80%,
    R=8000/20000=40%,

参赛队伍最终得分

扫描二维码关注公众号,回复: 5792583 查看本文章
        F = 5PR/(2P+3R)*100。

最终排名按照F值评判,F值越大,代表结果越优,排名越靠前。

【读取数据和制造特征和保存】

1,pandas的read_csv读入,也可以用文件open,readline读入
进行简单的处理,字符串数字化等内容。
2,开始进行特征的构建,典型的有

特征类型 例子
时间间隔 时间间隔最大值,最小值等
X轴 x运动的最大范围,平均值等
Y轴 y运动的最大范围,平均值等
速度 速度的最大值,最小值等
角度 开始到最后的角度cos,sin值
。。。 。。。

小技巧:
pandas或者numpy里自带的函数对求统计变量很有用

import numpy as np
import pandas as pd
np.max()
np.mean()
pd.mode()
pd.argmax()
...

可以免去我们很多麻烦

3,最后保存到新的csv文件中,作为拥有特征的数据文件。

【特征选择】

很多时候我们不知道提取的特诊是否有用,若没用的特征太多的话
就会变成噪声,从而影响最终模型的好坏,为此,我们可以利用sklearn里的特征选择模块来为特征打分,从而来选择足够有用的特征,提升模型上限的效果。

#去除方差过小的特征
from sklearn.feature_selection import VarianceThreshold

#filter型特征选择
from sklearn.feature_selection import SelectKBest
#选择评分最好的K个特征
from sklearn.feature_selection import chi2#卡方选择特征
from sklearn.feature_selection import SelectPercentile
#按百分比选择特征

#递归消除特征,可自行了解
from sklearn.feature_selection import FRE
#....还有很多特征选择方法

经过选择而留下的特征,从一定程度上来讲,这些大都是有用的特征(不都是,根据具体情况确定),效果也比较理想,从而提高了模型的能力。

【XGB的初试与网格调参的使用】

可以自行在网上下载xgb的whl文件进行安装
其中可以利用自己对sklearn风格的喜爱,调用包

from xgboost import XGBClassifier #sklearn_style
from sklearn.grid_search import GridSearchCV #网格调参

有了这两个就可以根据自己的喜好进行最优参数训练,推荐网址:

xgboost调参参考

【训练集的线下测试】

其实我并没有做这个东西,但在后来别人讲解的时候发现了自己的不足
,所以就补上这个。
这个可以利用竞赛网站的评分函数,在线下对自己的训练成果进行与预估
具体做法也可以利用sklearn(交叉验证+评估)

from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score,precision_score,recall_score,classification_report #里面有各种测评函数,具体用法可以看用户手册

【测试集的预测】

在线下的分数达到不错的效果后就可以进行预测了

from xgboost import XGBClassifier #sklearn_style
...
...
pre=XGBClassifier.predict(test_data)
#保存提交

如果能得到比较强的特征的话,效果会很不错,分数也很高

至于复赛太惨,也就不好意思讲了,不过也体验了一把腾讯
DIX ML平台的使用(坑太多了)
总之,还是受益匪浅的一次比赛

猜你喜欢

转载自blog.csdn.net/qq_36440163/article/details/78369051