![](/img/trans.png)
[英]Scikit-learn MemoryError with RandomForestClassifier
[英]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.