网站支付可以做二清,googleseo服务公司,移商网站建设,做门户网站的市场价格文章目录致谢8 随机森林8.1 引入8.2 决策森林8.2.1 集成学习方法8.2.2 什么是随机森林8.2.3 无偏估计8.2.4 决策森林原理过程8.2.5 决策森林算法实现8.3 总结致谢 如何理解无偏估计#xff1f;无偏估计有什么用#xff1f;什么是无偏估计#xff1f;_司南牧|知乎|博客|易懂教…
文章目录致谢8 随机森林8.1 引入8.2 决策森林8.2.1 集成学习方法8.2.2 什么是随机森林8.2.3 无偏估计8.2.4 决策森林原理过程8.2.5 决策森林算法实现8.3 总结致谢 如何理解无偏估计无偏估计有什么用什么是无偏估计_司南牧|知乎|博客|易懂教程|李韬-CSDN博客_无偏估计 无偏估计【统计学-通俗解释】_guomutian911的专栏-CSDN博客_自由度和无偏估计 8 随机森林
随机森林也叫决策森林。
在下面的小节中我们会引入一个例子来看看什么是随机森林以及决策树为什么会过拟合。
8.1 引入
假如有一个男人15岁到25岁之间住在美国有安卓手机还在学校读书。喜欢网球和披萨但不喜欢长时间在沙滩上长散步那么他很可能下载pokemon go这个软件。 这种做法很不理想看起来像是在记忆数据这种情况称为过拟合。决策树经常会过拟合如果我们选用连续特征也会出现这种问题。决策树有许多节点它最终会呈现给我们很多个几乎用点相接的小方块。
换而言之如果不设置特征信息增益的下限则可能会使得每个叶子都只有一个样本点从而划分地太细。即一个样本就是一类。
像下图如此这种分法一般对数据不具备普适性。 那我们应该如何解决这类问题呢
我们可以随机从数据中挑选几列并且根据这些列来构建决策树就这样我们能构建很多决策树当我们有一个新的预测时我们就只需让所有的决策树做出预测并且选取结果中显示最多的即可这种方法称为决策森林。 8.2 决策森林
8.2.1 集成学习方法
如果你不是很能听懂我上面的话没关系在下面有更多能让你听懂的例子。而在讲述随机森林之前我们需要先知道什么是集成学习方法。
集成学习方法是通过建立几个模型组合的来解决单一预测问题它的工作原理是生成多个分类器/模型各自独立地学习和做出预测。这些预测最后结合成组合预测因此优于任何一个单分类的做出预测。如同我们上面8.1小节所说明显地随机森林就是一种集成学习方法。
集成学习方法大多数分为两种bagging和boosting。对了bagging和包包没有关系它指的是自动聚集。
假设我们现在要做一个测试。我们要做判断题但是对于做完的选择题答案我们不是很确定为此我们找来了许多伙伴我们从诸多伙伴中一个一个轮流来做这一份选择题。当所有的小伙伴做完这份选择题后我们把所有的答案集成起来。
如何集成这些答案是一个问题。我们可以采取把所有答案列出来对于某些题目有些小伙伴选择对有些小伙伴选择错误。我们比对所有的小伙伴看看是对的多还是错的多谁多选谁。这样的话就类似于雅典城邦的投票选举我们集各家之长做的题目答案准确率肯定比自己一个人埋头苦干要高得多。
boosting实际上也是在做这么一件事不过它会进一步地汲取朋友们的智慧。
假如这份判断题中有很多类型的题目有政治的有科学的。那么其会从你的小伙伴们挑选出对特定知识了解的相关人物由它们来解决特定的题目准确率可以进一步提高。 在以上的例子中我们单个小伙伴叫做弱学习器而把小伙伴们叫做强学习器。当然弱学习器并不是真的弱只是相对于强学习器来说的罢了。
8.2.2 什么是随机森林
在机器学习中随机森林是一个包含多个决策树的分类器并且其输出的类别是由个别树输出的类别的众数而定。
如下图所示假如你将一个训练集随机选取五份即训练了五个决策树分类器其中四个决策树分类器结果为true一个决策树分类器结果为false那么则取大多数人同意的那个结果即true。 但是其实还有比随机选取列更好的方法。比如说剪枝。但是我们在这一小节暂时先不讲后面我如果不懒就会提到。
8.2.3 无偏估计
在继续下面的讲解中我们需要先谈谈无偏估计。而无偏估计与之相对的就是有偏估计。顾名思义无偏估计就是没有偏差的估计。我们引入一个例子
假如现在我们要从全市的小学统计出所有小学生数学成绩的平均值。你想想全市的小学生啊这是多么庞大的数量在统计学中不能全部统计的我们通常会采用抽样统计。即抽取少部分样本以少部分样本的结果来代替全局结果。
试想如果你从全市的小学生中随机抽取50个小学生然后统计50个小学生的平均值。明显地这具有随机性用来代替全局结果并不过分但是明显地全局结果肯定不会和局部结果相等这和你抽取的手气有关说不定你抽到的刚好就是全市学习最差的那几个小学生呢。
上述的过程中实际上出现一个问题。我们每次抽取一个小学生的成绩后是否放回总样本中。如果放回则说明你的局部样本平均数是总体样本平均数的无偏估计。因为你采用这种方法估算估算的期望值并没有系统上的误差无偏估计的误差来源于随机因素但是如果你采取不放回这说明当你抽取多个样本时如果恰好被你抽走了一些差的那么剩下的那些肯定是好的你计算这样的局部概率有意思吗这样的概率能拿来代替全局概率吗
8.2.4 决策森林原理过程
在8.2.2中我们提到了随机那么随机到底怎么个随机法在决策森林中我们通常采用BootStrap抽样(随机有放回抽样)如8.2.3所说我们之所以选择这种抽样是为了保持局部决策树的无偏估计性保证每个决策树做出的决策都是公平的而不会出现有偏。
在随机森林随机时对于训练集我们要保证做到BootStrap抽象。对于特征我们要从M个特征中随机抽取m个特征且Mm这样的好处是可以起到降维的效果。
8.2.5 决策森林算法实现
说完上述原理我们来看一下如何实现随机森林。 sklearn.ensemble.RandomForestClassifier(n_estimators 10,criterion ‘gini’,max_depth None,bootstrap True,random_state None,min_samples_split 2) 随机森林分类器n_estimators整数类型指森林里的树木数量默认为10。通常为120,200,300,500,800,1200。criterion字符串类型默认基尼系数’gini’你也可以换成熵。max_depth整数类型默认None用于指定树的最大深度。通常为5,8,15,25,30。max_features 字符串类型每个决策树的最大特征数量有’auto’,‘sqrt’,‘log2’,None’四种选择。bootstrap布尔类型默认开启指是否在构建森林时使用返回抽样min_samples_split结点划分最少样本数min_samples_leaf叶子结点的最小样本数。其中n_estimator,max_depth,min_samples_split,min_samples_leaf可以使用超参数网格搜索进行调参。 下面让我们那鸢尾花开刀试一下。
# 导入模块
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCVdef decision_iris():随机森林算法# 1 获取数据集iris load_iris()x_train, x_test, y_train, y_test train_test_split(iris.data, iris.target, random_state4)# 2 预估器实例化estimator RandomForestClassifier(criterionentropy)# 3 指定超参数集合param_dict {n_estimators: [120, 200, 300, 500, 800, 1200], max_depth: [5, 8, 15, 25, 30]}# 4 加入超参数网格搜索和交叉验证estimator GridSearchCV(estimator, param_gridparam_dict, cv10)# 5 训练数据集estimator.fit(x_train, y_train)# 6 模型评估y_predict estimator.predict(x_test)print(y_predict:\n, y_predict)print(直接对比真实值和预测值\n, y_test y_predict)score estimator.score(x_test, y_test)print(准确率为\n, score)decision_iris()跑出来有点久。。我的垃圾电脑就跑个150数据集10折交叉跑了一分钟。。你们CPU好的和有GPU的加油。。。没事别搞太大的数据集指定太大的交叉验证的折数不然等下电脑冒烟了别找我。 8.3 总结
在当前的所有算法中随机森林是具有极好的准确率的但是根据没有免费午餐定理我们只是说他是个好算法而已不是最好的。
随机森林能够有效地运行在大数据集上处理具有高维特征的输入样本而且还不需要降维你特征切多点就相当于降维了。而且通过这个算法你还能评估各个特征在分类问题上的重要性。