我有一個大的DataFrame
,從csv文件(約300MB)加載。Pandas&Scikit:切片時的內存使用情況DataFrame
從此,我提取幾十功能於一身RandomForestClassifier
使用方法:一些功能被簡單地列在數據導出,例如:
feature1 = data["SomeColumn"].apply(len)
feature2 = data["AnotherColumn"]
而另外一些是作爲新創建從numpy的陣列DataFrame
S,使用在原始數據幀的索引:然後
feature3 = pandas.DataFrame(count_array, index=data.index)
所有這些功能結合成一個DataFrame
:
features = feature1.join(feature2) # etc...
我培養了隨機森林分類:
classifier = RandomForestClassifier(
n_estimators=100,
max_features=None,
verbose=2,
compute_importances=True,
n_jobs=n_jobs,
random_state=0,
)
classifier.fit(features, data["TargetColumn"])
的RandomForestClassifier
工作正常使用這些功能,構建樹需要O(數百兆的內存)。 然而:如果加載我的數據後,我把它的小集:
data_slice = data[data['somecolumn'] > value]
然後建立一個樹我隨機森林突然發生許多GB的內存 - 即使的大小功能DataFrame
現在是O(10%)的原始。
我可以相信這可能是因爲對數據的切片視圖不允許進一步的切片有效地完成(雖然我不明白我如何能夠傳播到特徵數組),所以我已經嘗試:
data = pandas.DataFrame(data_slice, copy=True)
但這沒有幫助。
- 爲什麼會取數據的子集大量增加內存使用?
- 是否有其他方式來壓縮/重新排列
DataFrame
,這可能會使事情再次變得更有效率?
這個問題看起來像是爲kaggle比賽(預測stackoverflow封閉的問題)? – ronalchn
@ronalrect correct;) – James