在实际项目中,你是否被复杂数据搞得头秃?随机森林(Random Forest)作为装袋法(Bagging)的经典实现,能有效降低方差、提升泛化能力。本文将手把手带你吃透原理,并完成数据采集→建模→可视化→调优的全流程实战!
任务类型 | 决策方式 | 代码参数 |
---|---|---|
分类 | 多数表决法 | criterion='gini' |
回归 | 均值法 | criterion='mse' |
# 安装核心库(注意版本兼容性!)
!pip install numpy==1.21.6 pandas==1.3.5 scikit-learn==1.0.2
import pandas as pd
from sklearn.model_selection import train_test_split
# 读取数据(数据集:https://xxx/churn.csv)
data = pd.read_csv('customer_churn.csv')
X = data.drop(['Churn', 'UnnecessaryColumn'], axis=1) # 删除无关列
y = data['Churn'].map({'Yes':1, 'No':0}) # 标签编码
# 划分训练集和测试集(7:3比例)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
import matplotlib.pyplot as plt
# 获取特征重要性
features = X.columns
importances = model.feature_importances_
# 可视化(解决中文乱码问题)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体
plt.figure(figsize=(10,6))
plt.barh(features[np.argsort(importances)[-10:]],
sorted(importances)[-10:],
color='#1f77b4')
plt.title('TOP10 特征重要性分析')
plt.xlabel('Importance Score')
plt.show()
from sklearn.model_selection import GridSearchCV
# 定义参数网格
param_grid = {
'n_estimators': [50, 100, 150],
'max_depth': [5, 10, 15],
'min_samples_split': [2, 5]
}
# 网格搜索(耗时较长,建议先小范围测试)
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)
grid.fit(X_train, y_train)
print("最优参数:", grid.best_params_)
warm_start=True
复用已有模型行业 | 典型应用 | 效果提升案例 |
---|---|---|
金融风控 | 信用评分、欺诈检测 | AUC提升12%↑ |
医疗诊断 | 疾病预测、影像分析 | 准确率提升至93% |
推荐系统 | 用户行为预测 | CTR提升8%↑ |
完整代码+数据集:Github链接https://chat.baidu.com/search?isShowHello=1&extParams=%7B%22enter_type%22%3A%22sidebar_dialog%22%7D#❓ 高频问题:
pd.get_dummies()
或LabelEncoder
编码class_weight='balanced'