首页 > 解决方案 > 1 和 0 的二进制值的预测概率(数组中的每个值都是互斥的)

问题描述

我已经生成了一个模型预测,但 (y_pred) 值显示为概率而不是 0 和 1。

from sklearn.metrics import confusion_matrix, precision_score
from sklearn.model_selection import train_test_split
from keras.layers import Dense,Dropout
from keras.models import Sequential
from keras.regularizers import l2
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = pd.read_csv('train.csv', header=None)
X = data.iloc[:,0:294]
y = data.iloc[:,294:300]

X_test = pd.read_csv('test.csv', header=None)

# define a sequential Model
model = Sequential()

# Hidden Layer-1
model.add(Dense(100, activation='relu',input_dim=294, kernel_regularizer=l2(0.01)))
model.add(Dropout(0.3, noise_shape=None, seed=None))

# Hidden Layer-2
model.add(Dense(100, activation = 'relu', kernel_regularizer=l2(0.01)))
model.add(Dropout(0.3, noise_shape=None, seed=None))

# Output layer
model.add(Dense(6, activation='sigmoid'))

# Compile model
model.compile(optimizer = 'adam', loss='binary_crossentropy', metrics=['accuracy'])

model_output = model.fit(X, y, epochs=20, batch_size=20, verbose=1)

y_pred = model.predict(X_test)

#########

y_pred1
array([[0.1668182 , 0.00139472, 0.0607101 , 0.83703804, 0.20101124,
        0.01134452],
       [0.5119093 , 0.00456575, 0.0413985 , 0.18643114, 0.24617025,
        0.14039314],
       [0.2648082 , 0.00091198, 0.03806886, 0.7853936 , 0.19942024,
        0.01565605],
       ...

Keras 中是否有自动输出 0 和 1 的方法,还是我应该手动使用 0.5 阈值将每个概率输出转换为 0 和 1?

用于产生预测的测试数据实际上被标记为值 <0,0,1,0,1,0>(作为示例)。

每个数组值都是互斥/独立的。

标签: kerasdeep-learning

解决方案


你是这个意思?

Keras根据阈值将中间层的输出设置为0或1

使用 Lambda 层与阈值函数相结合。


推荐阅读