Добрый день всем. Недавно начал изучать нейронные сети на Python. Нашел нейронку в интернете определяющую наличие диабета по следующим критериям:
Главный вопрос состоит в том: А как использовать нейросеть? Как вводить данные во входные нейроны?
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
- Число беременностей (все пациенты из источника – женщины не моложе 21 года индийской народности пима).
- Концентрация глюкозы в плазме через 2 часа после введения в пероральном глюкозотолерантном тесте.
- Диастолическое артериальное давление (мм рт. ст.).
- Толщина кожной складки в районе трицепса (мм).
- Концентрация инсулина в сыворотке крови (мкЕд/мл).
- Индекс массы тела (вес в кг/(рост в м)^2).
- Функция, описывающая генетическую предрасположенность к диабету (diabetes pedegree).
- Возраст (годы).
Главный вопрос состоит в том: А как использовать нейросеть? Как вводить данные во входные нейроны?
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
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))