【机器学习】随机森林

随机森林

文章目录

  • 随机森林
    • 1. 什么是集成学习方法
    • 2. 随机森林
    • 3. 随机森林工作过程
    • 4. API
    • 5. 总结

1. 什么是集成学习方法

集成学习方法通过建立几个模型组合来解决单一预测问题。它的工作原理就是生成多个分类器/模型,各自独立地学习和做出预测。这些预测最后结合成组合预测,因此优于任何一个单分类做出的预测。

2. 随机森林

在机器学习中,随机森林是一个包含多个决策树的分类器。并且其输出的类别是由个别树输出的类别来确定的。随机森林是一种监督式学习算法,适用于分类和回归问题,随机森林是在决策树的基础上建立的,它可以减少决策树由于过度拟合数据而导致的过拟合。

  • 先来看看什么是过拟合吧,下面是一个通俗的解释:

当我们使用决策树来构建一个模型时,它会尝试根据我们提供的训练数据来做出决策。但有时候,决策树可能会变得太聪明,以至于在训练数据上表现得非常好,就像一个记住了所有问题答案的学生。这听起来很棒?但问题是,当这个决策树遇到新的问题或数据时,它可能会因为过于"死记硬背"而无法正确回答问题。这位学生就像一个过拟合的决策树模型。他在训练数据(问题)上表现得很好,但在新的数据(不同的问题)上却无法正确回答。这是因为他没有理解问题背后的数学原理,而只是记住了特定问题的答案。所以,为了避免过拟合,我们需要确保我们的决策树模型不仅仅记住了训练数据,还真正理解了数据背后的模式和规律,以便在新数据上表现良好。

  • 随机森林核心:

当训练数据被输入模型时,随机森林,并不是用整个训练数据集建立一个大的决策树,而是采用不同的子集和特征属性,建立多个小的决策树,然后将他们合并成一个更大的模型。并且,每一个子集都是通过随机选择的样本和随随机选择的特征属性来建立的,这种随机化可以减少决策树对于训练数据的敏感性,从而防止过拟合。

3. 随机森林工作过程

  1. 从训练集中随机选择一个子集,同时随机选择其中的某一些特征属性。
  2. 建立一个决策树模型,将该子集和特征属性用于训练模型,
  3. 重复以上步骤,直到建立了一定数量的决策树。
  4. 当输入未知数据时,对于每一个决策树进行预测,采用投票或者平均的方式来得到最终预测结果。

4. API

class sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)

  • 随机森林分类器
  • n_estimators:integer,optional(default=10)森林里的树木数量,120,200,300,500,800,1200
  • criteria:string,可选(default=“gini”)分割特征的测量方法
  • max_depth:integer或None,可选(默认=无)树的最大深度为5,8,15,25,30
  • max_features=“auto”,每个决策树的最大特征数量
    • auto:max_features=sqrt(n_features)
    • sqrt:max_features=sqrt(n_features)
    • log2:max_feature=log2(n_features)
    • None:max_features=n_features
  • bootstrap:boolean,optional(default=True)是否在构建树的时候使用放回抽样
  • min_samples_split:结点划分最少样本数
  • min_samples_leaf:叶子节点的最小样本数
  • 超参数:n_estimator,max_depth,min_samples_split,min_samples_leaf
estimator = RandomForestClassifier()
# 加入网格搜索和交叉认证
# 参数准备
param_dict = {"n_estimators": [120,200,300,500,800,1200], "max_depth": [5,8,15,25,30]}
estimator = GridSearch(estimator, param_grid= param_dict, cv= 3)
estimator.fit(x_train, y_train)
...

模板代码:

# 导入必要的库
from sklearn.ensemble import RandomForestClassifier  # 随机森林分类器
from sklearn.model_selection import train_test_split  # 数据集划分
from sklearn.metrics import accuracy_score, classification_report  # 模型评估指标

# 准备数据
# 请将X和y替换为你的特征矩阵和目标向量
X, y = your_data, your_target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建随机森林分类器模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
# 可以根据需要设置其他超参数

# 训练模型
rf_model.fit(X_train, y_train)

# 进行预测
y_pred = rf_model.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率:{accuracy:.2f}")

# 打印更详细的性能报告
report = classification_report(y_test, y_pred)
print("分类报告:")
print(report)

5. 总结

  • 具有极好的准确率
  • 能够有效地运行在大数据集上,处理具有高维度特征的输入样本,而且不需要降维
  • 能够评估各个特征在分类问题上的重要性

你可能感兴趣的:(机器学习,机器学习,随机森林,人工智能)