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_)

五、关键参数解释

随机森林的性能很大程度上取决于参数设置,常用重要参数:

  1. n_estimators:决策树的数量(默认 100)

    • 数量越多,模型通常越准确,但计算速度越慢
    • 建议从 100 开始,根据效果和性能调整
  2. max_depth:树的最大深度

    • 过深容易过拟合(记住训练数据细节,泛化能力差)
    • 可以设置为整数(如 5、10),或 None(不限制)
  3. min_samples_split:分裂节点所需的最小样本数(默认 2)

    • 数值越大,树越简单,防止过拟合
  4. max_features:每个节点分裂时考虑的最大特征数

    • 分类问题默认是 "sqrt"(特征数的平方根)
    • 回归问题默认是 "auto"(等于特征数)
  5. random_state:随机种子

    • 设置一个固定值(如 42),可以让结果可重复

六、随机森林的优势

  1. 不需要特征归一化:与 SVM、神经网络不同,决策树不关心特征的尺度
  2. 能处理非线性关系:比线性模型更灵活
  3. 提供特征重要性:告诉我们哪些特征对预测最关键
  4. 抗过拟合能力强:多棵树的集成结果比单棵决策树更稳健

七、注意事项

  1. 随机森林虽然强大,但在高维稀疏数据(如文本)上可能不如线性模型
  2. 训练大型数据集时,可通过n_jobs=-1参数利用多核 CPU 加速
  3. 实际应用中,建议用交叉验证(cross_val_score)来选择最佳参数

通过 Scikit-learn,我们可以用几行代码就实现一个高性能的随机森林模型,非常适合快速开发和部署。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐