zoukankan      html  css  js  c++  java
  • 【新人赛】阿里云恶意程序检测 -- 实践记录10.13

    1. 比赛介绍

    比赛地址:阿里云恶意程序检测新人赛

    这个比赛和已结束的第三届阿里云安全算法挑战赛赛题类似,是一个开放的长期赛。

    2. 前期准备

    因为训练数据量比较大,本地CPU跑不起来,所以决定用Google的Colaboratory来跑,期间也遇到了几个坑。

    首先是文件上传比较慢,几个G的文件直接上传比较耗时,上传压缩包后解压又出现了问题,最后还是得等着上传完,期间换了好几个VPN节点。

    解压缩的问题:用unzip命令解压,速度很慢,经常解压到一半就不动了或者与colab的连接断掉了(可能是网络问题),在Driver里用Zip Extractor软件解压也不成功。

    此外,colab分配的环境是临时环境,文件不会一直保存,刚开始没注意到这点,文件丢失了一次后,才知道要连接到Google Driver,文件存在Driver里。代码如下。

    Google Colab 连接 Google Driver

    新建新的jupyternotebook,在空白的单元格中输入:

    !apt-get install -y -qq software-properties-common python-software-properties module-init-tools
    !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
    !apt-get update -qq 2>&1 > /dev/null
    !apt-get -y install -qq google-drive-ocamlfuse fuse
    from google.colab import auth
    auth.authenticate_user()
    from oauth2client.client import GoogleCredentials
    creds = GoogleCredentials.get_application_default()
    import getpass
    !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
    vcode = getpass.getpass()
    !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
    

    根据提示,点击网址并输入验证码确定。新建新的空白单元格,输入:

    !mkdir -p drive
    !google-drive-ocamlfuse drive
    

    查看drive目录是否被挂载成功:

    !ls
    

    更改工作目录:

    import os
    os.chdir("drive")
    

    3. 查看数据

    以training data为例,其他数据同样可以用pandas查看。

    import pandas as pd
    
    train_path = './security_train.csv'
    data_train = pd.read_csv(train_path)
    

    查看前5行数据:

    data_train.head()
    
    ~ file_id label api tid index
    0 1 5 LdrLoadDll 2488 0
    1 1 5 LdrGetProcedureAddress 2488 1
    2 1 5 LdrGetProcedureAddress 2488 2
    3 1 5 LdrGetProcedureAddress 2488 3
    4 1 5 LdrGetProcedureAddress 2488 4

    查看行索引:

    data_train.index
    

    RangeIndex(start=0, stop=12955, step=1)

    查看列属性:

    data_train.columns
    

    Index(['file_id', 'label', 'api', 'tid', 'index'], dtype='object')

    查看数据描述信息:

    data_train.describe()
    
    ~ file_id label tid index
    count 8.980669e+07 8.980669e+07 8.980669e+07 8.980669e+07
    mean 7.078770e+03 3.862835e+00 2.533028e+03 1.547521e+03
    std 3.998794e+03 2.393783e+00 6.995798e+02 1.412249e+03
    min 1.000000e+00 0.000000e+00 1.000000e+02 0.000000e+00
    25% 3.637000e+03 2.000000e+00 2.356000e+03 3.490000e+02
    50% 7.161000e+03 5.000000e+00 2.564000e+03 1.085000e+03
    75% 1.055100e+04 5.000000e+00 2.776000e+03 2.503000e+03
    max 1.388700e+04 7.000000e+00 2.089600e+04 5.000000e+03

    4. 模型训练

    数据预处理和模型训练用的代码是 RManofCH 分享的代码,数据量大,在colab上跑了一整天。

    其间遇到了一个 'keras.backend' has no attribute 'tf' 的问题,应该是Keras版本的问题

    添加包,并将相应的K.tf.xxx修改为tf.xxx即可。

    import tensorflow as tf
    import tensorflow.keras.backend as B
    import tensorflow_hub as hub
    from tensorflow.python.keras.engine import Layer
    

    最终成绩为:logloss: 0.472666

    5. 初次实践心得

    因为是第一次接触数据竞赛,主要是学习了下别人的思路,跑了下训练代码,没有做什么有意义的修改。

    感受了下训练大量数据时的龟速,学习了一下几个常用模型的思路以及模型融合的方法。

    6. 组会总结

    1)自己调模型做优化,渐进式学习比较好,逐步提高,跑现成的代码学到的东西不多,

    2)先关注学习过程,结果分数暂时不重要,正式比赛优秀选手都有团队、套路,还有很大差距,

    3)先要分析下数据,理解下问题,根据具体的业务场景做模型选择,参数调优,不同的业务需要采用不同的解决方法,没有万能的策略,

    7. 参考资料

    第三届阿里云安全算法挑战赛答辩视频

    RManofCH的思路分享

  • 相关阅读:
    开博了,将会定期更新博客
    C++实验二
    C++实验三
    c++第八章课后题
    c++第八章复数运算
    我的第一篇Window Live Writer日志
    Item 3: Prefer the is or as Operators to Casts(选择is或者as操作符而不是做强制类型转换)
    C# 中list的排序
    CodeSmith的应用
    using 关键字
  • 原文地址:https://www.cnblogs.com/yanqiang/p/11658701.html
Copyright © 2011-2022 走看看