簡體   English   中英

抵消randomforestclassifier scikit學習

[英]offset randomforestclassifier scikit learn

我用python編寫了一個程序,使用機器學習算法對數據進行預測。 我使用Scikit Learn中的函數RandomForestClassifier創建一個隨機森林進行預測。

該程序的目的是預測未知的天體物理來源是脈沖星還是脈沖星。 因此,它使用已知數據對森林進行訓練,而已知數據卻是來源是脈沖星還是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']

類型列包含每個來源的標簽“ 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)    

在這一點上,該程序似乎可以正常工作。

現在,它將帶有未知數據的另一個數據幀傳遞到上面創建的林中,我得到了前面描述的不好的結果。 你能幫助我嗎? 這個問題可能是randomforestclassifier中的一個偏移量,但是修改randomforestclassifier選項沒有有意義的結果。 如果需要,我可以進一步說明。 提前致謝。

再見,法比奧

PS:我也嘗試了交叉驗證:我將訓練集按相同的比例(0.7和0.3)再次分為訓練和測試,以創建,訓練和測試森林,然后在初始測試集上對其進行測試,並修改randomforestclassifier選項以獲得更好的結果,但是我沒有任何改善。

謝謝大家的回答。

如建議的那樣,我在“測試”數據和“未知”數據中繪制了預測變量的圖。 分布通常相似,但我更喜歡用直方圖來表示。 所以我嘗試做直方圖,但是我不能同時使用以下方法進行測試和未知數據:

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

我獲得了:TypeError:未縮放對象的len()

我還沒有找到解決方案,也不知道這個錯誤是否會對預測產生負面影響。

附加信息:各種預測變量的范圍大小不同。 對於測試和未知數據的相應預測變量,范圍是相同的,但是在少數情況下,測試數據范圍相對於未知數據的相應預測變量具有較大的數量級。 這是由於某些點的值比集合中其他大多數點的值大得多。

再次感謝。 再見,法比奧

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM