模型训练完成后,即使模型评估很好,各项指标都很到位,业务人员肯定也是心里没底的,哪怕有模型公式,他们也看不懂啊。咋整,当然是先把模型的重要评估指标打印给他们看,再把特征贡献度从大到小,画成图给他们看啦。今天就通过sklearn实现模型评估指标和特征贡献度的图形查看。

本文的数据集采用泰坦尼克号幸存者数据。使用sklearn的决策树和随机森林进行预测,然后查看模型的评估指标,最后将特征的贡献度从大到小以柱状图展示。

直接上代码:

# -*- coding: utf-8 -*-
# @Time    : 2018/12/13 上午10:30
# @Author  : yangchen
# @FileName: featureimportance.py
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/opp003/articleimport 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)

最后再来看下,使用随机森林的方法,表现如何:

# -*- coding: utf-8 -*-
# @Time    : 2018/12/14 上午09:13
# @Author  : yangchen
# @FileName: randomforests.py
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/opp003/articleimport matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_recall_fscore_support
from sklearn.model_selection import train_test_split
from sklearn import metrics#导入数据
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)#训练模型
forest = RandomForestClassifier(n_estimators=10, criterion="entropy",max_depth=4, min_samples_leaf=5)
forest.fit(X_train, y_train)# 预测
pred_train = forest.predict(X_train)
pred_test = forest.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(np.array(y_test), np.array(pred_test), average='binary')#特征重要度
features = list(X_test.columns)
importances = forest.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]))

输出结果:

训练集准确率: 0.80, 测试集准确率: 0.75
precision: 0.83. recall: 0.81, F1: 0.82
sex - 0.437
age - 0.300
fare - 0.176
pclass - 0.034
parch - 0.031
embarked - 0.016
sibsp - 0.007

特征贡献度图形如下:

也可以这么写,来查看特征重要度:

(12-19补充另一种写法,由于数据出了问题,导致图形的不一致,主要看方法。。。)

features = list(X_test.columns)importance_frame = pd.DataFrame({'Importance': list(dtree.feature_importances_), 'Feature': list(features)})
importance_frame.sort_values(by='Importance', inplace=True)
#importance_frame['rela_imp'] = importance_frame['Importance'] / sum(importance_frame['Importance'])
importance_frame.plot(kind='barh', x='Feature', figsize=(8, 8), color='orange')
plt.show()

机器学习:sklearn模型指标和特征贡献度查看相关推荐

  1. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...

  2. [机器学习] 树模型(xgboost,lightgbm)特征重要性原理总结

    在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征 ...

  3. ML之ME/LF:机器学习之风控业务中常用模型监控指标CSI(特征稳定性指标)的简介、使用方法、案例应用之详细攻略

    ML之ME/LF:机器学习之风控业务中常用模型监控指标CSI(特征稳定性指标)的简介.使用方法.案例应用之详细攻略 目录 CSI(特征稳定性指标)的简介 1.如何计算CSI? 2.CSI值的意义 3. ...

  4. python机器学习手册——学习代码(导入、处理、时间、图像、降维、sklearn模型、神经网络)

    一.向量.矩阵.数组 # 1.1 创建向量 array #一维数组 import numpy as np vector_row = np.array([1,2,3]) # 创建行向量 vector_c ...

  5. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  6. B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)重点讲解模型验证、特征优化、模型融合等

    [机器学习入门与实践]入门必看系列,含数据挖掘项目实战:数据融合.特征优化.特征降维.探索性分析等,实战带你掌握机器学习数据挖掘 专栏详细介绍:[机器学习入门与实践]合集入门必看系列,含数据挖掘项目实 ...

  7. R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等

    R语言caret包构建机器学习回归模型(regression model).使用DALEX包进行模型解释分析.特征重要度.偏依赖分析等 目录

  8. Anaconda☀利用机器学习sklearn构建模型与实现丨第一课

    1️⃣了解什么是机器学习 2️⃣了解机器学习sklearn库的简介.安装 3️⃣掌握使用sklearn转换器处理数据的方法 4️⃣构建并评价线性回归模型 认识机器学习

  9. R语言使用glm函数构建泊松对数线性回归模型处理三维列联表数据构建饱和模型、使用step函数基于AIC指标实现逐步回归筛选最佳模型、使用summary函数查看简单模型的汇总统计信息

    R语言使用glm函数构建泊松对数线性回归模型处理三维列联表数据构建饱和模型.使用step函数基于AIC指标实现逐步回归筛选最佳模型.使用summary函数查看简单模型的汇总统计信息 目录

  10. svd降维 python案例_菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD

    菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD 概述 从什么叫维度说开来 简单讲,shape中返回了几个数字就是几维. 一张表最多就是一维 当一个数组中存在2张3行 ...

最新文章

  1. Visual Studio 2010 Ultimate测试体系结构
  2. python有几种打开方式_Python中几个以“__”开头的方法介绍总结
  3. python remove函数_python中remove函数的用法是什么?
  4. 网易云的朋友给我这份339页的Android面经,满满干货指导
  5. Apache Cassandra 数据存储模型
  6. Python之进程+线程+协程(multiprocessing多进程模块)
  7. Open Flash Chart 图表组件
  8. 问题 A: 编写函数:比较三个数大小 (Append Code)
  9. BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找
  10. Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
  11. 新浪邮箱服务器密码被盗,邮箱密码盗取严重的注意事项以及处理建议
  12. 树形导航栏(折叠)(jquery)
  13. 将RDL报表转换成RDLC报表的函数
  14. 2路继电器控制直流电机正反转问题
  15. 客制化机械键盘改键软件VIA介绍
  16. Python--pygame.Rect
  17. 情景剧《重走长征路》上演
  18. javaweb项目开发案例
  19. 冯端:漫谈物理学的过去、现在与未来
  20. Artetxe2018CoNLL_Uncovering divergent linguistic information in word embeddings...

热门文章

  1. 运维审计系统:堡垒机
  2. 头条小程序Component构造器
  3. 使用bootstrap写一个注册页面
  4. Google快讯-UTStarcom
  5. 菜鸡程序员是如何写代码的?
  6. 解决Windows系统无法复制粘贴问题
  7. 哈工大末流学渣对于机器人视觉有关知识总结(仅部分)
  8. 有效管理“刺头”员工的方法
  9. c语言windows程序设计-在windows中使用printf,Windows编程(4)-在Windows中使用printf
  10. 新浪登陆按钮三种方式解析