随机森林:对UCI数据集的分类实现

随机森林:对UCI数据集的分类实现

关于随机森林的原理网上有许许多多,这里不再赘述。sklearn中的RandomForestClassifier包即可满足你对随机森林的调用。
UCI数据集可在UCI官方页面中进行下载并使用。
本文主要用于记录笔者自己的代码过程。
几个简易的数据集可从 sklearn.datasets中进行调用,如红酒数据 wine,鸢尾花数据 iris,可参考知乎的这篇文章sklearn中的datasets数据集
若数据中并非全部为数字,如有‘male’、‘female’等非数字数据,可调用sklearn.preprocessing进行transform。
关于参数的选择可以进行迭代计算,然后进行可视化,如:

# 大致测试 n_estimators 的最优范围
score1 = []

for i in range(0, 150, 10):
    clf = RandomForestClassifier(n_estimators=i+1,
                                n_jobs=-1,
                                random_state=90)
    score = cross_val_score(clf, wine.data, wine.target, cv=5).mean()
    score1.append(score)
print(max(score1))
print((score1.index(max(score1))*10)+1)
plt.figure(figsize=[20,5])
plt.plot(range(1,151,10),score1)
plt.show()

代码结果如下图所示,然后再进行调整。
结果如下
RandomForest 有调参神器,在sklearn.model_selection中的GridSearchCV,可参考网页
代码参考如下:

#调整 min_samples_leaf
param_grid={'min_samples_leaf':np.arange(1, 4, 1)}

rfc = RandomForestClassifier(n_estimators=14
                             ,random_state=90
                            )
GS = GridSearchCV(rfc,param_grid,cv=10)
GS.fit(wine.data,wine.target)

print(GS.best_params_)

print(GS.best_score_)

最后进行结果参数评估,如acc, precision, recall等评估指标,代码如下:

clf = RandomForestClassifier(n_estimators=14
                             ,random_state=90
                             ,min_samples_leaf=1
                             ,min_samples_split=9
                             ,criterion='gini')
clf.fit(train_data, train_label) # 进行学习
train_pred_results=clf.predict(train_data)
print('acc_train = ' + str(np.round(accuracy_score(train_pred_results, train_label), 5)))
test_pred_results=clf.predict(test_data)
print('acc_test = ' + str(np.round(accuracy_score(test_pred_results, test_label), 5)))
print(classification_report(test_label, test_pred_results)) 

最后进行数据维度重要性可视化,参考代码如下:

features = ['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium'
            , 'total_phenols', 'flavanoids', 'nonflavanoid_phenols',
            'proanthocyanins', 'color_intensity', 'hue',
            'od280/od315_of_diluted_wines', 'proline']
importances = clf.feature_importances_
indices = np.argsort(importances)[::-1]
num_features = len(importances)
print(num_features)
#将特征重要度以柱状图展示
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]))

其可视化结果如下:
在这里插入图片描述
以及最终的混淆矩阵可视化,代码如下:

import seaborn as sns
import matplotlib as plt 
%matplotlib inline
import matplotlib.pyplot as plt

conf_mat = confusion_matrix(test_label, test_pred_results)
sns.set(font_scale=3)
plt.figure(figsize=(16,14))
sns.heatmap(conf_mat, annot=True, fmt="d", annot_kws={"size": 20});
plt.title("Confusion matrix", fontsize=30)
plt.ylabel('True label', fontsize=25)
plt.xlabel('Predict label', fontsize=25)
plt.show()

其结果如下:
在这里插入图片描述
具体的各类解释可以在网上找到许许多多,本文不作详细解释,给出大致的代码参考,遇到不懂的再去调查学习,最后记录,成长。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值