随机森林:对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 pltconf_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()
其结果如下:
具体的各类解释可以在网上找到许许多多,本文不作详细解释,给出大致的代码参考,遇到不懂的再去调查学习,最后记录,成长。
随机森林:对UCI数据集的分类实现相关推荐
- RDKit | 基于随机森林的化合物活性二分类模型
基于随机森林算法的化合物二分类机器学习模型 代码示例 #导入依赖包 import pandas as pd import numpy as np from rdkit import Chem, Dat ...
- RandomForest:随机森林预测生物标记biomarker——分类
随机森林简介 R randomForest包 安装与加载 分类Classification 分类结果主坐轴分析 随机选取2/3预测,1/3验证 无监督分类 分层抽样 Reference 猜你喜欢 写在 ...
- matlab中使用随机森林对鸢尾花数据集分类
%% I. 清空环境变量 clear all clc warning off %% II. 导入数据 load iris_data.mat %% % 1. 随机产生训练集/测试集 a = randpe ...
- 机器学习基础——分类算法之决策树、随机森林、Titanic乘客生存分类
目录 1 认识决策树 1.1 信息增益.信息熵的计算 1.2 举例计算编辑 1.3 决策树的分类依据 1.4 sklearn决策树API 2 泰坦尼克号乘客生存分类 2.1 案例背景 2.2 数据 ...
- 【机器学习实战】利用sklearn中的随机森林对红酒数据集进行分类预测
1. sklearn中的集成算法 sklearn中的集成算法模块ensemble 2.预测代码及结果 %matplotlib inline from sklearn.tree import Decis ...
- 练习(一)——决策树与随机森林分析Titanic数据集船员生还情况
数据描述 Titanic数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活 Pclass:船舱类别,3类别最高 Name.Sex.Age分别为姓名.性别.年龄,其中年龄有缺失 S ...
- 大数据分析案例-基于随机森林算法构建新闻文本分类模型
- 【华为云技术分享】【Python算法】分类与预测——Python随机森林
1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探索等方面,取得了不错的成效.另外,它还担任了集成学习中的 ...
- 机器学习笔记 十九:由浅入深的随机森林模型之分类
随机森林学习内容 1. 集成学习 2.sklearn中的集成算法 2.1 sklearn中的集成算法模块ensemble 2.2 RandomForestClassifier 2.2.1 参数 2.2 ...
- 机器学习5—分类算法之随机森林(Random Forest)
随机森林(Random Forest) 前言 一.随机森林 1.什么是随机森林 2.随机森林的特点 3.随机森林的生成 二.随机森林的函数模型 三.随机森林算法实现 1.数据的读取 2.数据的清洗和填 ...
最新文章
- makefile 最简单用法
- leetcode-66-加一
- mysql unicode转汉字_任意汉字显示,给你的嵌入式系统(含MCU)装上字库
- [html] 实现九宫格布局
- Linux学习之C语言的进程与线程编程
- Node.js文件的同步异步事件循环
- 绿盟面试题事件有疑 大家认清类似事件正规方式
- 大数据可视化平台有什么优势
- 2017-2018-2 1723《程序设计与数据结构》第九周作业 第二周结对编程 总结
- C#图片上一张下一张
- Dapper系列之三:Dapper的事务修改与删除
- NoteExpress的使用方法
- 零基础语法入门第九/十讲 使用疑问词进行提问和回答
- 微信小程序:日期转化为时间戳+时间戳转化为日期(最全最实用)
- 移动硬盘无法读取,也无法显示?看高手是怎么恢复的
- Java 本地接口(JNI)编程指南和规范学习笔记2
- matlab生成向量和矩阵
- 开源的微信个人号接口 itchat 使用
- amd锐龙笔记本cpu怎么样_如果你要购买笔记本的话!千万不要现在购买AMD锐龙笔记本!因为...
- c语言双边滤波算法,浅析bilateral filter双边滤波器的理解