2017-02-03 60 views
0

我想向量化一些分类数据以构建列车和测试矩阵。如何矢量化分类数据

我有85个城市,我想获得一个矩阵282520行,每一行是像

[1 0 0 ..., 0 0 0] 

矢量我想有每行的矢量为1或0取决于城市,所以每因此城市应该是一个列:

print(df['city']) 
0   METROPOLITANA DE SANTIAGO 
1   METROPOLITANA DE SANTIAGO 
2   METROPOLITANA DE SANTIAGO 
3   METROPOLITANA DE SANTIAGO 
4       COQUIMBO 
5       SANTIAGO 
6       SANTIAGO 
7   METROPOLITANA DE SANTIAGO 
8   METROPOLITANA DE SANTIAGO 
9   METROPOLITANA DE SANTIAGO 
10       BIO BIO 
11       COQUIMBO 
...        ... 
282520 METROPOLITANA DE SANTIAGO 
Name: city, dtype: object 

这是我的尝试:

from sklearn import preprocessing 

list_city = getList(df,'city') 
le = preprocessing.LabelEncoder() 
le.fit(list_city) 

print(le.transform(['AISEN'])) 
print(le.transform(['TARAPACA'])) 
print(le.transform(['AISEN DEL GENERAL CARLOS IBANEZ DEL CAMP'])) 

我得到以下输出:

[0] 
[63] 
[1] 

的问题是,我刚开了城市的指数,我找了建议,就如何向量化的数据。

+0

你确定你不是在寻找[OneHotEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing .OneHotEncoder)?这听起来更像你要找的东西。 – patrick

回答

3

一个选项是pd.get_dummies(它完全在sklearn生态系统之外)。

df = pd.DataFrame(['METROPOLITANA DE SANTIAGO', 'COQUIMBO', 'SANTIAGO', 'SANTIAGO'], 
        columns=['city']) 
pd.get_dummies(df) 
city_COQUIMBO city_METROPOLITANA DE SANTIAGO city_SANTIAGO 
0    0        1    0 
1    1        0    0 
2    0        0    1 
3    0        0    1 

如果你需要一个NumPy的阵列,只要抓住了values

pd.get_dummies(df).values 
[[0 1 0] 
[1 0 0] 
[0 0 1] 
[0 0 1]] 

另一种方法是使用LabelEncoderOneHotEncoder的组合。如您注意到的,LabelEncoder将返回任意标签数组的分类索引。 OneHotEncoder会将这些索引翻转为一个一个k编码方案。

le = LabelEncoder() 
enc = OneHotEncoder(sparse=False) 
enc.fit_transform(le.fit_transform(df.city.values).reshape(-1, 1)) 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 1.]] 

另一个选择是DictVectorizer

dv = DictVectorizer(sparse=False) 
dv.fit_transform(df.apply(dict, 1)) 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 1.]] 
+0

感谢支持,这是非常有用的,但是,这将给我85列,然后我将需要找到一种方法来转换这个85列在一个numpy阵列来构建矩阵 – neo33

+0

@neo我编辑我的答案显示如何从'pd.get_dummies'的结果中提取'ndarray',以及另外两种方法。 –

+0

@感谢您的帮助,我非常感谢支持,非常感谢 – neo33