尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

随机森林算法详解——基于垃圾邮件分类案例

随机森林算法详解——基于垃圾邮件分类案例 一、从决策树到随机森林在前面的决策树学习中我们了解到决策树是一种比较直观的分类算法。它通过不断寻找合适的特征对数据进行划分最终得到分类结果。例如垃圾邮件识别问题一封邮件可能包含单词出现次数特殊字符比例大写字母数量链接数量决策树会根据这些特征建立判断规则。但是在实际使用过程中单棵决策树也存在一些问题。例如如果树的深度过大模型可能会把训练数据中的一些特殊情况也学习进去。训练集效果很好准确率98%但是换一批新数据准确率75%这种情况就是过拟合。为了提高模型稳定性机器学习中提出了一种思想不使用一棵树进行判断而是训练多棵树让它们共同决定结果。这就是随机森林。二、随机森林基本思想随机森林Random Forest是一种集成学习方法。简单来说它由很多棵决策树组成。每棵树都会独立进行训练最后通过投票方式确定分类结果。例如预测一封邮件是否为垃圾邮件决策树预测结果树1垃圾邮件树2垃圾邮件树3正常邮件树4垃圾邮件树5正常邮件其中3棵树认为是垃圾邮件。最终结果垃圾邮件相比单棵树多个模型共同判断可以减少偶然因素带来的影响。三、随机森林为什么叫“随机”随机森林中的随机主要体现在两个方面1. 数据随机训练每棵树时并不是直接使用全部数据。而是通过Bootstrap方法随机抽取数据。例如原始数据4600封邮件生成数据集1 → 训练树1 数据集2 → 训练树2 数据集3 → 训练树3由于每棵树看到的数据不同所以最终形成的树结构也不同。2. 特征随机除了数据不同之外每棵树使用的特征也不是完全一样。例如邮件数据共有100个特征。训练第一棵树随机选择50个特征。训练第二棵树重新选择另外50个特征。这样可以避免所有树都关注相同特征提高模型差异性。四、随机森林训练过程随机森林训练主要分为以下几个步骤。第一步随机抽取训练数据通过Bootstrap采样生成多个训练集。例如原始数据 | 数据集A 数据集B 数据集C第二步训练决策树每个数据集训练一棵决策树。例如数据集A → 决策树1 数据集B → 决策树2 数据集C → 决策树3第三步随机选择特征每棵树训练过程中只使用部分特征。这样可以增加不同树之间的差异。第四步综合预测结果分类任务采用多数投票。回归任务采用平均值。五、垃圾邮件分类案例介绍本实验使用spambase.csv数据集完成垃圾邮件分类。目标根据邮件特征判断0正常邮件 1垃圾邮件邮件特征包括单词出现频率字符出现频率大写字母长度特殊符号比例例如垃圾邮件通常包含大量促销词大量链接特殊字符这些特征可以帮助模型进行判断。六、数据读取与划分读取数据df pd.read_csv(spambase.csv)划分特征x df.iloc[:, :-1] y df.iloc[:, -1]其中x表示邮件特征。例如单词频率 字符比例 数字数量y表示类别标签是否垃圾邮件划分训练集和测试集x_train, x_test, y_train, y_test train_test_split( x, y, test_size0.2, random_state100 )数据比例训练集80% 测试集20%训练集用于学习规律。测试集用于验证模型效果。七、随机森林模型建立代码from sklearn.ensemble import RandomForestClassifier rf RandomForestClassifier( n_estimators150, max_features0.5, random_state0 )创建随机森林分类模型。八、随机森林参数分析1.n_estimators表示森林中决策树数量。代码n_estimators150表示建立150棵决策树。树数量增加优点模型更加稳定预测结果波动降低缺点训练时间增加内存占用提高实际应用中需要根据数据规模调整。2.max_features表示每棵树随机选择的特征比例。代码max_features0.5表示每棵树使用50%的特征。例如100个特征每棵树随机选择50个。这样可以提高树之间的差异。3.max_depth控制树的最大深度。如果不限制树可能不断分裂。导致模型复杂度过高容易过拟合。因此需要合理设置深度。九、交叉验证评价模型单次训练测试可能存在偶然性。例如一次划分准确率90%换一次划分准确率85%因此采用交叉验证提高评价可靠性。代码StratifiedKFold( n_splits5 )五折交叉验证过程第一次 第1份测试其余训练 第二次 第2份测试其余训练 ... 第五次 第5份测试其余训练最后计算平均准确率。十、随机森林参数优化随机森林默认参数通常效果不错但是不同数据集适合的参数不同。因此使用GridSearchCV()自动搜索最佳参数。搜索参数n_estimators max_features max_depth例如尝试50棵树 100棵树 150棵树 200棵树然后比较模型效果。最终选择表现最好的组合。十一、模型评价训练完成后使用classification_report()评价模型。主要指标Accuracy表示整体预测正确比例。Precision表示预测为垃圾邮件的邮件中真正垃圾邮件的比例。Recall表示所有垃圾邮件中模型成功检测出来的比例。F1-score综合考虑Precision和Recall。十二、混淆矩阵分析代码cm_plot()混淆矩阵预测正常预测垃圾真实正常TNFP真实垃圾FNTP其中TP正确识别垃圾邮件。TN正确识别正常邮件。FP正常邮件被误判为垃圾邮件。FN垃圾邮件没有检测出来。在垃圾邮件检测中FN通常需要重点关注因为漏掉垃圾邮件会影响用户体验。十三、随机森林特征重要性分析随机森林可以查看不同特征对于预测结果的影响程度。代码rf.feature_importances_例如可能发现特征重要程度关键词频率0.30特殊字符数量0.25链接数量0.18通过特征重要性分析可以了解哪些因素更容易影响邮件分类结果。十四、随机森林优缺点分析优点1.稳定性更高多棵树共同决策可以降低单个模型带来的误差。2.降低过拟合随机数据和随机特征减少模型对训练数据的依赖。3.适合处理大量特征面对高维数据时表现较好。缺点1.解释性较弱单棵决策树可以直接查看规则。但是随机森林包含大量树结构不容易完全解释。2.训练成本较高树数量增加后训练时间和资源消耗都会增加。
返回列表