1. 程式人生 > >python sklearn包——混淆矩陣、分類報告等自動生成

python sklearn包——混淆矩陣、分類報告等自動生成

preface:做著最近的任務,對資料處理,做些簡單的提特徵,用機器學習演算法跑下程式得出結果,看看哪些特徵的組合較好,這一系列流程必然要用到很多函式,故將自己常用函式記錄上。應該說這些函式基本上都會用到,像是資料預處理,處理完了後特徵提取、降維、訓練預測、通過混淆矩陣看分類效果,得出報告。

1.輸入

從資料集開始,提取特徵轉化為有標籤的資料集,轉為向量。拆分成訓練集和測試集,這裡不多講,在上一篇部落格中談到用StratifiedKFold()函式即可。在訓練集中有data和target開始。

2.處理
  1. def my_preprocessing(train_data):  
  2.     from sklearn import preprocessing  
  3.     X_normalized = preprocessing.normalize(train_data ,norm = "l2",axis=0)#使用l2正規化,對特徵列進行正則
  4.     return X_normalized  
  5. def my_feature_selection(data, target):  
  6.     from sklearn.feature_selection import SelectKBest  
  7.     from sklearn.feature_selection import chi2  
  8.     data_new = SelectKBest(chi2, k= 50).fit_transform(data,target)  
  9.     return data_new  
  10. def my_PCA(data):#data without target, just train data, withou train target.
  11.     from sklearn import decomposition  
  12.     pca_sklearn = decomposition.PCA()  
  13.     pca_sklearn.fit(data)  
  14.     main_var = pca_sklearn.explained_variance_  
  15.     print sum(main_var)*0.9
  16.     import matplotlib.pyplot as plt  
  17.     n = 15
  18.     plt.plot(main_var[:n])  
  19.     plt.show()  
  20. def clf_train(data,target):  
  21.     from sklearn import svm  
  22.     #from sklearn.linear_model import LogisticRegression
  23.     clf = svm.SVC(C=100,kernel="rbf",gamma=0.001)  
  24.     clf.fit(data,target)  
  25.     #clf_LR = LogisticRegression()
  26.     #clf_LR.fit(x_train, y_train)
  27.     #y_pred_LR = clf_LR.predict(x_test)
  28.     return clf  
  29. def my_confusion_matrix(y_true, y_pred):  
  30.     from sklearn.metrics import confusion_matrix  
  31.     labels = list(set(y_true))  
  32.     conf_mat = confusion_matrix(y_true, y_pred, labels = labels)  
  33.     print"confusion_matrix(left labels: y_true, up labels: y_pred):"
  34.     print"labels\t",  
  35.     for i in range(len(labels)):  
  36.         print labels[i],"\t",  
  37.     print
  38.     for i in range(len(conf_mat)):  
  39.         print i,"\t",  
  40.         for j in range(len(conf_mat[i])):  
  41.             print conf_mat[i][j],'\t',  
  42.         print
  43.     print
  44. def my_classification_report(y_true, y_pred):  
  45.     from sklearn.metrics import classification_report  
  46.     print"classification_report(left: labels):"
  47.     print classification_report(y_true, y_pred)  

my_preprocess()函式:

主要使用sklearn的preprocessing函式中的normalize()函式,預設引數為l2正規化,對特徵列進行正則處理。即每一個樣例,處理標籤,每行的平方和為1.

my_feature_selection()函式:

使用sklearn的feature_selection函式中SelectKBest()函式和chi2()函式,若是用詞袋提取了很多維的稀疏特徵,有必要使用卡方選取前k個有效的特徵。

my_PCA()函式:

主要用來觀察前多少個特徵是主要特徵,並且畫圖。看看前多少個特徵佔據主要部分。

clf_train()函式:

可用多種機器學習演算法,如SVM, LR, RF, GBDT等等很多,其中像SVM需要調引數的,有專門除錯引數的函式如StratifiedKFold()(見前幾篇部落格)。以達到最優。

my_confusion_matrix()函式:

主要是針對預測出來的結果,和原來的結果對比,算出混淆矩陣,不必自己計算。其對每個類別的混淆矩陣都計算出來了,並且labels引數預設是排序了的。

my_classification_report()函式:

主要通過sklearn.metrics函式中的classification_report()函式,針對每個類別給出詳細的準確率、召回率和F-值這三個引數和巨集平均值,用來評價演算法好壞。另外ROC曲線的話,需要是對二分類才可以。多類別似乎不行。