【新人賽】阿里雲惡意程序檢測 -- 實踐記錄10.13 - Google Colab連接 / 數據簡單查看 / 模型訓練


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的思路分享


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM