AIって結局何なのかよく分からないので、とりあえず100日間勉強してみた Day23
経緯についてはこちらをご参照ください。
■本日の進捗
●ワンホットエンコーディングを理解
■はじめに
引き続き「Pythonではじめる機械学習(オライリー・ジャパン)」で学んでいきます。
これまで教師あり学習から教師なし学習まで多くの機械学習アルゴリズムを広く浅く(あえて、です)知り、scikit-learnライブラリを通して実際に使ってきました。
今回からは特徴量エンジニアリングと呼ばれるデータ表現に関する技術や、作成した機械学習モデルの評価手法などのテクニックを学んでいきたいと思います。
■ワンホットエンコーディング
これまで扱ってきたデータセットはその多くが連続値特徴量(continuous feature)を入力値として扱えるものでした。
しかし実際には離散的なデータ、離散値特徴量(discrete feature)を入力値として扱いたい場合もあります。例えば職業や居住地、役職などは離散的な入力となり、これらをカテゴリ特徴量(categorical feature)を言います。
機械学習アルゴリズムは一般的に数値データを必要とするので、このような離散的な入力を数値に変換する手法としてワンホットエンコーディング(one-hot encoding、ダミー変数)が知られています。
このワンホットエンコーディングもscikit-learnに実装されているため簡単に利用することができます。
from sklearn.preprocessing import OneHotEncoder categories = [['Yokohama'], ['Utsunomiya'], ['Maranello'], ['Brackley']] encoder = OneHotEncoder(sparse_output=False) one_hot_encoded = encoder.fit_transform(categories) print(one_hot_encoded)
[[0. 0. 0. 1.]
[0. 0. 1. 0.]
[0. 1. 0. 0.]
[1. 0. 0. 0.]]
このように’Yokohama’, ‘Utsunomiya’, ‘Maranello’, ‘Brackley’というカテゴリ変数を行列に変換しています。ここでエンコーディングがアルファベット順に行われていることに注意が必要です。
ワンホットエンコーディングはカテゴリ変数を直接扱えないk-NNやロジスティック回帰、SVMなどの線形モデルや距離をパラメータとして扱うモデルに対して有効です。ディープラーニングも数値ベクトルを入力変数とするため多く用いられています。
決定木やそのアンサンブル法はカテゴリ変数をそのまま扱えるのでワンホットエンコーディングは適さないと言われています。
上記の例はそもそも順序はないですが、エンコーディングすることでデータの順序が失われます。同じ文字列でも大・中・小やVenti, Grande, Tall, short(合ってる?)などの順序の情報を持つカテゴリに関しても多くの場合不適切なエンコーディングになります。
■おわりに
これまでのアルゴリズムと比べるとかなーり地味ですが、実は前処理やデータの変換の方が運用上重要だったりします。ワンホットエンコーディングのようなデータ表現を使いこなせると扱えるデータがぐっと増えるので幅が広がるみたいです。
scikit-learn標準のデータセットで離散値特徴量を持つものを探してみたのですが、なかなか良いデータセットが見当たらなかったです。とは言え整った綺麗なデータセットばかりでいつもとても助かってます。
■参考文献
- Andreas C. Muller, Sarah Guido. Pythonではじめる機械学習. 中田 秀基 訳. オライリー・ジャパン. 2017. 392p.
- ChatGPT. 4o mini. OpenAI. 2024. https://chatgpt.com/
- API Reference. scikit-learn.org. https://scikit-learn.org/stable/api/index.html