返回 导航

Python

hangge.com

Python - 机器学习算法库Scikit-Leran使用详解10(随机森林算法)

作者:hangge | 2022-09-26 08:45

十一、随机森林算法

1,基本介绍

(1)集成学习方法(Ensemble Method),或称集成学习算法。它并非一种机器学习算法,更像是一种模型优化方法。简单来说就是通过训练若干个个体弱学习器(weak learner),通过一定的结合策略,就可以最终形成一个强学习器(strong learner),以达到博采众长的目的。在各个著名机器学习竞赛中,选手使用最多的当属集成学习算法。当下深度学习大行其道,它也几乎能与深度学习平分秋色。
根据个体学习器生成方式的不同,目前集成学习的实现方式主要分为如下三种:
  • Bagging 算法为代表的并行式集成学习方法,其中最典型的应用当数“随机森林算法
  • Boosting 算法为代表的串行式集成学习方法,其中应用频率较高的有两个 AdaBoost 算法和 XGBoost 算法
  • Stacking 分层模型集成学习算法

(2)随机森林(Random Forest,简称 RF)是集成学习中的一种典型的 Bagging 算法,它的基本单位是决策树模型。即使用随机的方式建立一个森林,这个森林由很多的决策树组成,并且每一棵决策树之间是相互独立的。当有一个新的输入样本进入森林时,就让森林中的每一棵决策树分别对其进行判断,看看这个样本应该属于哪一类(对于分类算法而言),然后使用少数服从多数的【投票法】,看看哪一类被选择最多,就预测该样本为哪一类。

(3)随机森林既可以处理属性为离散值的样本(即分类问题),也可以处理属性为连续值的样本(即回归问题),另外随机森林还可以应用于无监督学习的聚类问题,以及异常点检测。

2,使用样例

(1)下面我们以 sklearn 库中自带的随机森林算法解决鸢尾花的分类问题。
    在 Scikit-Learn 机器学习库中提供了 BaggingBoosting 两种集成学习方法,除了本样例的随机森林算法外,还有如下几种其他算法:
  • RandomForestClassifier 类:使用随机森林(Random Forest)算法解决分类问题,随机森林可谓 Bagging 集成学习算法的典型代表,它选择以 CART 决策树算法作为弱学习器,是一种常用的机器学习算法。
  • RandomForestRegressor 类:使用随机森林算法解决回归问题
  • ExtraTreesClassifier 类:使用极端随机树(Extra Tree)算法解决分类问题,极端随机树算法可以看作随机森林算法的一种变种,主要原理非常类似,但在决策条件选择时采用了随机选择的策略。
  • ExtraTreesRegressor 类:使用极端随机树算法解决回归问题。
  • AdaBoostRegressor 类:使用 AdaBoost 算法解决分类问题,AdaBoost算法是最知名的Boosting算法之一。
  • AdaBoostRegressor 类:使用 AdaBoost 算法解决回归问题。
  • GradientBoostingClassifier 类:使用 Gradient Boosting 算法解决分类问题,Gradient Boosting 算法常常搭配 CART 决策树算法使用,这就是有名的梯度提升树(Gradient Boosting Decision TreeGBDT)算法。
  • GradientBoostingRegressor 类:使用 Gradient Boosting 算法解决回归问题。
#导入 sklearn 提供的鸢尾花数据
from sklearn.datasets import load_iris
#导入 sklearn 提供的随机森林分类算法
from sklearn.ensemble import RandomForestClassifier
#导入skleran 提供的分割数据集的方法
from sklearn.model_selection import train_test_split
#导入pandas
import pandas as pd
    
#加载数据集
iris = load_iris()
#分割数据集训练集,测试集
x_train,x_test,y_train,y_test=train_test_split(iris['data'],iris['target'],random_state=0)
#创建随机森林分类起
#随机森林与决策树算法一样,其中有一个名为“criterion”的参数
#同样可以传入字符串“gini”或“entropy”,默认使用的是基尼指数
model = RandomForestClassifier()
#训练模型
model.fit(x_train,y_train)
#训练后用测试集对模型进行评分
print("模型评分:",model.score(x_test,y_test))
print('-----------------------------------------------------')
    
print('测试集前5条数据特征值:')
print(pd.DataFrame(x_test).head(5))
print('-----------------------------------------------------')
print('测试集前5条数据目标值:')
print(pd.DataFrame(y_test).head(5))
print('-----------------------------------------------------')
#使用模型预测
y_predict=model.predict(x_test)
print('使用模型预测测试集前5条数据的目标值:')
print(pd.DataFrame(y_predict).head(5))

(2)运行结果如下:
评论

全部评论(0)

回到顶部