NN with Keras 预测 classes 为 dtype=float32 而不是真正的 class 值 1,2,3,为什么?
NN with Keras predicts classes as dtype=float32 as oppose to true class values of 1,2,3, why?
我正在对葡萄酒数据集实施一个简单的神经网络。 NN 运行良好并生成预测分数,但是,当我尝试探索测试数据集上的实际预测值时,我收到一个 dtype=float32 值的数组,与 类 的值相反。
- 类 被标记为 1, 2, 3
- 我有 13 个属性和 178 个观察值(小数据集)
下面是实现的代码和我得到的结果:
df.head()
enter image description here
X=df.ix[:,1:13]
y= np.ravel(df.Type)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
scale the data:
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
define the NN
model = Sequential()
model.add(Dense(13, activation='relu', input_shape=(12,)))
model.add(Dense(4, activation='softmax'))
fit the model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train1,epochs=20, batch_size=1, verbose=1)
现在这是我将预测存储到 y_pred 并获得最终分数的地方:
`y_pred = model.predict(X_test)`
`score = model.evaluate(X_test, y_test1,verbose=1)`
`59/59 [==============================] - 0s 2ms/step
[0.1106848283591917, 0.94915255247536356]`
当我探索 y_pred 时,我看到以下内容:
`y_pred[:5]`
`array([[ 3.86571424e-04, 9.97601926e-01, 1.96467945e-03,
4.67598657e-05],
[ 2.67244829e-03, 9.87006545e-01, 7.04612210e-03,
3.27492505e-03],
[ 9.50196641e-04, 1.42343721e-04, 4.57215495e-02,
9.53185916e-01],
[ 9.03929677e-03, 9.63497698e-01, 2.62350030e-02,
1.22799736e-03],
[ 1.39460826e-05, 3.24015366e-03, 9.96408522e-01,
3.37353966e-04]], dtype=float32)`
不确定为什么我看不到实际预测的 类 为 1,2,3?
尝试转换为 int 后,我得到了一个零数组,因为所有值都很小。
非常感谢您的帮助!!
您看到的是每个 class 的概率。要将概率转换为 class,只需取每种情况的最大值。
import numpy as np
y_pred_class = np.argmax(y_pred,axis=1)
我正在对葡萄酒数据集实施一个简单的神经网络。 NN 运行良好并生成预测分数,但是,当我尝试探索测试数据集上的实际预测值时,我收到一个 dtype=float32 值的数组,与 类 的值相反。
- 类 被标记为 1, 2, 3
- 我有 13 个属性和 178 个观察值(小数据集)
下面是实现的代码和我得到的结果:
df.head()
enter image description hereX=df.ix[:,1:13]
y= np.ravel(df.Type)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
scale the data:
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
define the NN
model = Sequential()
model.add(Dense(13, activation='relu', input_shape=(12,)))
model.add(Dense(4, activation='softmax'))
fit the model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train1,epochs=20, batch_size=1, verbose=1)
现在这是我将预测存储到 y_pred 并获得最终分数的地方:
`y_pred = model.predict(X_test)`
`score = model.evaluate(X_test, y_test1,verbose=1)`
`59/59 [==============================] - 0s 2ms/step
[0.1106848283591917, 0.94915255247536356]`
当我探索 y_pred 时,我看到以下内容:
`y_pred[:5]`
`array([[ 3.86571424e-04, 9.97601926e-01, 1.96467945e-03,
4.67598657e-05],
[ 2.67244829e-03, 9.87006545e-01, 7.04612210e-03,
3.27492505e-03],
[ 9.50196641e-04, 1.42343721e-04, 4.57215495e-02,
9.53185916e-01],
[ 9.03929677e-03, 9.63497698e-01, 2.62350030e-02,
1.22799736e-03],
[ 1.39460826e-05, 3.24015366e-03, 9.96408522e-01,
3.37353966e-04]], dtype=float32)`
不确定为什么我看不到实际预测的 类 为 1,2,3?
尝试转换为 int 后,我得到了一个零数组,因为所有值都很小。
非常感谢您的帮助!!
您看到的是每个 class 的概率。要将概率转换为 class,只需取每种情况的最大值。
import numpy as np
y_pred_class = np.argmax(y_pred,axis=1)