乳腺癌数据集损失函数高,准确率低

Breast cancer Dataset high loss function and low accuracy

我是 ml 主题的新手,今天尝试了一些培训。我 运行 遇到了几个问题,直到我到达现在的位置。谁能向我解释为什么准确度没有改变以及为什么损失函数如此之高?我使用了威斯康星乳腺癌数据集。

这是我的代码:

import pandas as pd
import tensorflow as tf

df = pd.read_csv('data.csv',)

df['diagnosis']=df['diagnosis'].replace(['M'], 1)
df['diagnosis']=df['diagnosis'].replace(['B'], 0)

df = df.iloc[: , :-1]

df.head

x = df.drop(columns=["diagnosis"])

y = df["diagnosis"]

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1)

model = tf.keras.models.Sequential()

model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.summary()

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

df.dtypes

model.fit(x_train, y_train, epochs=500)

查看您在问题评论中提供的 Kaggle 数据集,我再次 运行 模型。我遇到了您所描述的相同问题:

Epoch 500/500
16/16 [==============================] - 0s 3ms/step - loss: 0.6577 - accuracy: 0.6328

原因是数据集中存在 id 列。在训练阶段之前删除此列:

df = df.drop('id', axis=1)

我获得了更好的结果:

Epoch 500/500
16/16 [==============================] - 0s 3ms/step - loss: 0.0770 -  accuracy: 0.9648

(几乎)始终从数据集中删除 ID 和标识符列。如果需要,将其设置为数据框的索引而不是列。他们在训练阶段混淆了预测器,因为它们没有提供任何有用的信息。