随机森林算法介绍与py实现(泰坦尼克号案例)

本章会介绍随机森林的算法原理,以及用泰坦尼克号案例讲解如何用py实现随机森林算法

一、随机森林原理简介

随机森林是基于 Bagging 思想实现的一种集成学习算法,采用决策树模型作为每一个弱学习器。

1.训练:

  1. 有放回的产生训练样本
  2. 随机挑选 n 个特征(n 小于总特征数量)

2.预测:

平权投票,多数表决输出预测结果

3.流程图

image

二、随机森林代码实现(数据预处理)

1.加载相应的库

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

2.获取数据集

titan = pd.read_csv("../ch07_other_supervised/train.csv")

3.数据预处理

3.1 抽取特征和标签

x = titan[["Pclass","Age","Sex"]].copy()
y = titan["Survived"]

3.2 空值处理

x['Age'] = x['Age'].fillna(value=titan['Age'].mean())

3.3 独热编码处理

x = pd.get_dummies(x) # 该函数会自动识别Dtype维object的特征,进行独热编码

3.4 划分数据集

x_train, x_test, y_train, y_test= train_test_split(x, y, random_state=42, test_size=0.2)

三、随机森林代码实现(场景1:单一决策树)

4.模型训练,预测,评估

# 4.1 创造决策树对象,演示:单一的决策树效果
estimator1 = DecisionTreeClassifier()
# 4.2 模型训练
estimator1.fit(x_train, y_train)
# 4.3 模型预测
y_pred1 = estimator1.predict(x_test)
print(f'预测值为{y_pred1}')
# 4.4 模型评估
print(f'模型准确率为{estimator1.score(x_test, y_test)}') #0.776536312849162
print('-'*50)

四、随机森林代码实现(场景2:采用默认参数的随机森林算法)

4. 模型训练,预测,评估

随机森林算法RandomForestClassifier()的主要参数:
1.n_estimators:决策树数量,(default = 10)
2.Criterion:entropy、或者 gini, (default = gini)
3.max_depth:指定树的最大深度,(default = None 表示树会尽可能的生长)
4.max_features="auto", 决策树构建时使用的最大特征数量
If "auto", then max_features=sqrt(n_features).
If "sqrt", then max_features=sqrt(n_features) (same as "auto").
If "log2", then max_features=log2(n_features).
If None, then max_features=n_features.
5.bootstrap:是否采用有放回抽样,如果为 False 将会使用全部训练样本,(default = True)
6.min_samples_split:结点分裂所需最小样本数,(default = 2)
如果节点样本数少于 min_samples_split,则不会再进行划分.
如果样本量不大,不需要设置这个值.
如果样本量数量级非常大,则推荐增大这个值.
7.min_samples_leaf:叶子节点的最小样本数,(default = 1)
如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝.
较小的叶子节点样本数量使模型更容易捕捉训练数据中的噪声.
8.min_impurity_split: 节点划分最小不纯度
如果某节点的不纯度 (基尼系数,均方差) 小于这个阈值,则该节点不再生成子节点,并变为叶子节点.
一般不推荐改动默认值 1e-7

# 4.1 创造随机森林对象,演示:多个决策树(Bagging思想)效果
estimator2 = RandomForestClassifier() # 默认参数,n_estimators = 100,max_depth=None
# 4.2 模型训练
estimator2.fit(x_train, y_train)
# 4.3 模型预测
y_pred2 = estimator2.predict(x_test)
print(f'预测值为{y_pred2}')
# 4.4 模型评估
print(f'模型准确率为{estimator2.score(x_test, y_test)}') #0.7877094972067039
print('-'*50)

五、随机森林代码实现(场景3:网格搜索随机森林算法)

4. 模型训练,预测,评估

estimator3 = RandomForestClassifier() # 默认参数,n_estimators = 100,max_depth=None
# 4.2 参数准备
params = {
    'n_estimators':[20,30,40,50,60,90,100,110],
    'max_depth':[2,3,5,6,7,8,9],
}
# 4.3 创建网格搜索对象结合交叉验证
gs_estimator = GridSearchCV(estimator=estimator3, param_grid=params, cv=3)
# 4.4 模型训练
gs_estimator.fit(x_train, y_train)
# 4.5 预测
y_pred3 = gs_estimator.predict(x_test)
print(f"随机森林模型的预测值{y_pred3}")
# 4.6 评估
print(f"随机森林模型的准确率{gs_estimator.score(x_test, y_test)}")
# 4.7 最佳参数
print(f"最佳参数为{gs_estimator.best_params_}") #0.7988826815642458
posted @ 2026-06-19 15:19  王新文  阅读(11)  评论(0)    收藏  举报