偏移随机森林分类器 scikit 学习
Posted
技术标签:
【中文标题】偏移随机森林分类器 scikit 学习【英文标题】:offset randomforestclassifier scikit learn 【发布时间】:2016-12-24 17:54:36 【问题描述】:我用 python 编写了一个程序,使用机器学习算法对数据进行预测。我使用 Scikit Learn 中的 RandomForestClassifier 函数来创建一个随机森林来进行预测。
该程序的目的是预测未知的天体物理源是脉冲星还是 agn;所以它在已知数据上训练森林,它知道源是脉冲星还是 agn,然后它对未知数据进行预测,但它不起作用。该程序预测未知数据都是脉冲星或所有 agn,它很少预测不同的结果,但不正确。
下面我描述我的程序的段落。
它创建一个包含所有源数据的数据框:all_df 它由十列组成,九列用作预测器,一列用作目标:
predictors=all_df[['spec_index','variab_index','flux_density','unc_ene_flux100','sign_curve','h_ratio_12','h_ratio_23','h_ratio_34','h_ratio_45']]
targets=all_df['type']
type 列包含每个来源的标签“pulsar”或“agn”。
程序中依次使用预测变量和目标的值来训练森林。
程序使用 Scikit Learn 中的 train_test_split 函数将预测变量和目标分为两组,train 占总数的 70%,test 占 all_df 总数的 30%:
pred_train, pred_test, tar_train, tar_test=train_test_split(predictors, targets, test_size=0.3)
这些集合中的数据是混合的,所以程序对这些集合的索引进行排序,而不改变数据位置:
pred_train=pred_train.reset_index(drop=True)
pred_test=pred_test.reset_index(drop=True)
tar_train=tar_train.reset_index(drop=True)
tar_test=tar_test.reset_index(drop=True)
之后,程序创建并训练随机森林:
clf=RandomForestClassifier(n_estimators=1000,oob_score=True,max_features=None,max_depth=None,criterion='gini')#,random_state=1)
clf=clf.fit(pred_train,tar_train)
现在程序对测试集进行预测:
predictions=clf.predict(pred_test)
此时,程序似乎可以运行了。
现在它将另一个带有未知数据的数据框传递给上面创建的森林,我得到了之前描述的错误结果。 你能帮助我吗? 问题可能是随机森林分类器中的偏移量,但我在修改随机森林分类器选项时没有显着的结果。 如果你需要,我可以给出进一步的解释。 提前致谢。
再见, 法比奥
PS:我也尝试了交叉验证:我将训练集分为训练集和测试集,以相同的比例(0.7 和 0.3)再次创建、训练和测试森林,然后在初始测试集上进行测试,修改随机森林分类器选项以获得更好的结果,但我没有任何改进。
【问题讨论】:
可能是您的“测试”数据集中的预测变量分布与您的“未知”数据集中的分布不同。我建议在尝试修复您的预测模型之前对这些分布进行一些探索性分析(这可能不是这里的罪魁祸首)。 只做一些像pred_test['flux_density'].plot()
这样的情节。
正如@kris 建议的那样对响应分布进行分析,如果它不正确(训练中的分布与测试不同),那么您可以进行一些分层抽样。
将 max_depth 和 max_features 都设置为 None 会导致模型严重过度拟合。为什么要设置这些特定值?即使是默认的也应该比这更好。
【参考方案1】:
谢谢大家的回答。
按照建议,我在“测试”数据和“未知”数据中绘制了预测变量图;分布通常相似,但我更喜欢制作直方图来表示。所以我尝试做直方图,但我不能同时用于测试和未知数据,使用:
pylab.hist(unid_df.spec_index,bins=30)
我得到: TypeError: len() of unsized object
我还没有找到解决方案,我不知道这个错误是否会对预测产生负面影响。
附加信息:各种预测变量的范围具有不同的数量级。 测试和未知数据的相应预测变量的范围相同,但在少数情况下,测试数据范围与未知数据的相应预测变量相比具有更大的数量级。这是由于某些点的值远大于集合中的大多数其他点。
再次感谢。 再见, 法比奥
【讨论】:
以上是关于偏移随机森林分类器 scikit 学习的主要内容,如果未能解决你的问题,请参考以下文章
随机森林分类 - SciKit 与 Weka 的 100 个特征预测
火炉炼AI机器学习051-视觉词袋模型+极端随机森林建立图像分类器