2017-02-01 71 views
1

我有一個數據幀包含13列。其中13列是字符串。一個字符串列是簡單的男性和女性,其餘轉換爲1和0使用如何處理Scikitlearn randomforest分類器中的名稱列。 python 3

pd.get_dummies()

第二柱,使用

from sklearn.feature_extraction.text import CountVectorizer

否問題在所有包含三種不同類型的字符串的話,很容易地轉化成陣列。問題是我的第三和最後一列包含大量的名字。如果我嘗試使用Countvectorizer進行轉換,它會將名稱轉換爲長的不可讀字符串。

df['name']=Countvectorizer.fit_transform(df.name)

如果我試圖回到它轉換成數據幀,如圖其他例子計算器頁面在這種情況下,我得到這個

245376 (0, 14297)\t1\n (1, 5843)\t1\n (1, 13365)... 245377 (0, 14297)\t1\n (1, 5843)\t1\n (1, 13365)...

名稱:supplier_name,D類:對象

這下一個代碼結果內存錯誤

df['name'] =pd.DataFrame(CV.fit_transform(df.name).toarray(),columns=CV.get_feature_names())

我也看過這個問題。 問題:有沒有什麼方法可以最好的使用除了上面提到的數字形式的這個名稱列。或任何其他想法如何改善這一點,使數據完全適合Randomforest分類器。由於Dataframe退出的時間很長,包含123790行。預先感謝您的幫助或建議。

+0

你解決什麼類型的問題(分類,迴歸,..等等)?首先,您應該分析一下,如果您確定要在模型中使用'name'功能。顯示一些樣本以及你想要對他們做什麼。 –

+0

我想用scikitlearn隨機森林創建簡單的預測模型。其實際的分類問題。我有13列最後一列是id。基於12列,我想在訓練模型後預測id。此名稱列根本不爲空。這是最重要的列,我無法刪除它。 –

+0

每行的名稱是否唯一?如果不是,他們來自一個小集,那麼你可以爲他們做一個熱門的編碼。 –

回答

0

將原始文件存儲到單獨的列表中之後,井名稱是一種獨特的東西,並使用了sklearn.preprocessing.LabelEncoder。它會自動將名稱轉換爲序列號。

此外,請注意,如果這是一個獨特的事情,你應該在預測期間刪除名稱。