乳腺癌数据集损失函数高,准确率低
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 和标识符列。如果需要,将其设置为数据框的索引而不是列。他们在训练阶段混淆了预测器,因为它们没有提供任何有用的信息。
我是 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 和标识符列。如果需要,将其设置为数据框的索引而不是列。他们在训练阶段混淆了预测器,因为它们没有提供任何有用的信息。