基于KMeans聚类分组构建随机森林模型的方法及目标变量疑问
实现方法与问题确认
关于目标变量CprTarget的确认
必须将原数据中的CprTarget加入训练集和测试集。因为随机森林是监督学习算法,训练过程需要输入特征(比如PC1、PC2、聚类标签)和对应的目标标签(CprTarget)来学习两者的映射关系,没有目标变量的话无法完成监督式模型训练。
基于KMeans聚类结果的随机森林实现方案
这里提供两种常用的实现思路,根据你的业务场景选择:
思路一:按聚类簇分别训练独立的随机森林模型
适合不同聚类簇的特征与目标变量之间的逻辑差异较大的场景,每个簇单独建模更精准。
步骤如下:
- 把KMeans得到的聚类标签(命名为
cluster_label)合并到包含PC1、PC2、SRCDate、CprTarget的DataFrame中; - 基于已拆分好的训练集(
train_set)和测试集(test_set),对每个聚类簇循环训练模型:
from sklearn.ensemble import RandomForestClassifier # 分类任务用这个,回归任务换RandomForestRegressor import pandas as pd # 假设train_set和test_set已包含PC1、PC2、CprTarget、cluster_label字段 cluster_models = {} # 获取所有聚类ID cluster_ids = train_set['cluster_label'].unique() for cluster_id in cluster_ids: # 筛选当前簇的训练数据 train_cluster = train_set[train_set['cluster_label'] == cluster_id] # 分离特征和目标变量 X_train = train_cluster[['PC1', 'PC2']] y_train = train_cluster['CprTarget'] # 初始化并训练随机森林 rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train) # 保存对应簇的模型 cluster_models[cluster_id] = rf_model # 测试阶段:根据每条数据的聚类标签调用对应模型预测 test_set['prediction'] = test_set.apply( lambda row: cluster_models[row['cluster_label']].predict([[row['PC1'], row['PC2']]])[0], axis=1 )
思路二:将聚类标签作为额外特征,训练全局随机森林模型
适合簇间差异可以通过模型自动捕捉的场景,只需维护一个模型,实现更简单。
步骤如下:
- 同样将
cluster_label合并到特征DataFrame中; - 把
cluster_label和PC1、PC2一起作为输入特征,训练统一的随机森林:
from sklearn.ensemble import RandomForestClassifier # 分离训练集的特征与目标 X_train = train_set[['PC1', 'PC2', 'cluster_label']] y_train = train_set['CprTarget'] # 分离测试集的特征与目标 X_test = test_set[['PC1', 'PC2', 'cluster_label']] y_test = test_set['CprTarget'] # 训练模型(随机森林可直接处理类别型特征cluster_label,无需额外编码) rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train) # 生成预测结果 y_pred = rf_model.predict(X_test)
额外注意事项
- 如果CprTarget是连续数值(回归任务),请使用
RandomForestRegressor替代RandomForestClassifier; - 训练前检查并处理数据中的缺失值,避免影响模型训练;
- 可以通过网格搜索(GridSearchCV)或随机搜索(RandomizedSearchCV)对随机森林的超参数(如n_estimators、max_depth等)进行调优,提升模型性能;
- 确保按日期拆分训练/测试集时,训练集的日期全部早于测试集,避免数据泄露问题。
内容的提问来源于stack exchange,提问作者Hefe
相关产品推荐
相关产品推荐

