第 11 周的学习计划太棒了!如果说线性回归和逻辑回归是 AI 界的“开山斧”,那么树模型绝对是表格类数据(Tabular Data)打比赛的“大杀器”。
针对你本周的核心目标,我为你梳理了决策树与随机森林的底层逻辑、实战代码以及最关键的调参思路:
🌳 核心原理速览
- 决策树 (Decision Tree):它的本质是一系列“如果...就...”的逻辑判断。通过寻找最优特征进行节点分裂,使得子集的数据尽可能纯净。它最大的优势是直观、可解释性强,但缺点是容易对训练集中的噪声“死记硬背”,导致过拟合。
- 随机森林 (Random Forest):为了克服单棵树的局限,随机森林采用了“集体智慧”(集成学习)。它通过有放回的抽样(Bootstrap)和随机选择部分特征,构建出成百上千棵各不相同的决策树。最终结果由所有树投票或取平均得出,这极大地提升了模型的稳定性和抗过拟合能力。
🚢 实操一:泰坦尼克号生存预测(二分类任务)
在这个经典的分类场景中,我们将根据乘客的年龄、舱位、性别等特征,预测其是否存活(0或1)。
python
1from sklearn.model_selection import train_test_split 2from sklearn.tree import DecisionTreeClassifier 3from sklearn.ensemble import RandomForestClassifier 4from sklearn.metrics import accuracy_score 5 6# X: 乘客特征(如Pclass, Sex, Age等), y: 是否存活(0或1) 7X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 8 9# --- 1. 单棵决策树 --- 10dtree = DecisionTreeClassifier(random_state=42) 11dtree.fit(X_train, y_train) 12dt_pred = dtree.predict(X_test) 13print(f"决策树准确率: {accuracy_score(y_test, dt_pred):.2%}") 14 15# --- 2. 随机森林 --- 16rf = RandomForestClassifier(n_estimators=100, random_state=42) 17rf.fit(X_train, y_train) 18rf_pred = rf.predict(X_test) 19print(f"随机森林准确率: {accuracy_score(y_test, rf_pred):.2%}")💳 实操二:信用卡欺诈检测(不平衡分类任务)
在欺诈检测中,正常交易占绝大多数,欺诈交易极少。随机森林在处理这种高维和不平衡数据时表现尤为出色,且能自动评估哪些特征(如交易金额、异地刷卡等)最重要。你可以直接复用上面的RandomForestClassifier代码替换数据集即可。
🎯 进阶挑战:如何亲自体会“调参”?
调参是机器学习工程师的核心基本功。在你的实操中,建议重点观察以下参数对训练集分数和测试集分数的影响:
- 控制树的复杂度(防过拟合):
max_depth(最大深度):尝试将深度设为 3、5、10 和不限制。你会发现不限制深度时,训练集分数可能高达 99%,但测试集分数却很低(典型的过拟合);适当限制深度后,测试集分数反而会上升。min_samples_leaf(叶节点最小样本数):增加这个值可以防止树去迎合极个别的异常数据点。
- 控制森林的规模(提稳定性):
n_estimators(树的数量):通常数量越多模型越稳定,但训练时间也会变长。你可以尝试设置为 10、100、500,观察测试集分数的收敛情况。
- 控制特征的随机性:
max_features:决定每次分裂时最多考虑多少个特征。降低这个值可以增加每棵树之间的多样性,进一步降低方差。
💡 学习小贴士:在调参过程中,不要只盯着测试集的绝对分数看。一定要对比训练集与测试集分数的差距。当两者都很高且差距很小时,恭喜你,找到了一个泛化能力极强的模型!祝你本周“砍树”顺利,享受调参带来的顿悟时刻!