國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
第五章 研究實作
本研究以Python 程式語言版本 3.6 為實作環境建立轉換 Python 程式的混淆 工具,使用者的機器學習模組在本地端完成混淆後即能上傳至公有雲平台進行 資料分析。研究實作以Kaggle 的競賽題目—鐵達尼號生存預測為標的展示機器 學習程式在混淆前後的運作差異。
5.1 混淆前程式準備
Kaggle 的鐵達尼號生存預測競賽所提供的訓練資料集情形如圖 10 所示,除 了乘客年齡外,還有登船港口、船票價欄位中有些是空值,另外部分欄位也需要 經過特徵值工程後才能開始數據分析。有關資料前處理的部分本研究採用以下 方式設定:遺失的年齡值部分以回歸模型預測數值、根據乘客稱謂(如:Mr.、
Mrs.)與性別合併考量後轉換為整數資料、其餘空白值則根據其他資料的平均值 設定。
圖10: Kaggle 鐵達尼號競賽訓練資料
機器學習程式實作的選擇可以依照是否依賴現成機器學習套件來準備,若 是使用套件如Python 的開放原始碼的套件 Scikit-learn ( sklearn ),使用者可以在 選擇完演算法相關類別、設定參數後就開始使用sklearn 套件建立模型。機器學
‧
CART ( Classification and Regression Tree ),模型參數為最大樹深度 5、分割所需 最小樣本數1,採用 Gini Index 的分類樹。隨機森林的單棵樹建立方式與上述決 策樹相同,除分割所需最小樣本數12,隨機森林的樹總量為 10 棵。邏輯回歸演 算法的實作中,採用stochastic gradient descent ( SGD )作為係數決定方法,SGD 參數中的學習率設為0.01、Epochs(尋訪訓練資料集次數)設為 5000。在大數據分析上,使用者可以額外使用交叉驗證的方式強化機器學習的效
‧
未混淆模組 6.22KB 7.74KB 4.33KB
虛擬化轉換後模組 145KB 174KB 128KB
在章節4.3 中,本文提及額外的虛擬化混淆轉換方式來使自訂直譯器更難被
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
循環複雜度的計算是基於程式的控制流程,在程式中控制流程以有向圖表 示,取得圖的邊個數E、節點個數 N 及連通元件個數 P 後,循環複雜度 N 的計 算如下:
M = E - N + 2*P
在章節5.2 提及的三個機器學習程式,根據整個程式的獨特在運算元及運算 子個數在混淆前後的成長情況,算出的計算程式長度如表8 所示;根據程式控制 流程路徑數算出的循環複雜度如表9 所示,由於程式的每個函式個別表示一個 控制流程來計算循環複雜度,所列結果為程式中全部函式循環複雜度的平均值。
表8: 程式虛擬化混淆前後計算程式長度
機器學習演算法 決策樹 隨機森林 邏輯回歸
未混淆程式 1564 1885 1019
虛擬化轉換後程式 11119 12817 8592
表9: 程式虛擬化混淆前後循環複雜度
機器學習演算法 決策樹 隨機森林 邏輯回歸
未混淆程式 2.8 2.7 2.6
虛擬化轉換後程式 37 37.3 38.25
從霍爾斯特德的計算程式長度結果可以得知要從虛擬化轉換後的程式中判 斷變數所代表的涵義將變得更複雜。循環複雜度的結果則可以看出程式控制流 程的改變,使程式執行過程更難被解讀。