ラベルをOne-hot符号化する
機械学習や深い学習を利用して分類問題を解決する場合、ラベルを符号化する必要があり、離散した自己変数を分類符号化する必要がある場合もある.特にニューラルネットワークや回帰予測を行う場合、離散した自己変数に対してもOne-hot符号化拡張を行うのは良い方法である.例えば、賃貸市場の単一の住宅源の価格を予測する場合、装飾の程度がその価格に影響する要素であると仮定し、豪装、精装、中装、簡装の4種類は、1つの変数X 1の異なる値、すなわち次元1,2,3,4をそれぞれ符号化すると、ニューラルネットワーク予測時にこの変数の重みを与えるのは適切ではなく、価格への影響のソートが事前に知られていない限り、良い重みを与えることができず、この場合、それを拡張してX 1,X 2,X 3,X 4となり、対応する豪装=[1,0,0,0]、精装=[0,10,0]となるべきである.このように推す.変数として扱う場合は、豪装=[1]、精装=[2]...このように,このようなアルゴリズムは分類予測や回帰予測には不適切である.このとき,離散した引数XまたはラベルYをOne−hot符号化する必要がある.
本稿では,Liunx環境下でPythonを用い,Anaconda 3をインストールする環境下でプログラミング実装を行い,numpy,pandas,sklearnなどの科学計算,データ分析,機械学習パッケージを含むAnaconda 3についても,tensorflowフレームワークを再構築して深さニューラルネットワーク研究を行うことができる.サンプルのラベルy=[0,1,2,3,1,2,0,1]のセットがあると仮定し、One-hot符号化を行うと、コードは以下のように実現される.
出力結果は
/home/ubuntu/anaconda3/bin/python/home/ubuntu/PycharmProjects/Testpycharm/liyang2.py[[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.] [0. 1. 0. 0.] [0. 0. 1. 0.] [1. 0. 0. 0.] [0. 1. 0. 0.]]Process finished with exit code 0
本稿では,Liunx環境下でPythonを用い,Anaconda 3をインストールする環境下でプログラミング実装を行い,numpy,pandas,sklearnなどの科学計算,データ分析,機械学習パッケージを含むAnaconda 3についても,tensorflowフレームワークを再構築して深さニューラルネットワーク研究を行うことができる.サンプルのラベルy=[0,1,2,3,1,2,0,1]のセットがあると仮定し、One-hot符号化を行うと、コードは以下のように実現される.
from sklearn.preprocessing import OneHotEncoder
import numpy as np
y=np.array([0,1,2,3,1,2,0,1])
ohe = OneHotEncoder()
ohe.fit([[0],[1],[2],[3]])
print(ohe.transform(y.reshape(-1,1)).toarray())
出力結果は
/home/ubuntu/anaconda3/bin/python/home/ubuntu/PycharmProjects/Testpycharm/liyang2.py[[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.] [0. 1. 0. 0.] [0. 0. 1. 0.] [1. 0. 0. 0.] [0. 1. 0. 0.]]Process finished with exit code 0