我想使用8个特征来预测目标特征,而当我使用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))
答案 0 :(得分:1)
如果您决定将其视为回归问题,则
mean_squared_error
或其他一些适合回归的损失,但不应该 binary_crossentropy
(仅适用于二进制分类),并且如果您决定将其作为分类问题解决,则应将最后一层的激活更改为sigmoid
。
无论如何,您在此处显示的组合-单节点最后一层的loss='binary_crossentropy'
和activation='linear'
-是没有意义的。
答案 1 :(得分:0)
检查模型的输出以检查值。该模型是在预测概率,而不是二进制0/1决策,我认为这是您的情况,因为您使用精度作为度量标准。如果模型正在预测概率,则可以根据阈值对它们进行四舍五入以将其转换为0或1(您可以选择,即预测> 0.5则为1,否则为0)。
还增加了纪元数。还可以在输出层中使用sigmoid
激活。