Машинное обучение TensorFlow - прогнозирование пользовательского ввода - PullRequest
2 голосов
/ 20 января 2020

Я работаю над проблемой классификации, включающей два класса. Мне нужно обучить модель на наборе данных и предсказать правильный класс после принятия одного значения в качестве входных данных для каждого из атрибутов. Вот фрагмент набора данных. Классы 0 и 1. enter image description here

Вот код, с которым я тренируюсь и тестирую модель:

X = df.drop(["classification"], axis=1)
y = df["classification"]

x_scaler = MinMaxScaler()
x_scaler.fit(X)
column_names = X.columns
X[column_names] = x_scaler.transform(X)

X_train,  X_test, y_train, y_test = train_test_split(
        X, y, test_size= 0.2, shuffle=True)

Я попытался получить ввод от пользователя следующим образом:

userInput=input("Enter 14 attributes separated by commas")
#userInput=userInput.split(",")
#userInput=[np.float32(c) for c in userInput]

и прогнозирование с помощью:

pred=model.predict(userInput)

Но я получаю ошибку:

AttributeError: объект 'str' не имеет атрибута 'ndim'

Я также попытался ввести атрибуты вручную:

prediction=np.array([40,8,1,2,0,2,6,10,34,40,16,23,67,25])
print(prediction.shape) # Shape is (14,)
print(prediction[0].shape) # Shape is ()
print(prediction[0:1].shape) #Shape is (1,)
print(X_test[0:1].shape) #Shape is (1, 14)

и прогнозировать несколькими способами, например:

  (1) pred = model.predict(x=np.array(prediction[0:1].shape))
  (2) pred = model.predict(x=np.array(prediction[0].shape))
  (3) pred = model.predict(prediction)
  (4) pred = model.predict([40,8,1,2,0,2,6,10,34,40,16,23,67,25])
  (5) pred = model.predict(prediction.shape)
  (6) pred = model.predict([40],[8],[1],[2],[0],[2],[6],[10],[34],[40],[16],[23],[67],[25])

Но я получаю эту ошибку в случаях 1, чтобы 4

ValueError: Ошибка при проверке ввода: ожидалось, что dens_1_input будет иметь форму (14,), но получил массив с формой (1,)

, и это в случае 5 и 6 соответственно

AttributeError: объект 'tuple' не имеет атрибута 'ndim'
TypeError: Forex () принимает от 2 до 9 позиционных аргументов, но 15 было дано

Кроме того, я попытался запустить это вместо ', и это работает:

pred=model.predict(X_test)

Но предсказание не в любом случае. Я попытался:

(1) print(np.argmax(pred(userInput)))
(2) print(np.argmax(pred(prediction)))

Использование .shape также не работает, и выдает ошибку:

TypeError: объект 'list' не вызывается

Форма данных обучения: (320, 14) Форма данных теста: (80, 14)

Можно ли как-то получить данные от пользователя и использовать их для прогноза?

1 Ответ

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

Когда вы прогнозируете с помощью pred=model.predict(userInput), вы получаете ошибку AttributeError: 'str' object has no attribute 'ndim', потому что вы передаете строку своей функции. Вам нужно будет разделить строку, которую вы прочитали из терминала, и преобразовать строки в целые числа.

inputString = "1, 2, 3,4"
sample = inputString.replace(" ", "").split(",")
sample = [int(x) for x in sample]
print(sample)
[1, 2, 3, 4]

Для прогнозирования попробуйте передать ваш образец в метод прогнозирования как:

pred = model.predict([[40,8,1,2,0,2,6,10,34,40,16,23,67,25]])
...