以下、ご指導をお願いできませんでしょうか。
〇アヤメのデータ(解析対象のデータ)
〇kerasでアヤメの10データ(説明変数4個)の分類(予測)を実行しました。
〇3分類です(0,1,2)
〇結果をprint(X_pred, y_pred)で確認すると、y_predの値は、
以下太字のように、3分類の小数点第7位までの評価値として出力されます。
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]
[5.4 3.9 1.7 0.4]
[4.6 3.4 1.4 0.3]
[5. 3.4 1.5 0.2]
[4.4 2.9 1.4 0.2]
[5.9 3. 5.1 1.8]] [[0.9604735 0.036979 0.0025476 ]
[0.9274674 0.06670068 0.00583181]
[0.9471255 0.04877361 0.00410091]
[0.9132033 0.07942345 0.00737325]
[0.9618993 0.03564271 0.00245795]
[0.96040165 0.03737509 0.00222324]
[0.94531244 0.05049011 0.00419744]
[0.9462063 0.05007736 0.00371628]
[0.9030936 0.08779445 0.00911197]
[0.00817783 0.3878351 0.6039871 ]]
〇この、y_predの値を、[0 0 0 0 0 0 0 0 0 2]のように、それぞれ10データに対して、3つずつではなく、最も確率が高いものを整数として、1つだけ出力するのはどうすればよいでしょうか?
例えば、
[0.9604735 0.036979 0.0025476 ]の場合、「0」
[0.00817783 0.3878351 0.6039871 ]の場合、「2」
となります。
先頭位置から順番に、「0,1,2」と分類されます。
すなわち、3つの数値で最も大きい数値の「位置の値(0~2)」を、表示したいです。
よろしくお願いいたします。
以下のような結果表示にしたいと思っています。
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]
[5.4 3.9 1.7 0.4]
[4.6 3.4 1.4 0.3]
[5. 3.4 1.5 0.2]
[4.4 2.9 1.4 0.2]
[5.9 3. 5.1 1.8]]** [0 0 0 0 0 0 0 0 0 2]**
◆以下、プログラムと実施結果です(読み難くてすみません)。
from pandas import Series,DataFrame
import pandas as pd
<エクセルの入力ファイル名、シート名を指定>
df = pd.read_excel('iris_data.xlsx',sheet_name='target')
<データをコピーする。>
df_X = df.copy()
df_Y = df.copy()
<取得したExcelデータから属性データのみを取り出す>
df_X = df_X.drop('Target',axis=1)
<取得したExcelデータから目的変数のみを取り出す>
drop_idx = ['sepal length (cm)', 'sepal width (cm)','petal length (cm)','petal width (cm)']
df_Y = df_Y.drop(drop_idx,axis=1)
<訓練データと評価用データに分割>
from sklearn.model_selection import train_test_split as split
x_train, x_test, y_train, y_test = split(df_X,df_Y,train_size=0.8,test_size=0.2)
import tensorflow as tf
import keras
from keras.layers import Dense,Activation
<ニュートラルネットワークで使用するモデル作成>
model = keras.models.Sequential()
model.add(Dense(units=32,input_dim=4))
model.add(Activation('relu'))
model.add(Dense(units=3))
model.add(Activation('softmax'))
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
<評価の実行>
score = model.evaluate(x_test, y_test,batch_size = 1)
print(score[1])
30/30 [==============================] - 0s 432us/step
0.9666666666666667
<未知データの分類(エクセルファイルから複数データの読み込み)>
<エクセルの入力ファイル名、シート名を指定>
df1 = pd.read_excel('iris_data_3.xlsx',sheetname='data2')
X_pred = np.array(df1)
y_pred = model.predict(X_pred)
print(X_pred, y_pred)
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]
[5.4 3.9 1.7 0.4]
[4.6 3.4 1.4 0.3]
[5. 3.4 1.5 0.2]
[4.4 2.9 1.4 0.2]
[5.9 3. 5.1 1.8]] [[0.9604735 0.036979 0.0025476 ]
[0.9274674 0.06670068 0.00583181]
[0.9471255 0.04877361 0.00410091]
[0.9132033 0.07942345 0.00737325]
[0.9618993 0.03564271 0.00245795]
[0.96040165 0.03737509 0.00222324]
[0.94531244 0.05049011 0.00419744]
[0.9462063 0.05007736 0.00371628]
[0.9030936 0.08779445 0.00911197]
[0.00817783 0.3878351 0.6039871 ]]
以上です。
ご指導よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/23 06:51
2019/08/23 07:01
2019/08/23 07:15
2019/08/23 07:17
2019/08/23 07:19