科学の箱

科学・IT・登山の話題

機械学習

DictVectorizerを使ってカテゴリデータについて特徴抽出をする

投稿日:

都市における温度データを考える。

measure = [
    {'city': 'Dubai', 'temperature': 33.},
    {'city': 'London', 'temperature': 12.},
    {'city': 'San Fransisco', 'temperature': 18.}
]

 

機会学習をする際にカテゴリデータの形式を”処理”しやすい形式に変換することはよく見られる。この際に考えられる方法は何があるか。

  1. 頭文字
  2. いくつかの文字を利用したコード
  3. 数字とのマッピング

まず1)については都市の数が増えたときに重なる可能性がある。次に2)についてはコードを自分で管理するために面倒くさい。

そうなると3)の数字とのマッピングがある。

measure_x = [
    {'city': 10, 'temperature': 33.},
    {'city': 12, 'temperature': 12.},
    {'city': 20, 'temperature': 18.}
]

 

ここに落とし穴がある。数字にすると、重なることもないし、都市の数が増えたら、数字を増やしていけばよい。しかし多くの学習器は数字の場合には、順序と計算ができることが前提になる。

例えば順序という意味では、Dubai < London < San Franciscoである。また計算ができるとは例えばDubai – Londonといった計算ができるということだ。

このようなカテゴリデータについて特徴抽出をするためにはDictVectorizeが利用できる。

sklearn.feature_extraction.DictVectorizer — scikit-learn 0.21.3 …

class sklearn.feature_extraction.DictVectorizer(dtype=<class ‘numpy.float64’>, separator=’=’, sparse=True, sort=True)

使い方はいたって簡単である。dtypeにカテゴリデータのフォーマットを指定する。またカテゴリ値が極端に大きい場合もしくはパフォーマンスが悪い場合を除けば、sparse=Falseを指定するほうが取り扱いやすい。

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False, dtype=int)
vec.fit_transform(measure)

#
array([[ 1,  0,  0, 33],
       [ 0,  1,  0, 12],
       [ 0,  0,  1, 18]], dtype=int32)

 

少々わかりにくいが1~3列目がcityを表している。確認するためにはget_feature_names()を利用すればよい。

print(vec.get_feature_names())
# ['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']

 

カテゴリデータが増えた場合にはsparse=Trueとする。これによりスパース行列が作成される。

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=True, dtype=int)
X = vec.fit_transform(measure)
# <3x4 sparse matrix of type '<class 'numpy.int32'>'
  with 6 stored elements in Compressed Sparse Row format>

print(X)
#
  (0, 0) 1
  (0, 3) 33
  (1, 1) 1
  (1, 3) 12
  (2, 2) 1
  (2, 3) 18

行列の内容を確認するには、toarray()で変換する。

X.toarray()
# array([[ 1,  0,  0, 33],
       [ 0,  1,  0, 12],
       [ 0,  0,  1, 18]], dtype=int32)

 

メタ情報

inarticle



メタ情報

inarticle



-機械学習
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

線形解析の基本手順

線形解析の基本手順 データの読み込み データフォーマット確認 EDA データクレンジング トレーニングデータ構築 モデル構築 モデル評価 予想 メトリック Related posts:Core Con …

no image

独立性の検定 2つ

ニートの年齢別割合が1996年と2012年で関連性があるか独立性の検定をしてみる。 ニートの割合  1996 2012 15~19歳 9 9 20~24歳 12 17 25~29歳 10 18 30~ …

no image

irisを教師なし学習で分類ーGMM

これまでは正解ラベルがある前提、つまり教師あり学習でモデルを構築した。今回は正解ラベルがない前提でモデルを構築する。 教師なし学習としては混合ガウスモデルを利用する。 内容 データの読み込み、前処理 …

no image

SIGNATE お弁当の需要予測-1

SIGNATEのコンペであるお弁当の需要予測をpythonで分析 データは下記から取得できる https://signate.jp/competitions/24 ライブラリ読み込み importnu …

no image

データサイエンス超入門

シンプソンのパラドックス レコメンドエンジン コンテンツベースフィルタリング 強調 アイテム ユーザー ビジネスにおけるデータ分析の手順 課題→ビジネスケース→仮説→分析→用途 データ分析の手順 デー …

2019年10月
« 9月    
 123456
78910111213
14151617181920
21222324252627
28293031  

side bar top



アーカイブ

カテゴリー