当前位置:   article > 正文

随机森林分类算法+特征重要性可视化_随机森林 可视化

随机森林 可视化

利用Python第三库——sklearn实现随机森林算法

随机森林简介

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。
推荐博客:https://blog.csdn.net/ex_6450/article/details/126150219
分类算法——随机森林

Python代码

准备工作:

#导入需要用到的包
import pandas  as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
#解决中文显示问题
#中文字体为宋体,数字字体是Time New Roman
plt.rcParams['font.sans-serif'] = ['SimSun', 'Times New Roman']  # 汉字字体集
plt.rcParams['font.size'] = 10  # 字体大小
#解决无法显示符号的问题
plt.rcParams['axes.unicode_minus']=False
# 解决 Seaborn 中文显示问题
sns.set(font='SimHei')
#加载数据
data=pd.read_csv(r'D:/Jupyter/data/training.csv',encoding="gb18030")#解决不是utf_8存储数据报错问题
data.drop(['编号'],axis=1,inplace=True)
X=data.drop(['信用分类'],axis=1)
y=data['信用分类']

# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=0) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

调用sklearn.ensemble 的 RandomForestClassifier算法包

# #随机森林算法不需要对特征进行缩放(标准化)
RFC = RandomForestClassifier(max_depth=2, random_state=0)
RFC.fit(X, y)
'''RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=2, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=0, verbose=0, warm_start=False)'''
print(RFC.feature_importances_)
y_pred=RFC.predict(X_test)
print("准确率:",RFC.score(X_test,y_test))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

模型结果:

[0.27437993 0.11668674 0.0928002 0.04116117 0.1341292 0.1298855 0.0422001 0.00309484 0.02186765 0.00515844 0.00338586 0.02550717 0.0546635 0.02238486 0.01622125 0.0058805 0.00045165 0.00135129 0.00333696 0.00545319]
准确率:0.70625

特征可视化

水平条形图

# 获取特征重要性得分
feature_importances = RFC.feature_importances_
# 创建特征名列表
feature_names = list(X.columns)
# 创建一个DataFrame,包含特征名和其重要性得分
feature_importances_df = pd.DataFrame({'feature': feature_names, 'importance': feature_importances})
# 对特征重要性得分进行排序
feature_importances_df = feature_importances_df.sort_values('importance', ascending=True)

# 颜色映射
colors = plt.cm.rainbow(np.linspace(0, 1, len(feature_names)))####颜色可改YlGnBu、PuBu、viridis······

# 可视化特征重要性
#水平条形图
fig, ax = plt.subplots(figsize=(13, 6))
ax.barh(feature_importances_df['feature'], feature_importances_df['importance'], color=colors)
ax.set_xlabel('特征重要性', fontsize=12)  # 图形的x标签
ax.set_title('随机森林特征重要性可视化', fontsize=15)
for i, v in enumerate(feature_importances_df['importance']):##显示特征占比
    ax.text(v + 0.01, i, round(v, 3), ha='center', fontname='Times New Roman', fontsize=10)
##注意显示数值的坐标轴位置
# # 设置图形样式
# plt.style.use('default')
ax.spines['top'].set_visible(False)  # 去掉上边框
ax.spines['right'].set_visible(False)  # 去掉右边框
ax.set_facecolor('white')#背景色为白色
ax.grid(False)#关闭内部网格线

# 保存图形
plt.savefig('./特征重要性.jpg', dpi=400, bbox_inches='tight')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在这里插入图片描述

垂直条形图

# 可视化特征重要性
#垂直条形图
fig, ax = plt.subplots(figsize=(12, 6))
ax.bar(feature_importances_df['feature'], feature_importances_df['importance'], color=colors)
ax.set_xlabel('特征重要性', fontsize=12)  # 图形的x标签
ax.set_title('随机森林特征重要性可视化', fontsize=15)
plt.xticks(rotation=60)
for i, v in enumerate(feature_importances_df['importance']):##显示特征占比
    ax.text(i,v+0.01, round(v, 3), ha='center', fontname='Times New Roman', fontsize=10)

# # 设置图形样式
# plt.style.use('default')
ax.spines['top'].set_visible(False)  # 去掉上边框
ax.spines['right'].set_visible(False)  # 去掉右边框
ax.set_facecolor('white')#背景色为白色
ax.grid(False)#关闭内部网格线

# 保存图形
#plt.savefig('./特征重要性.jpg', dpi=400, bbox_inches='tight')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述
数据集我会上传资源,接下来的博客我会尽量调用sklearn包中的数据集。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/97649
推荐阅读
相关标签
  

闽ICP备14008679号