Python x 機器學習
經過前人的努力,現在已經有很多的機器學習的工具可以讓我們使用。
Scikit-Learn
Scikit-Learn是一套很常被使用的機器學習工具,若要在Python使用,其include函式庫的名稱為sklearn。
Classifier
每個classifier都對應著一套機器學習的演算法,Scikit-Learn裡面有很多個classifier。若要使用某個classifier,則在使用前,我們需要先從sklearn的ensemble裡去引用該classifier,然後呼叫它,就可以使用fit()、predict()等函數,進行訓練以及測試,在機器學習世界的潛規則(?中,一堆資料裡,有80% 會拿來訓練,剩下的20% 則用來測試。
至於要怎麼取得訓練用的資料和測試用的資料,這裡提供兩種方式:
1.使用Scikit-Learn裡提供的train_test_split函式來分類
用法如下:
- 先放入data,target
- 設定test_size或是train_size(只要其中一個就好)
- 如果值為小數,代表比例。
- 如果值為整數,代表數量。
- random_state就是該組隨機數的編號,如果填一個非零的整數 ,則在需要重複試驗的時候,保證得到一組一樣的隨機數。但填0或不填,每次呼叫產生出來的結果都會不一樣。
1 | from sklearn.model_selection import train_test_split |
2.運用list的概念,自己手動分。
1 | from sklearn.metrics import accuracy_score |
我個人是比較喜歡第一種方法,因為第一種比較直觀,還能隨機取樣,而第二種就是固定取list的前80%當作訓練資料,剩下的用來測試。
Fit
這個函式會將要訓練的資料放進classifier並訓練。假設我們令一變數cls等於GradientBoostingClassifier,而且要投入訓練的資料集dataTrain和訓練的特徵集targetTrain讓機器學習辨識,則我們可以這樣寫。
1 | cls = GradientBoostingClassifier() |
Predict
這個函式會將測試的資料集dataTest丟入來預測出targetTest,我們可以用targetTest和原本的target比對,來了解機器學習後的準確率。
1 | y_test = cls.predict(x_test) |
這裡有一些classifier可以使用
GradientBoostingClassifier()
1 | from sklearn.ensemble import GradientBoostingClassifier |
RandomForestClassifier()
使用前,需要先引用sklearn的ensemble。
1 | from sklearn.ensemble import RandomForestClassifier |
Metrics
metrics這個函式庫主要是用來評估運算出來的資料 和實際資料 的誤差,要使用的話需要先引用sklearn。
1 | from sklearn import metrics |
Accuracy Score
這個函式會比較預測結果和實際結果,來算出準確率。
- 前兩項分別放實際結果、預測結果(順序也可調換)
- 第三項為normalize,可以決定要輸出準確率,還是預測正確的樣本數(預設為True)。
- True輸出準確率,False預測正確的樣本數。
如果要使用這個函式的話,需要先從sklearn的metrics引入。
1 | from sklearn import metrics |
或是
1 | from sklearn.metrics import accuracy_score |
Confusion Matrix
這邊舉一個例子,令y_true = [0, 1, 2, 2, 2]和y_pred = [0, 0, 2, 2, 1]。
- 綠色豎行放的是預測的類別
- 橘色橫行放的是正確的類別
- x座標對應到實際資料、y座標對應到預測資料
根據上面的規則,繪製成如下圖:
如果要使用這個函式的話,需要先從sklearn的metrics引入。
1 | from sklearn import metrics |
或是
1 | from sklearn.metrics import classification_report |
Classification Report
名詞解釋:
support:某個類別在測試資料中占了多少樣本
precision:某個類別的準確率
recall:某個類別的召回率
f1-score:某個類別的F-score,F-score的計算方式如下:
micro avg:比對所有類別的test和prediction來計算出準確率
macro avg:每個類別加總後平均
weighted avg:每個類別乘上加權(也就是上面提到的support)後平均
這邊以上面介紹Confusion Matrix所舉的例子加以延伸
1 | print(classification_report(y_true, y_pred, target_names=target_names)) |
計算小撇步:
precision:分子就是藍色區域的數字、分母就是該類別橫行所有的數量加總
recall:分子就是藍色區域的數字、分母就是該類別豎行所有的數量加總
support:代表y_true的某個類別有多少筆資料
f1-score = (2 * recall * precision) / (recall + precision)
如果要使用這個函式的話,需要先從sklearn的metrics引入。
1 | from sklearn import metrics |
或是
1 | from sklearn.metrics import classification_report |
參考資料:
1.读懂 sklearn 的 classification_report
封面圖源:Pixiv