
5.4
特徴量エンジニアリング
379
vec.fit_transform(data)
Out[3]: array([[ 0, 1, 0, 850000, 4],
[ 1, 0, 0, 700000, 3],
[ 0, 0, 1, 650000, 3],
[ 1, 0, 0, 600000, 2]], dtype=int64)
地域の列は、それぞれの地域名に相当する
3
つの別々の列に展開され、各行はその地域に関連付
けられた列に
1
を持つことに注目してください。カテゴリ特徴量をこのようにエンコードしておけ
ば、
scikit-learn
モデルに通常の方法でデータを当
てはめることができます。
各列の意味を確認したければ、特徴名(
feature name
)を調べます。
In[4]: vec.get_feature_names()
Out[4]: ['neighborhood=Fremont',
'neighborhood=Queen Anne',
'neighborhood=Wallingford',
'price',
'rooms']
このアプローチには明らかに
1
つの欠点があります。カテゴリの値が多数ある場合、データセッ
トのサイズが大幅に増加する可能性があります。ただし、エンコードされたデータにはほとんどゼ
ロが含まれているため、疎な出力に対する非常に効率的な対策が存在します。
In[5]: vec = DictVectorizer(sparse=True, dtype=int)
vec.
fit_transform(data) ...