机器学习算法原理总结系列---算法基础之(3)随机森林(Random Forest)
2017-12-25 16:43
633 查看
刚接触这次词的同学们肯定又感觉,又是一个高上大的算法,其实不然。大家可以想象,随机森林,是一片森林吧。森林又是由树组成的吧,而树的本质其实就是分类器,广义的来说,什么SVM,又都是分类器,当然也包括决策树。所以从广义上它们都可以叫做树,堆积起来就是随机森林。但怎么很好地设计整个架构,那就看看第一部分的讲解吧。
之后我们会经常能听到过拟合这个词,因为在FNN,CNN,RNN中都会有相应的策略去防止过拟合。
对于决策树来说,我们可以通过
剪枝
随机森林
来尽量防止过拟合的现象出现。
接下来尝试理解几个概念:
Bootstraping:
Bootstrapping(拔靴法)算法,指的就是利用有限的样本资料经由多次重复抽样,重新建立起足以代表母体样本分布之新样本。bootstrapping的运用基于很多统计学假设,因此假设的成立与否会影响采样的准确性。
Bagging策略:
bootstrap aggregation
从样本集中重采样(有重复的)选出n个样本
在所有属性上,对这个n个样本建立分类器(ID3,C4.5,CART, SVM, Logistic回归等)
重复以上两步m次,即获得m个分类器
将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类
所以随机森林在bagging基础上做了修改。
从样本集中用Bootstrap采样选出n个样本;
从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
重复以上两步m次,即建立了m棵CART决策树
这m个CART形成随机森林,通过投票决定结果,决定数据属于哪一类。
简单来说,随机森林就是对决策树的集成,但有两点不同:
采样的差异性:从含m个样本的数据集中有放回的采样,得到含m个样本的采样集,用于训练。这样能保证每个决策树的训练样本不完全一样。
特征选取的差异性:每个决策树的n个分类特征是在所有特征中随机选择的(n是一个需要我们自己调整的参数)
随机森林需要调整的参数有:
(1) 决策树的个数
(2) 特征属性的个数
(3) 递归次数(即决策树的深度)
代码实现流程:
导入文件并将所有特征转换为float形式
将数据集分成n份,方便交叉验证
构造数据子集(随机采样),并在指定特征个数(假设m个,手动调参)下选取最优特征
构造决策树
创建随机森林(多个决策树的结合)
输入测试集并进行测试,输出预测结果
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
其它比较流行的数据集还有Adult,Wine,Car Evaluation等。
iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。
该数据集包含了5个属性:
& Sepal.Length(花萼长度),单位是cm;
& Sepal.Width(花萼宽度),单位是cm;
& Petal.Length(花瓣长度),单位是cm;
& Petal.Width(花瓣宽度),单位是cm;
& 种类:Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),以及Iris Virginica(维吉尼亚鸢尾)。
这里可以简单的看出预测值和真实值完全一样。具体的算法识别成功率我就不去写测试逻辑了。众所周知,随机森林的识别率在iris数据及上表现是十分优秀的。
一、原理详解
首先,上一节我讲述了决策树的原理,决策树对训练属于有很好的分类能力,但对未知的测试数据未必有很好的分类能力,泛化能力弱,即可能发生过拟合的现象。之后我们会经常能听到过拟合这个词,因为在FNN,CNN,RNN中都会有相应的策略去防止过拟合。
对于决策树来说,我们可以通过
剪枝
随机森林
来尽量防止过拟合的现象出现。
接下来尝试理解几个概念:
Bootstraping:
Bootstrapping(拔靴法)算法,指的就是利用有限的样本资料经由多次重复抽样,重新建立起足以代表母体样本分布之新样本。bootstrapping的运用基于很多统计学假设,因此假设的成立与否会影响采样的准确性。
Bagging策略:
bootstrap aggregation
从样本集中重采样(有重复的)选出n个样本
在所有属性上,对这个n个样本建立分类器(ID3,C4.5,CART, SVM, Logistic回归等)
重复以上两步m次,即获得m个分类器
将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类
所以随机森林在bagging基础上做了修改。
从样本集中用Bootstrap采样选出n个样本;
从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
重复以上两步m次,即建立了m棵CART决策树
这m个CART形成随机森林,通过投票决定结果,决定数据属于哪一类。
简单来说,随机森林就是对决策树的集成,但有两点不同:
采样的差异性:从含m个样本的数据集中有放回的采样,得到含m个样本的采样集,用于训练。这样能保证每个决策树的训练样本不完全一样。
特征选取的差异性:每个决策树的n个分类特征是在所有特征中随机选择的(n是一个需要我们自己调整的参数)
随机森林需要调整的参数有:
(1) 决策树的个数
(2) 特征属性的个数
(3) 递归次数(即决策树的深度)
代码实现流程:
导入文件并将所有特征转换为float形式
将数据集分成n份,方便交叉验证
构造数据子集(随机采样),并在指定特征个数(假设m个,手动调参)下选取最优特征
构造决策树
创建随机森林(多个决策树的结合)
输入测试集并进行测试,输出预测结果
二、简单的scikit-learn代码实现
Iris数据集很重要,基本后面很多算法都是基于这个数据集进行训练和测试。Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
其它比较流行的数据集还有Adult,Wine,Car Evaluation等。
iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。
该数据集包含了5个属性:
& Sepal.Length(花萼长度),单位是cm;
& Sepal.Width(花萼宽度),单位是cm;
& Petal.Length(花瓣长度),单位是cm;
& Petal.Width(花瓣宽度),单位是cm;
& 种类:Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),以及Iris Virginica(维吉尼亚鸢尾)。
from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris import numpy as np iris = load_iris() # print(iris) # print(iris.shape) rf = RandomForestClassifier() # 这里使用了默认的参数设置 rf.fit(iris.data[:150], iris.target[:150]) # 进行模型的训练 # 随机挑选两个预测不相同的样本 instance = iris.data[[40, 79]] # print(instance) print('instance 0 prediction:', rf.predict(np.array(instance[0]).reshape(1, -1))) print('instance 1 prediction: ', rf.predict(np.array(instance[1]).reshape(1, -1))) print(iris.target[40], iris.target[79])
这里可以简单的看出预测值和真实值完全一样。具体的算法识别成功率我就不去写测试逻辑了。众所周知,随机森林的识别率在iris数据及上表现是十分优秀的。
相关文章推荐
- 机器学习算法原理总结系列---算法基础之(13)模糊C均值聚类(Fuzzy C-means Clustering)
- 佛爷芸: 机器学习算法原理总结系列---算法基础之(1)机器学习介绍
- 机器学习算法原理总结系列---算法基础之(2)决策树(Decision Tree)
- 机器学习算法原理总结系列---算法基础之(2)决策树(Decision Tree)
- 机器学习算法原理总结系列---算法基础之(12)层次聚类(hierarchical clustering)
- 机器学习算法原理总结系列---算法基础之(7)神经网络(Neural Network)
- 机器学习算法原理总结系列---算法基础之(8)简单线性回归(Simple Linear Regression)
- 机器学习算法原理总结系列---算法基础之(11)聚类K均值(Clustering K-means)
- 机器学习算法原理总结系列---算法基础之(4)最邻近规则分类(K-Nearest Neighbor)
- 机器学习算法原理总结系列---算法基础之(9)多元回归分析(Multiple Regression)
- 机器学习算法原理总结系列---算法基础之(10)非线性回归(Logistic Regression)
- 机器学习算法原理总结系列---算法基础之(6)支持向量机(Support Vectors Machine)
- 机器学习算法原理总结系列---算法基础之(5)朴素贝叶斯(Naive Bayesian)
- 基础算法系列总结:回溯算法(解火力网问题)
- 决策树系列算法总结——随机森林
- 基础算法系列总结:贪心算法
- 算法基础:基本排序算法原理、实现与总结
- 随机森林(Random Forest)算法原理及Spark MLlib调用实例(Scala/Java/python)
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
- 基础算法系列总结:分支限界算法