赞
踩
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。
推荐博客:https://blog.csdn.net/ex_6450/article/details/126150219
分类算法——随机森林
准备工作:
#导入需要用到的包
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
#解决中文显示问题 #中文字体为宋体,数字字体是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)
调用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))
模型结果:
[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')
# 可视化特征重要性 #垂直条形图 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')
数据集我会上传资源,接下来的博客我会尽量调用sklearn包中的数据集。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。