零基础入门机器学习 -- 第五章决策树与随机森林
目标:通过故事 + 直观案例 + 图示,让你完全理解决策树和随机森林,适合零基础学习者!
故事的开始:贷款审批的挑战
小王是一家银行的贷款审批经理,每天他的工作就是审核贷款申请。他的任务是判断:
- 哪些人值得批准?
- 哪些人风险较高,需要拒绝?
以前,他用自己的经验来做决定:
- 收入高的通常可以批准 ✅
- 信用评分低的人通常风险大 ❌
- 但有些特殊情况,比如年轻人没有信用记录,应该怎么判断呢?🤔
这时候,他听说了机器学习,一种可以让计算机自动做决策的技术。于是,他决定学习 决策树 和 随机森林 来帮忙!🚀
第一步:什么是决策树?
直观理解:如果……那么……
决策树(Decision Tree)是一种基于规则的学习方法,它就像一个决策流程图,每个条件都会分支,最终给出答案。
我们来看看小王以前的人工决策方法:
- 如果 收入 > 50000,那么 借款人通常能还钱,批准贷款。
- 否则,如果 信用评分 > 650,那么 也可以批准贷款。
- 否则,拒绝贷款。
这实际上就是一棵决策树:
收入 > 50000?
/ \
是 否
/ \
批准贷款 信用评分 > 650?
/ \
是 否
/ \
批准贷款 拒绝贷款
🔵 这样,小王的“经验”被清晰地整理成了规则!
第二步:机器如何创建决策树?
小王决定让机器自动学习这个“决策流程”。他收集了一些历史数据,包括:
- 年龄(Age)
- 收入(Income)
- 信用评分(Credit Score)
- 是否有不良信用记录(Bad Credit History)
- 最终贷款是否批准(Loan Approved)
🚀 机器学习模型的目标:
让计算机从数据中学习规则,而不是手动编写!
图示:决策树的构建过程
机器通过计算,自动找到最好的分裂点:
- 从哪个特征开始分裂?(如“收入”)
- 选择最佳的拆分条件(如“收入 > 50000”)
- 继续细分,直到决策完成!
示例:
收入 > 50000?
/ \
是 否
/ \
批准贷款 信用评分 > 650?
/ \
是 否
/ \
批准贷款 不良信用记录?
/ \
是 否
/ \
拒绝贷款 批准贷款
🔵 计算机自动找到最好的决策路径,比人工更可靠!
第三步:为什么单棵决策树可能不够好?
小王发现单棵决策树虽然直观,但可能有以下问题:
- 容易过拟合(Overfitting):
- 过于依赖历史数据,在新数据上表现不好。
- 对数据敏感:
- 如果某个特征的值稍微变化,整棵树的决策路径可能改变。
🌳 于是,小王找到了更强大的方法——随机森林!
第四步:什么是随机森林?
想象一个法官陪审团
小王不想依赖一棵决策树,而是找很多棵树一起投票!这就是随机森林(Random Forest) 的思想。
🌲 随机森林的工作方式
- 生成多棵决策树(每棵树用不同的数据子集训练)。
- 每棵树独立做决策(例如“批准”或“拒绝”)。
- 最后投票决定最终结果!
🚀 图示:
🌲 决策树 1 → 批准
客户申请 → 🌲 决策树 2 → 拒绝
🌲 决策树 3 → 批准
...
最终投票结果:✔️ 批准
随机森林的优势:
✅ 更稳定:即使某棵树预测错误,其他树能纠正它。
✅ 更准确:比单棵树表现更好,不容易过拟合。
🔵 像一个团队讨论,而不是只听一个人的意见!
第五步:如何训练决策树模型?
🚀 现在,小王准备让计算机来训练一个真正的贷款审批预测模型。
1️⃣ 加载数据
import pandas as pd
# 创建贷款数据
data = {
'Age': [25, 45, 35, 50, 23, 40, 60, 30, 27, 48],
'Income': [50000, 80000, 60000, 120000, 30000, 70000, 150000, 50000, 40000, 90000],
'Credit Score': [650, 700, 720, 680, 580, 710, 750, 640, 600, 730],
'Bad Credit History': ['No', 'No', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'No', 'No'],
'Loan Approved': ['Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No', 'Yes', 'Yes']
}
df = pd.DataFrame(data)
示例输出:
Age Income Credit Score Bad Credit History Loan Approved
0 25 50000 650 No Yes
1 45 80000 700 No Yes
2 35 60000 720 Yes No
3 50 120000 680 No Yes
4 23 30000 580 Yes No
5 40 70000 710 No Yes
6 60 150000 750 No Yes
7 30 50000 640 Yes No
8 27 40000 600 No Yes
9 48 90000 730 No Yes
2️⃣ 预处理数据
from sklearn.preprocessing import LabelEncoder
# 将"Yes/No"转换为 1/0
label_encoder = LabelEncoder()
df['Bad Credit History'] = label_encoder.fit_transform(df['Bad Credit History'])
df['Loan Approved'] = label_encoder.fit_transform(df['Loan Approved'])
print(df)
示例输出:
Age Income Credit Score Bad Credit History Loan Approved
0 25 50000 650 0 1
1 45 80000 700 0 1
2 35 60000 720 1 0
3 50 120000 680 0 1
4 23 30000 580 1 0
5 40 70000 710 0 1
6 60 150000 750 0 1
7 30 50000 640 1 0
8 27 40000 600 0 1
9 48 90000 730 0 1
3️⃣ 训练决策树
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
X = df[['Age', 'Income', 'Credit Score', 'Bad Credit History']]
y = df['Loan Approved']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练决策树
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
第六步:如何验证模型准确性?
🔍 1️⃣ 计算准确率
from sklearn.metrics import accuracy_score
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'模型准确率: {accuracy:.2f}')
示例输出:
模型准确率: 1.00
总结
🎯 决策树 是一种基于“如果…那么…”的分类方法。
🎯 随机森林 是多棵决策树一起投票,提高准确性和稳定性。
🎯 训练模型 需要数据预处理、训练、测试和评估。
💡 **你学会了吗?如果还有疑问,可以试着用你的生活案例来画一棵决策树!**😃