Керас дает ValueError - PullRequest
       0

Керас дает ValueError

0 голосов
/ 12 января 2020

У меня есть вопрос. Я пытаюсь определить, является ли рак доброкачественным или злокачественным. Но набор данных дает выходную информацию в виде числа. 2 - доброкачественная опухоль, 4 - злокачественная опухоль. Я хочу, чтобы она была в форме нити. И когда я пытаюсь записать выводимую информацию в строку, выдается следующая ошибка:

ValueError: could not convert string to float: 'malignant tumor'

Код:

from keras.models import Sequential
from keras.layers import Dense,Activation
import pandas as pd
import numpy as np

df = pd.read_csv("C:/Users/A/Desktop/Python/Data/breast-cancer-wisconsin1.data")
df.drop(["1000025"], axis = 1, inplace = True)
df.replace("?", round(df.mean().mean()), inplace=True)
a = df["2.1"]
a[a==2] = "benign tumor"
a[a==4] = "malignant tumor"
inp = np.array(df[["5","1","1.1","1.2","2","1.3","3","1.4","1.5"]])
outp = np.array(df["2.1"])

model = Sequential()
model.add(Dense(256, input_dim = 9))
model.add(Activation("relu"))
model.add(Dense(256))
model.add(Activation("relu"))
model.add(Dense(256))
model.add(Activation("softmax"))

model.compile(optimizer = "adam", loss = "sparse_categorical_crossentropy", metrics = ["accuracy"])
model.fit(inp, outp, epochs = 5, batch_size = 32, validation_split = 0.13)

Исходный набор данных:

     1000025  5   1  1.1  1.2  2 1.3   3  1.4  1.5  2.1

0    1002945  5   4    4    5  7  10   3    2    1    2
1    1015425  3   1    1    1  2   2   3    1    1    2
2    1016277  6   8    8    1  3   4   3    7    1    2
3    1017023  4   1    1    3  2   1   3    1    1    2
4    1017122  8  10   10    8  7  10   9    7    1    4
..       ... ..  ..  ...  ... ..  ..  ..  ...  ...  ...
693   776715  3   1    1    1  3   2   1    1    1    2
694   841769  2   1    1    1  2   1   1    1    1    2
695   888820  5  10   10    3  7   3   8   10    2    4
696   897471  4   8    6    4  3   4  10    6    1    4
697   897471  4   8    8    5  4   5  10    4    1    4

Измененный набор данных:

     5   1  1.1  1.2  2 1.3   3  1.4  1.5              2.1

0    5   4    4    5  7  10   3    2    1     benign tumor
1    3   1    1    1  2   2   3    1    1     benign tumor
2    6   8    8    1  3   4   3    7    1     benign tumor
3    4   1    1    3  2   1   3    1    1     benign tumor
4    8  10   10    8  7  10   9    7    1  malignant tumor
..  ..  ..  ...  ... ..  ..  ..  ...  ...              ...
693  3   1    1    1  3   2   1    1    1     benign tumor
694  2   1    1    1  2   1   1    1    1     benign tumor
695  5  10   10    3  7   3   8   10    2  malignant tumor
696  4   8    6    4  3   4  10    6    1  malignant tumor
697  4   8    8    5  4   5  10    4    1  malignant tumor

Что не так? Должен ли вывод быть целым числом?

1 Ответ

0 голосов
/ 12 января 2020

В машинном обучении значения потерь рассчитываются в соответствии с числовыми метками. Keras не может инициализировать ваши строковые метки в общий формат (float). Вы можете справиться с этой ситуацией с помощью структуры basi c if-else, если хотите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...