Не понимаю как вводить данные во входные нейроны нейросети Python. Нейросеть определяющая наличие диабета.

Stdnt

Новичок
Пользователь
Апр 11, 2020
3
0
1
Добрый день всем. Недавно начал изучать нейронные сети на Python. Нашел нейронку в интернете определяющую наличие диабета по следующим критериям:
  1. Число беременностей (все пациенты из источника – женщины не моложе 21 года индийской народности пима).
  2. Концентрация глюкозы в плазме через 2 часа после введения в пероральном глюкозотолерантном тесте.
  3. Диастолическое артериальное давление (мм рт. ст.).
  4. Толщина кожной складки в районе трицепса (мм).
  5. Концентрация инсулина в сыворотке крови (мкЕд/мл).
  6. Индекс массы тела (вес в кг/(рост в м)^2).
  7. Функция, описывающая генетическую предрасположенность к диабету (diabetes pedegree).
  8. Возраст (годы).
Тестовые данные взял из таблицы prima-indians-diabetes.csv на GitHub (https://github.com/jg-fisher/diabetesNeuralNetwork). Нейронная сеть определяет болезнь с шансом 85-88%.

Главный вопрос состоит в том: А как использовать нейросеть? Как вводить данные во входные нейроны?

P.S.1
Методом тыка, понял что .predict() принимает двумерный массив, но в итоге выводит дробные числа float (где должно быть 1, там примерно 0,87, 0,85 и др, где должно выводиться 0, там 0,05, 0,2, 0,15) . Что эти выводы означают могу только предположить, что это вероятность заболевания.

P.S.2
Python 3.10.7
ОС - Windows 10
Библиотеки:
numpy 1.24.1
keras 2.11.0
tensorflow 2.11.0

Код:
from keras.models import Sequential
from keras.layers import Dense
import numpy

# задаем для воспроизводимости результатов
numpy.random.seed(2)

# загружаем датасет, соответствующий последним пяти годам до определение диагноза
dataset = numpy.loadtxt("prima-indians-diabetes.csv", delimiter=",")
# разбиваем датасет на матрицу параметров (X) и вектор целевой переменной (Y)
X, Y = dataset[:,0:8], dataset[:,8]

# создаем модели, добавляем слои один за другим
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu')) # входной слой требует задать input_dim
model.add(Dense(15, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid')) # сигмоида вместо relu для определения вероятности

# компилируем модель, используем градиентный спуск adam
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])

# обучаем нейронную сеть
model.fit(X, Y, epochs = 1000, verbose=0)

# оцениваем результат
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

a=[[6,148,72,35,0,33.6,0.627,50]] # Вывод должен быть 1
b=[[1,85,66,29,0,26.6,0.351,31]] # Вывод должен быть 0
f=[[0,148,72,35,0,33.6,0,50]] # Вывод должен быть 1
print(model.predict(a))
print('--------------------------------------------------------')
print(model.predict(b))
print('--------------------------------------------------------')
print(model.predict(f))
 

Форум IT Специалистов