我有一個包含41個特徵[0到40列]的數據集,其中7個是分類的。如何在sklearn中編碼分類特徵?
- 字符串類型的一個子集(列特徵1,2,3)
- 整型的一個子集,以二進制形式0或1(列 - :該分類組是在兩個子集劃分功能6,11,20,21)
此外,(字符串類型)的列特徵1,2和3分別具有基數3,66和11。 在這種情況下,我必須對它們進行編碼以使用支持向量機算法。 這是我的代碼:
import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn import feature_extraction
df = pd.read_csv("train.csv")
datanumpy = df.as_matrix()
X = datanumpy[:, 0:40] # select columns 1 through 41 (the features)
y = datanumpy[:, 41] # select column 42 (the labels)
我不知道,如果是更好地使用DictVectorizer()
或OneHotEncoder()
[對於我上面露出的理由],而且大多以何種方式使用它們[在長期代碼]與我有的X
矩陣。 或者我應該簡單地爲字符串類型的子集中的每個基數分配一個數字(因爲它們具有較高的基數,因此我的特徵空間將以指數形式增加)?
編輯 對於子集的int類型的我想這是最好的選擇是保持柱的功能,因爲它們(不要把它們傳遞給任何編碼器) 問題持續字符串類型的子集高基數。
在我的理解中,這不是一個可以接受的答案,因爲它不能保證不同'DataFrame'對象(例如train和test)之間的一致性。 – ldavid
在列車/測試的情況下,您可以在分割之前申請,但當然可能會出現與您嘗試預測的新數據集相同的問題。在這種情況下,一個解決方案是使用熊貓分類數據指定類別,然後對每個數據集應用相同的規範。這樣,get_dummies每次都會使用相同的編碼。 – simon