機器學習分類演算法常用評價指標
阿新 • • 發佈:2018-12-15
# -*- coding: utf-8 -*- import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn import metrics import matplotlib.pyplot as plt """ 函式說明:檔案處理 Parameters: filename:資料檔案 Returns: list_datasets:資料集特徵列表 category_labels:資料標籤列表 """ def data_handle(filename): read_data = pd.read_csv(filename) list_datasets = [] category_labels = [] for i in range(len(read_data)): list_data = [] for j in range(len(read_data.iloc[i, :]) - 1): row_data = read_data.iloc[i, j] # 讀取每個樣本的每個資料 list_data.append(row_data) #將每個資料存入列表 list_datasets.append(list_data) #將每個樣本的資料存入列表 row_data_label = read_data.iloc[i, len(read_data.iloc[i, :]) - 1] # 讀取每個樣本的類別標籤 if row_data_label == 'N': category_labels.append(0) # 將二分類標籤轉化為0和1,0代表軟體正常,1代表軟體缺陷 else: category_labels.append(1) return list_datasets, category_labels """ 函式說明:繪製ROC曲線 Parameters: labels:測試標籤列表 predict_prob:預測標籤列表 """ def plot_roc(labels, predict_prob): false_positive_rate, true_positive_rate, thresholds = metrics.roc_curve(labels, predict_prob) roc_auc = metrics.auc(false_positive_rate, true_positive_rate) #計算AUC值 print('AUC=' + str(roc_auc)) plt.title('PC5-ROC') plt.plot(false_positive_rate, true_positive_rate, 'b', label='AUC = %0.4f' % roc_auc) plt.legend(loc='lower right') plt.plot([0, 1], [0, 1], 'r--') plt.ylabel('TPR') plt.xlabel('FPR') # plt.savefig('figures/PC5.png') #將ROC圖片進行儲存 plt.show() if __name__ == '__main__': datasets, labels = data_handle('MDP/KC4.csv') # 對資料集進行處理 # 訓練集和測試集劃分 X_train = datasets[:115] y_train = labels[:115] X_test = datasets[90:] y_test = labels[90:] # 隨機森林分類器 clf = RandomForestClassifier() clf = RandomForestClassifier(n_estimators=200, random_state=0) clf.fit(X_train, y_train) # 使用訓練集對分類器訓練 y_predict = clf.predict(X_test) # 使用分類器對測試集進行預測 print('準確率:', metrics.accuracy_score(y_test, y_predict)) #預測準確率輸出 print('巨集平均精確率:',metrics.precision_score(y_test,y_predict,average='macro')) #預測巨集平均精確率輸出 print('微平均精確率:', metrics.precision_score(y_test, y_predict, average='micro')) #預測微平均精確率輸出 print('巨集平均召回率:',metrics.recall_score(y_test,y_predict,average='macro'))#預測巨集平均召回率輸出 print('平均F1-score:',metrics.f1_score(y_test,y_predict,average='weighted'))#預測平均f1-score輸出 print('混淆矩陣輸出:',metrics.confusion_matrix(y_test,y_predict))#混淆矩陣輸出 print('分類報告:', metrics.classification_report(y_test, y_predict))#分類報告輸出 plot_roc(y_test, y_predict) #繪製ROC曲線並求出AUC值