完成--随机森林分类示例

This commit is contained in:
haotian 2025-02-05 16:12:07 +08:00
parent 26c0ef9dfa
commit fce830a85a
3 changed files with 77 additions and 1 deletions

View File

@ -198,4 +198,40 @@
容易过拟合:如果不进行剪枝,决策树可能会过度拟合训练数据。
对噪声敏感:小的变化可能导致完全不同的树结构。
处理连续变量效果较差:对于连续变量,决策树的划分可能不够精细。
倾向于偏向于多值特征:信息增益可能会导致决策树偏向具有更多取值的特征。
倾向于偏向于多值特征:信息增益可能会导致决策树偏向具有更多取值的特征。
随机森林:构建多个决策树将其预测结果结合起来,从而提高模型性能
原理:
随机采样:
对于每一棵决策树,随机森林通过对训练数据进行有放回抽样,即每次从训练集中随机选择样本来构建一棵树。这样,在每棵树中,可能会有一些样本没有被选择到(这些样本称为“袋外样本”)。
每棵树都是在一个不同的子集上训练的,因此即使所有的树都是基于决策树模型,最终的森林也是多个“不同”的树.
特征随机性:
在每一棵树的节点划分时,随机森林不是在所有特征上选择最优切分点,而是随机选择一个特征子集来进行分裂。这样可以增加树之间的差异性,减少单棵树的过拟合风险。
例如在某个节点上随机选择k个特征k通常小于总特征数然后在这k个特征中选择最佳切分点。
决策树构建:
在每一棵决策树中,通常不对树的深度进行限制,或者只设置最小样本数和最大深度等限制条件。树的生长较为“自由”,这可以捕捉更多的数据复杂性。集成学习:
随着多棵树的训练完成,每棵树对样本进行独立的预测。在回归任务中,随机森林会对所有树的预测结果取平均值;在分类任务中,随机森林会采用投票机制,选择预测频次最多的类别作为最终结果。
优缺点:
优点:
减少过拟合:通过集成多棵决策树,随机森林通过平均(回归)或投票(分类)来减少单棵树可能发生的过拟合。
提高准确性:集成的多棵树的预测通常比单棵树要更准确,尤其在面对复杂和高维度数据时,随机森林表现得尤为出色。
处理大规模数据:可以处理高维数据,能够通过特征选择和随机性减少维度灾难。
鲁棒性强:即使某些特征或数据不完整,随机森林依然能够保持相对较好的性能。
特征重要性评估:通过分析每个特征在不同树中的表现,随机森林可以给出特征的重要性排序。
缺点:
模型复杂:由于包含多棵树,随机森林模型本身较为复杂,训练和预测时的计算开销较大,尤其是数据集非常庞大的时候。
可解释性差:相比单一的决策树,随机森林作为一个集成模型,其“黑箱”性质较强,难以直接解释其决策过程。
内存消耗大:由于随机森林需要存储多棵树,因此在内存和计算资源上会有较高的要求,尤其是在大数据集上。
适用场景:
高维数据和复杂数据:
随机森林能够自动处理高维数据和复杂的特征间关系,适合特征维度较高或者数据关系非线性的场景。
回归任务和分类任务:
随机森林既可以用于回归任务(例如预测房价、股市预测等),也可以用于分类任务(例如图像分类、文本分类等)。
数据噪声较多的场景:
随机森林通过集成多棵树来减轻单棵树可能发生的过拟合问题,因此特别适合处理带有噪声和缺失数据的任务。
特征选择:
在特征数量非常庞大的情况下,随机森林能够通过其特征重要性评估功能,自动筛选出对预测有重要贡献的特征。
非线性关系:
当数据中的特征和目标变量之间存在复杂的非线性关系时,单棵线性模型(如线性回归)可能表现不佳,但随机森林可以通过多棵树的集成来捕捉这些复杂的非线性关系。

BIN
output/random_forest_c.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,40 @@
# 导入所需库
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, classification_report
import matplotlib.pyplot as plt
# 1. 加载数据集(这里使用鸢尾花数据集)
iris = load_iris()
X = iris.data
y = iris.target
# 2. 划分训练集和测试集80%训练20%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. 创建随机森林分类器
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
# 4. 训练模型
rf_classifier.fit(X_train, y_train)
# 5. 在测试集上进行预测
y_pred = rf_classifier.predict(X_test)
# 6. 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率:{accuracy:.4f}")
# 输出详细的分类报告精确率、召回率、F1分数等
print("分类报告:")
print(classification_report(y_test, y_pred))
# 7. 可视化特征重要性(可选)
feature_importances = rf_classifier.feature_importances_
plt.figure(figsize=(10, 6))
plt.barh(iris.feature_names, feature_importances)
plt.xlabel("feature importance")
plt.title("random forest model feature importance")
plt.savefig('./output/random_forest_c.png')