科学の箱

科学・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

ウェブ分析をハンズオンで学ぶ

ウェブ分析の本を読んでもあまりあたまに入ってこない。実際に手を動かさないと、身につかないわけである。 ということでハンズオンで実践して見ることにした。ハンズオンで実践するに当たり必要なのはデータとツー …

no image

実践ワークショップExcel徹底活用ビジネスデータ分析

メモ 相関係数の行列で傾向が似ている変数を探すことができる。例えば過去データとして商品A,B,C,D,E,Fがあるとする。今商品Xを開発し、マーケティング方法を決めたい。この時A~Fについてはすでに売 …

no image

線形回帰と最急降下法

線形回帰 世の中の様々な出来事(y)はある事象(x)に対して比例することが多い。もちろん厳密に比例するわけではなくずれは生じる。しかしこのxとyが比例すると仮定した場合、中学校で習った一次式でこの関係 …

no image

会社を変える分析の力

ユーザに関する問題 不確実性 過剰期待 事前期待 分析モデルの利用 パターン 変数の数 分析の利用 予測 判別 グループ 検知 最適化 発見 探索 データ分析の必要性 なぜ誤差がでるのか Costは …

no image

Pythonではじめる機械学習 – Chap05 – Model Evaluation and Improvement

Chapter 5. Model Evaluation and Improvement 学習モデルの評価 定量的なモデルの評価は教師付きモデルが主になる。 教師なしモデルは定性的なアプローチで評価する …

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

side bar top



アーカイブ

カテゴリー