随机森林分类算法

随机森林(Random Forest,简称RF)是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树。假设现在针对的是分类问题,每棵决策树都是一个分类器,那么N棵树会有N个分类结果。随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终输出。它可以很方便的并行训练。 森林表示决策树是多个。随机表现为两个方面:数据的随机性化、待选特征的随机化。   构建流程:采取有放回的抽样方式构造子数据集,保证不同子集之间的数量级一样(元素可以重复);利用子数据集来构建子决策树;将待预测数据放到每个子决策树中,每个子决策树输出一个结果;统计子决策树的投票结果,投票数多的就是随机森林的输出结果。 (1)从样本集中用 Bootstrap采样选出一定数量的样本,比如80%样本集; (2)从所有属性中随机选择K个属性,在K个属性中再选择出最佳分割属性作为节点创建决策树; (3)重复以上两步m次,即建立m棵决策树。可以并行:即m个样本同时提取,m棵决策树同时生成; (4)这m个决策树形成随机森林,通过投票表决结果(比如少数服从多数)决定待预测数据的结果。   随机森林和决策树在单个决策树上的构建区别是:所有特征变成随机部分特征。部分数量是K个,K的取值有一定的讲究。太小了使得单棵树的精度太低,太大了树之间的相关性会加强,独立性会减弱。通常取总特征数的平方根。 PS1:有的文章介绍随机森林的使用时,对特征并没有随机部分选取,还是同决策树全部选取的。 PS2:现实情况下,一个数据集往往有成百个特征,如何选择对结果影响较大的那几个特征,以此来缩减建立模型时的特征数。可以参考:http://www.sohu.com/a/297967370_729271 五,特征重要性评估。     代码示例 from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier import pandas as pd import numpy as np   iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['is_train'] = np.random.uniform(0, 1, len(df)) <= 0.80 df['species'] = iris.target # 得到训练集和测试集 train, test = df[df['is_train']==True], df[df['is_train']==False] # 定义特征列 features = df.columns[:4]   # 训练模型,限制树的最大深度3,决策树个数10 clf = RandomForestClassifier(max_depth=3, n_estimators=10, max_features=1) # 获得训练集中真实结果 Y, _ = pd.factorize(train['species']) # 开始训练 clf.fit(train[features], Y)   # 通过测试集进行预测 preds = clf.predict(test[features]) print (preds) print (test['species'].values)   # 显示预测准确率 diff = 0 for num in range(0,len(preds)):    if(preds[num] != test['species'].values[num]):        diff = diff + 1 rate = ((diff+0.0) / len(preds)) print (1.0-rate)      
上一篇:手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝


下一篇:KNN算法