2017-02-15 11 views
1

私はherehereの例を踏襲しており、Kerasにはまったく新しいものです。それは素晴らしいように見えますが、私は理解できないものにぶち当たっています。ケラス:マルチクラス分類

私は8クラスの分類問題があります。トレーニングセットには5120行と62列があり、最後の列はターゲット変数です。

私のターゲット変数は現在浮動小数点としてエンコードされていますので、to_categoricalを使用して、それらを整数に、次にダミー行列に変換します。結果は、形状のnumpy.ndarray(num_samples、num_classes + 1)です。誰でも知っている理由は?ここで

はコードです:私は与えられた答えを理解していなかった

import numpy as np 
from keras.utils.np_utils import to_categorical 

dataset = np.loadtxt("train_pl.csv", delimiter=",") 

# split into input (X) and output (Y) variables 
X = dataset[:,0:61] #I have 5120 rows. 
Y = (dataset[:,62]).astype(int) #class labels 1 to 8 inclusive 

#print Y.shape #(5120,) 
#print np.unique(Y) #1 2 3 4 5 6 7 8 

y_binary = to_categorical(Y) 

print y_binary.shape #(5120, 9) - why does this have 9 columns? 

EDIT

理由は、私はKerasは文字通り数としてクラスラベルを解釈していることを理解していなかったでした。例えば、私のクラスは1から8のラベルが付けられているので、Kerasはラベル '1'を見て、それは1だと言っています - これを1ホットベクトルの '1'の位置に置きます。 0 0 0 0 0 0 0 '0' 0 0 0 0 0 0、8までと同じことをします:それは余分な列がある理由です: '0'の場合に対処するために、マッピングには存在しません。技術的に受け入れられた答えは、これはちょうど詳細を与えることを説明しました。

答えて

0

to_categoricalhereに記載されているようcategorical_crossentropyで使用するために、バイナリクラス行列にクラスベクトル(整数nb_classes 0から)に変換するため。

+0

チュートリアル(http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/)しかし、モデルを定義するとき、著者には3つの出力単位があります。 to_categorical結果と同じ次元です。私はそれをすることはできません - 私は私の出力で9クラスを持つことはできません。 – StatsSorceress

+0

あなたはトレーニングの前に 'Y = Y - 1'を使ってラベル(y)を0..7にマッピングすることができます。一度あなたが予測したら、それらを戻してマップしてください –

+0

なぜそれは必要ですか?チュートリアルには3つの出力ノードとto_categoricalで定義された3つのクラスがあります。 – StatsSorceress

関連する問題