首页 文章

offset randomforestclassifier scikit learn

提问于
浏览
0

我在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将预测变量和目标分为两组:火车,即总数的70%,以及测试,即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)

此时,程序似乎有效 .

现在它将带有未知数据的另一个数据帧传递给上面创建的林,我得到了之前描述的错误结果 . 你能帮助我吗?问题可能是randomforestclassifier中的偏移,但我没有修改randomforestclassifier选项的有意义的结果 . 如果您需要,我可以给出进一步的解释 . 提前致谢 .

再见,法比奥

PS:我也尝试了交叉验证:我将火车组分成火车并再次进行测试,比例相同(0.7和0.3),在初始测试集上测试之前创建,训练和测试森林,修改randomforestclassifier选项为了获得更好的结果,但我没有任何改进 .

1 回答

  • 0

    谢谢你回答,伙计们 .

    正如所建议的那样,我在“测试”数据和“未知”数据中绘制了预测变量图;分布通常是相似的,但我更喜欢用直方图来表达它 . 所以我尝试做直方图,但我不能同时测试和未知数据,使用:

    pylab.hist(unid_df.spec_index,bins=30)
    

    我获得了:TypeError:未确定对象的len()

    我还没有找到解决方案,我不知道这个错误是否会对预测产生负面影响 .

    附加信息:各种预测变量的范围具有不同的数量级 . 对于测试和未知数据的相应预测器,范围是相同的,但是在少数情况下,测试数据范围与未知数据的相应预测器具有更大的数量级 . 这是因为某些点的值比集合中的大多数其他点大得多 .

    再次感谢 . 再见,法比奥

相关问题