随机森林

集成学习 - 决策树-随机森林

吃可爱长大的小学妹 提交于 2019-12-09 00:40:33
认识 我觉得决策树+ 随机森林 应该是 ML 中最为重要的算法之一了吧, 反正我是很喜欢用的. 算法难度低, 可解释性很强, 能可视化 能处理非线性, 可扩展为随机森林(集成学习) 建立决策树的判别依据有很多, 比较主流的有经典的 ID3 算法(熵), C4.5 , 基尼系数等. 我是这种基于熵的理解了, 上学时学过熵的概念, 在<> 和 <> 有讲到. 其余的也没仔细看, 暂时能深入理解一个就可以了. 信息熵 衡量信息的不确定性 或 混乱程度的指标 不确定性越大, 则熵值越大 直观认知 举几个栗子: a. 大海捞针: 几乎不可能, 熵值很大 b. 扔一次硬币: 不确定性也很大, 熵值很大 c. 詹姆斯强攻篮下: 进球概率大, 不确定性很小, 因此熵值小 d. 斗地主时我已经推出对方剩下的牌: 这个信息量就很大了, 对于局势不确定性减少, 则熵变小. 通过直观, 我们用 信息熵 这个概念来 衡量信息的不确定性大小 , 如何对这个概念直观定性呢? 信息量,感觉上跟 概率 有关系, 概率很多, 信息量就很多 信息量, 应该是可以 相加 的 信息量, 应该是一个 单调的 信息量, 应该 不能为负数 , 最多只能有, 最差情况是 没有信息含量 , 不能说负吧 理性认知 也可以从系统论的观点来认识 (系统 = 多个元素的 相互联系). 可以肯定一点, 既然跟概率有关, 那 概率取值是 [0

随机森林的原理以及使用(集成算法)

∥☆過路亽.° 提交于 2019-12-06 04:50:52
1.什么是随机森林? 随机森林其实就是多棵决策树. 通过对样本重新采样的方法得到不同的训练样本集,在这些新的训练样本集上分别训练学习器,最终合并每一个学习器的结果,作为最终的学习结果,其中,每个样本的权重是一样的.具体过程如下: 在该 方法中,b个学习器之间彼此是相互独立的,这样的特点使该方法更容易并行 2.随机森林的原理 1 #导包 2 import numpy as np 3 4 import matplotlib.pyplot as plt 5 %matplotlib inline 6 7 # RandomForestClassifier为随机森林 ExtraTreesClassifier为极限森林 8 from sklearn.ensemble import RandomForestClassifier,ExtraTreesClassifier 9 10 from sklearn import datasets 11 12 import pandas as pd 13 14 from sklearn.model_selection import train_test_split 15 16 from sklearn.tree import DecisionTreeClassifier 随机森林 :多颗决策树构建而成,每一颗决策树都是刚才讲到的决策树原理 多颗决策树一起运算-

08 决策树与随机森林

别等时光非礼了梦想. 提交于 2019-12-05 15:32:34
08 决策树与随机森林 决策树之信息论基础 认识决策树 来源: 决策树的思想来源非常朴素,程序设计中的条件分支结构就是if - then 结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。 举例:是否见相亲对象 信息的度量和作用 克劳德 .艾尔伍德 .香农:信息论创始人,密西根大学学士,麻省理工学院博士。 1948年发表了划时代论文 - 通信的数学原理,奠定了现代信息论的基础。 信息的单位: 比特 (bit) 举例: 以32支球队争夺世界杯冠军 如果不知道任何球队的信息,每支球队得冠概率相等。 以二分法预测,最少需要使用5次才能预测到准确结果。 5 = log32 (以2为底) 5 = -(1/32log1/32 + 1/32log1/32 + ......) 开放一些信息,则小于5bit, 如1/6 德国,1/6 巴西, 1/10 中国 5 > -(1/6log1/4 + 1/6log1/4 + ....) 信息熵: “谁是世界杯冠军”的信息量应该比5 bit少, 它的准确信息量应该是: H = -(p1logp1 + p2logp2 + p3logp3 +......p32logp32 ) Pi 为第i支球队获胜的概率 H 的专业术语就是信息熵,单位为比特 决策树的划分以及案例 信息增益 定义: 特征A对训练数据集D的信息增益g(D,A), 定义为集合D的信息熵H

RandomForest随机森林

99封情书 提交于 2019-12-05 13:54:09
  随机森林,顾名思义,是由众多决策树构建而成的算法。其最终输出由众多决策树根据投票决定(得票最多者获胜;或者得票超过一半输出,否则不输出。具体策略根据情况而定)。随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。具体的,集成学习包含Boosting和Bagging两大部分。    下面是随机森林的构造过程:   1. 假如有N个样本,则有放回的随机选择N个样本(每次随机选择一个样本,然后返回继续选择)。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。   2. 当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。   3. 决策树形成过程中每个节点都要按照步骤2来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。   4. 按照步骤1~3建立大量的决策树,这样就构成了随机森林了。 在建立每一棵决策树的过程中,有两点需要注意采样与完全分裂。   首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样

机器学习之随机森林(学习笔记)

半腔热情 提交于 2019-12-04 00:53:11
1.随机森林算法采用Bootstrap(有放回的随机采样)采样从样本集中选出n个样本,但是更进一步,它从所以属性中随机选取K个属性,然后再选择最佳分割属性最为节点建立CART决策树。随机森林算法进行了两次采样。重复以上步骤k次,建立k棵CART决策树,这k颗CART决策树构成随机森林,通过投票的方式决定数据是属于哪一类的。 2.样本抽样(Bagging): 从原始的数据集中有放回的地随机抽取K个与原样本集同样大小的训练集{T k ,k=1,2...k},由每个训练样本T k 构造一棵决策树。 3.特征子空间抽样: 从全部属性中等概率随机抽取一个属性子集(通常取(|log 2 (M)|+1)个属性,M为特征总数),再从这个子集中选取一个最优属性来分裂节点。 4.随机森林的特点 在当前所有算法中,具有极好的准确率 能够有效地运行在大数据集上 能够处理具有高维特征的输入样本,而且不需要降维 能够评估各个特征在分类问题上的重要性 在生成过程中,能够获取到内部生成误差的一种无偏估计 对于缺省值问题也能够获得很好得结果 5.随机森林如何选择优秀的特征: 6.如何选择最优秀的森林: 7.随机森林分类器的相关参数介绍: https://blog.csdn.net/w952470866/article/details/78987265 来源: https://www.cnblogs.com

分类算法-决策树、随机森林

≡放荡痞女 提交于 2019-12-03 11:02:48
分类算法之决策树 决策树是一种基本的分类方法,当然也可以用于回归。我们一般只讨论用于分类的决策树。决策树模型呈树形结构。在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合。在决策树的结构中,每一个实例都被一条路径或者一条规则所覆盖。通常决策树学习包括三个步骤:特征选择、决策树的生成和决策树的修剪 优点: 计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理逻辑回归等不能解决的非线性特征数据 缺点: 可能产生过度匹配问题 适用数据类型: 数值型和标称型 特征选择 特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率,如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的京都影响不大。通常特征选择的准则是信息增益,这是个数学概念。通过一个例子来了解特征选择的过程。 我们希望通过所给的训练数据学习一个贷款申请的决策树,用以对文莱的贷款申请进行分类,即当新的客户提出贷款申请是,根据申请人的特征利用决策树决定是否批准贷款申请。特征选择其实是决定用那个特征来划分特征空间。下图中分别是按照年龄,还有是否有工作来划分得到不同的子节点 问题是究竟选择哪个特征更好些呢?那么直观上,如果一个特征具有更好的分类能力,是的各个自己在当前的条件下有最好的分类

sklearn之决策树和随机森林对iris的处理比较

為{幸葍}努か 提交于 2019-12-03 04:17:41
# Iris鸢尾花数据集是常用的分类实验数据集,由Fisher, 1936收集整理。 # 是一类多重变量分析的数据集。分为3类,每类50个数据,每个数据包含4个属性。 # 可通过4个属性预测鸢尾花属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。 sklearn决策树 from sklearn import datasets,tree import numpy as np #载入数据集 iris=datasets.load_iris() iris_data=iris['data'] iris_label=iris['target'] X=np.array(iris_data) Y=np.array(iris_label) #训练 clf=tree.DecisionTreeClassifier(max_depth=5) clf.fit(X,Y) #预测 print clf.predict([[4.1, 2.2, 2.3, 5.4]]) sklearn随机森林 from sklearn import datasets, ensemble import numpy as np iris=datasets.load_iris() iris_data=iris['data'] iris_label=iris['target'] X=np.array(iris

Kaggle实战:随机森林预测泰坦尼克生存率

匿名 (未验证) 提交于 2019-12-03 00:25:02
一、项目背景和分析需求的提出 泰坦尼克号出事后,收集了乘客的各项数据,包括: PassengerId、Survived、Pclass、Name、Sex、Age、SibSp、Parch、Ticket、Fare、Cabin、Embarked。 要求用这些数据训练一个能够判断乘客是否生还的二分类器。 二、数据预处理 1.导入数据,熟悉数据 这是进行分析的第一步,我们需要大概了解数据集都有哪些字段,都是什么类型的变量,记录是否完整等。 import pandas as pd #用pandas库的read_csv()来读取文件,其中('')中的内容如果不在同一个环境下,用绝对路径。 titanic = pd.read_csv('train.csv') #不包括列名显示前5行,系统从0开始计数 print(titanic.head()) #显示数据的各项基本数字特征:计数、均值、方差等等 print(titanic.describe()) 得到结果: PassengerId Survived Pclass \ 0 1 0 3 1 2 1 1 2 3 1 3 3 4 1 1 4 5 0 3 Name Sex Age SibSp \ 0 Braund, Mr. Owen Harris male 22.0 1 1 Cumings, Mrs. John Bradley (Florence Briggs

随机森林

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、 集成学习: 选择训练多个分类模型,并将各自的预测结果组合起来,可以提高分类问题的预测准确性。分为两类:bagging算法和boosting算法 Bagging算法通过对样本的有放回抽样,产生多个训练子集,并在每一个子集上训练一个分类器,最终的分类结果由多个分类器的分类结果投票而得。Boosting算法通过顺序的给训练集中的数据重新加权创造不同的基学习器。核心思想是重复利用一个基学习器来对数据集进行修饰,在每次学习过程中,通过计算错误率来对坏的、好的数据进行重新加权,再次计算错误率,最后对每一个分类器的结果进行线性加权得到最终预测效果。 图1 bagging算法流程图 图2 boosting算法流程图 随机森林 随机森林是Bagging算法的一种,算法流程如下: 1. 通过有放回的对m个样本进行m次抽样,有些样本会重复出现,而有些样本会抽不到。 2. 对样本的n维特征进行随机选择出k维特征,k=log2(n),然后从这k维特征,根据基尼指数,选择最优属性对二叉树进行训练。 3. 重复训练所有的树,直到该节点的所有训练样本都属于同一类别。 二、 决策树 决策树是基于树结构来进行决策的方法或模型。决策树的关键是如何选择划分属性来对数据进行分类。一般而言,我们希望随着树的划分,决策树的节点所包含的样本尽可能的都属于同一类别,即节点的“纯度”越来越高。 2.1 信息增益

随机森林

匿名 (未验证) 提交于 2019-12-03 00:03:02
##随机森林-分类 from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification #1.导入数据 #data = pd.read_csv(’’) #2.数据预处理 #略,最终生成x_train,y_train,x_test #导入sklearn的数据集 x_train, y_train = make_classification(n_samples=1000, n_features=4, n_informative=2, n_redundant=0, random_state=0, shuffle=False) #3.模型训练 clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0) clf.fit(x_train, y_train) #4.模型预测 #特征重要性 print(‘feature_importances:’, clf.feature_importances_) #构造数据 x_test = [[0, 0, 0, 0], [2, 6, 4, 4]] y_predict = clf.predict(x_test) print(y