深度学习篇---sklearn中的随机森林实现
·
Scikit-learn(简称 sklearn)是 Python 中最常用的机器学习库之一,它提供了简洁易用的随机森林实现,无需我们自己手动构建决策树。下面我将通俗易懂地介绍如何使用 Scikit-learn 实现随机森林,包括分类和回归两种场景。
一、随机森林的基本概念
随机森林是一种集成学习模型,由多个决策树组成:
- 训练时,每个决策树使用随机采样的样本和随机选择的特征
- 预测时,通过 "多数投票"(分类)或 "平均结果"(回归)得到最终答案
- 优点:准确率高、不易过拟合、能处理高维数据
二、安装 Scikit-learn
如果还没安装,可以用 pip 安装:
pip install scikit-learn
三、分类问题:用随机森林做分类
以经典的鸢尾花数据集为例,演示如何用随机森林进行分类。
完整代码示例
# 1. 导入需要的库
from sklearn.ensemble import RandomForestClassifier # 随机森林分类器
from sklearn.datasets import load_iris # 鸢尾花数据集
from sklearn.model_selection import train_test_split # 划分训练集和测试集
from sklearn.metrics import accuracy_score # 计算准确率
# 2. 准备数据
iris = load_iris()
X = iris.data # 特征数据(花萼长度、宽度,花瓣长度、宽度)
y = iris.target # 标签(0、1、2分别代表三种鸢尾花)
# 3. 划分训练集和测试集(70%训练,30%测试)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42 # random_state固定随机划分方式
)
# 4. 创建随机森林模型
rf_clf = RandomForestClassifier(
n_estimators=100, # 决策树的数量(默认100)
max_depth=None, # 树的最大深度(None表示不限制)
random_state=42 # 固定随机种子,保证结果可重复
)
# 5. 训练模型
rf_clf.fit(X_train, y_train)
# 6. 预测
y_pred = rf_clf.predict(X_test)
# 7. 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率:{accuracy:.2f}") # 通常能达到95%以上
# 查看特征重要性(随机森林的优势之一)
print("特征重要性:", rf_clf.feature_importances_)
四、回归问题:用随机森林做回归
如果要预测连续值(如房价、温度),可以使用RandomForestRegressor。
完整代码示例
# 1. 导入需要的库
from sklearn.ensemble import RandomForestRegressor # 随机森林回归器
from sklearn.datasets import load_boston # 波士顿房价数据集(经典回归数据集)
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error # 均方误差(回归问题常用指标)
# 2. 准备数据(注意:波士顿房价数据集在新版本中被移除,这里用替代方案)
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
X = housing.data # 特征(如平均收入、房龄等)
y = housing.target # 标签(房价中位数)
# 3. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
# 4. 创建随机森林回归模型
rf_reg = RandomForestRegressor(
n_estimators=100, # 100棵树
max_depth=10, # 限制树深度,防止过拟合
random_state=42
)
# 5. 训练模型
rf_reg.fit(X_train, y_train)
# 6. 预测
y_pred = rf_reg.predict(X_test)
# 7. 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差:{mse:.2f}") # 数值越小越好
# 查看特征重要性
print("特征重要性:", rf_reg.feature_importances_)
五、关键参数解释
随机森林的性能很大程度上取决于参数设置,常用重要参数:
-
n_estimators:决策树的数量(默认 100)
- 数量越多,模型通常越准确,但计算速度越慢
- 建议从 100 开始,根据效果和性能调整
-
max_depth:树的最大深度
- 过深容易过拟合(记住训练数据细节,泛化能力差)
- 可以设置为整数(如 5、10),或 None(不限制)
-
min_samples_split:分裂节点所需的最小样本数(默认 2)
- 数值越大,树越简单,防止过拟合
-
max_features:每个节点分裂时考虑的最大特征数
- 分类问题默认是 "sqrt"(特征数的平方根)
- 回归问题默认是 "auto"(等于特征数)
-
random_state:随机种子
- 设置一个固定值(如 42),可以让结果可重复
六、随机森林的优势
- 不需要特征归一化:与 SVM、神经网络不同,决策树不关心特征的尺度
- 能处理非线性关系:比线性模型更灵活
- 提供特征重要性:告诉我们哪些特征对预测最关键
- 抗过拟合能力强:多棵树的集成结果比单棵决策树更稳健
七、注意事项
- 随机森林虽然强大,但在高维稀疏数据(如文本)上可能不如线性模型
- 训练大型数据集时,可通过
n_jobs=-1参数利用多核 CPU 加速 - 实际应用中,建议用交叉验证(
cross_val_score)来选择最佳参数
通过 Scikit-learn,我们可以用几行代码就实现一个高性能的随机森林模型,非常适合快速开发和部署。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)