准确度始终为零

2024-10-01 15:40:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用八个特征来预测一个目标特征,当我使用keras时,我得到的准确度一直是零。我是机器学习的新手,我很困惑

我尝试了不同的激活,我认为这可能是一个回归问题,所以我使用'线性'作为最后的激活函数,结果表明,精度仍然是零

from sklearn import preprocessing
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
import pandas as pd


# Step 2 - Load our data
zeolite_13X_error = pd.read_csv("zeolite_13X_error.csv", delimiter=",")
dataset = zeolite_13X_error.values
X = dataset[:, 0:8]
Y = dataset[:, 10]  # Purity
min_max_scaler = preprocessing.MinMaxScaler()
X_scale = min_max_scaler.fit_transform(X)
X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_text, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)

# Building and training first NN
model = Sequential([
    Dense(32, activation='relu', input_shape=(8,)),
    Dense(32, activation='relu'),
    Dense(1, activation='linear'),
])
model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=['accuracy'])
hist = model.fit(X_train, Y_train,
                 batch_size=32, epochs=10,
                 validation_data=(X_val, Y_val))

Tags: andfromtestimportsizemodeltrainerror
2条回答

检查模型的输出以检查值。该模型是预测概率,而不是二进制0/1决策,我相信这是你的情况,因为你是使用精度作为衡量标准。如果模型预测概率,则根据阈值将其四舍五入,将其转换为0或1(由您选择,即如果预测>;0.5然后1或者0)

同时增加历代的数量。在输出层中也使用sigmoid激活

如果您决定将此视为一个回归问题,那么

  1. 你的损失应该是mean_squared_error,或者其他一些适合回归的损失,但不是binary_crossentropy,这只适合二元分类,并且
  2. 准确度是无意义的-它只对分类设置有意义;在回归设置中,我们通常使用损失本身进行性能评估—有关更多信息,请参见What function defines accuracy in Keras when the loss is mean squared error (MSE)?中自己的答案

如果您决定将此作为一个分类问题来处理,您应该将最后一层的激活更改为sigmoid

在任何情况下,您在这里显示的组合-loss='binary_crossentropy'activation='linear'对于单节点最后一层-是没有意义的

相关问题 更多 >

    热门问题