機器學習:sklearn模型指標和特徵貢獻度檢視
阿新 • • 發佈:2018-12-13
模型訓練完成後,即使模型評估很好,各項指標都很到位,業務人員肯定也是心裡沒底的,哪怕有模型公式,他們也看不懂啊。咋整,當然是先把模型的重要評估指標列印給他們看,再把特徵貢獻度從大到小,畫成圖給他們看啦。今天就通過sklearn實現模型評估指標和特徵貢獻度的圖形檢視。
本文的資料集採用泰坦尼克號倖存者資料。使用sklearn的決策樹進行預測,然後檢視模型的評估指標,最後將特徵的貢獻度從大到小以柱狀圖展示。
直接上程式碼:
# -*- coding: utf-8 -*- # @Time : 2018/12/13 上午10:30 # @Author : yangchen # @FileName: featureimportance.py # @Software: PyCharm # @Blog :https://blog.csdn.net/opp003/article import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score, precision_recall_fscore_support from sklearn.model_selection import train_test_split #匯入資料 df = pd.read_csv('processed_titanic.csv', header=0) #設定y值 X = df.drop(["survived"], axis=1) y = df["survived"] #訓練集和測試集劃分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, shuffle=True) #訓練模型 dtree = DecisionTreeClassifier(criterion="entropy", random_state=123, max_depth=4, min_samples_leaf=5) dtree.fit(X_train, y_train) # 預測 pred_train = dtree.predict(X_train) pred_test = dtree.predict(X_test) #準確率 train_acc = accuracy_score(y_train, pred_train) test_acc = accuracy_score(y_test, pred_test) print ("訓練集準確率: {0:.2f}, 測試集準確率: {1:.2f}".format(train_acc, test_acc)) #其他模型評估指標 precision, recall, F1, _ = precision_recall_fscore_support(y_test, pred_test, average="binary") print ("精準率: {0:.2f}. 召回率: {1:.2f}, F1分數: {2:.2f}".format(precision, recall, F1)) #特徵重要度 features = list(X_test.columns) importances = dtree.feature_importances_ indices = np.argsort(importances)[::-1] num_features = len(importances) #將特徵重要度以柱狀圖展示 plt.figure() plt.title("Feature importances") plt.bar(range(num_features), importances[indices], color="g", align="center") plt.xticks(range(num_features), [features[i] for i in indices], rotation='45') plt.xlim([-1, num_features]) plt.show() #輸出各個特徵的重要度 for i in indices: print ("{0} - {1:.3f}".format(features[i], importances[i]))
核心程式碼:
importances = dtree.feature_importances_
indices = np.argsort(importances)[::-1]
第一行,是通過模型的feature_importances_方法獲取特徵貢獻度。使用sklearn的演算法都有這個方法。然後使用argsort對其進行排序,由於argsort排序是從小到大的,因此要用[::-1]進行倒序,得到從大到小的排序。
整個程式碼執行得到輸出如下:
訓練集準確率: 0.80, 測試集準確率: 0.79 精準率: 1.00. 召回率: 0.70, F1分數: 0.82 sex - 0.543 age - 0.247 fare - 0.211 embarked - 0.000 parch - 0.000 sibsp - 0.000 pclass - 0.000
特徵貢獻度圖形如下:
另外,也可以使用score方法獲取模型得分,但是引數得換下:
train_acc = dtree.score(X_train, y_train)
test_acc = dtree.score(X_test, y_test)