В этой статье опишем как минимальным средствами может быть создана и обучена нейронная сеть при помощи Python и библиотеки Keras.

Нейронная сеть на Python в 15 строк кода

Сегодня мы рассмотрим задачу, связанную с применением анализа медицинских данных, а именно — диагностики риска заболевания сахарным диабетом на основе состояния больного. Для этого мы напишем простую нейронную сеть, которая решает важную практическую задачу.

Библиотека Keras представляет собой высокоуровневый интерфейс для создания нейронных сетей. Keras написан на Python и работает поверх таких более низкоуровневых решений, как TensorFlow, CNTK и Theano. За счет этого программный код получается не только мощным, но и крайне компактным.

Экспериментальные данные, взятые из медицинского архива, представляют собой файл со значениями, разделенными запятыми, в котором каждая строка соответствует одной анкете. Подробную информацию о данных из датасета вы можете прочитать здесь. В наборе экспериментальных данных, состоящих из анонимных записей имеется девять параметров. Последний из них, целевой, показывает, наблюдался ли у пациента сахарный диабет или нет (соответственно, 1 или 0). Восемь остальных параметров также имеют численные значения:

  1. Число беременностей (все пациенты из источника – женщины не моложе 21 года индийской народности пима).
  2. Концентрация глюкозы в плазме через 2 часа после введения в пероральном глюкозотолерантном тесте.
  3. Диастолическое артериальное давление (мм рт. ст.).
  4. Толщина кожной складки в районе трицепса (мм).
  5. Концентрация инсулина в сыворотке крови (мкЕд/мл).
  6. Индекс массы тела (вес в кг/(рост в м)^2).
  7. Функция, описывающая генетическую предрасположенность к диабету (diabetes pedegree).
  8. Возраст (годы).

Программный код и датасет также доступны на Github.

Библиотека Keras позволяет запускать нейронные сети с минимальным количеством операций. В качестве модели нейронной сети используется последовательная Sequental из модуля keras.models с заданием слоев keras.layers типа Dense.

Для последующей воспроизводимости результатов зафиксируем генератор случайных чисел при помощи функции random.seed() из библиотеки numpy. Считаем данные из датасета:

Разделим данные на матрицу признаков X и вектор целевой переменной Y (последний столбец датасета):

Создаем модель нейронной сети:

Опишем структуру модели нейронной сети. Определим входной, выходной и скрытые слои. Наша нейронная сеть будет иметь плотную (Dense) структуру – каждый нейрон связан со всеми нейронами следующего слоя. Выходной слой будет состоять из единственного нейрона, определяющего вероятность заболевания диабетом.

Нейронная сеть на Python в 15 строк кода для диагностики диабета

Слой добавляется к модели методом add(). Для входного слоя необходимо указать число признаков input_dim, равное в нашем случае 8:

Если наборы признаков образуют многомерную таблицу, то вместо параметра input_dim можно использовать параметр input_shape, принимающий кортеж с количеством элементов в каждом из измерений .

В качестве функции активации для всех слоев, кроме выходного, будем использовать функцию ReLU. Для выходного слоя воспользуемся сигмоидной функцией для определения конечной вероятности риска заболевания.

Функции активации

Создадим три скрытых слоя и один выходной слой нашей нейронной сети:

Первые числа, передаваемые Dense, это количества нейронов, экспериментально оптимизированные в результате вариации структуры нейронной сети. Вы можете изменять количество скрытых слоев и содержащихся в них нейронов, чтобы добиться лучшего качества предсказательности модели.

Перед тем, как начать тренировать модель, ее нужно скомпилировать при помощи метода compile():

Методу передается три параметра:

  • loss – функция потерь – объект, который модель стремиться минимизировать;
  • optimizer – оптимизатор, мы используем встроенный метод стохастической оптимизации adam, описанный в публикации Дедерика Кингма и Джимми Ба;
  • metrics – список метрик оптимизации, для задач классификации используется метрику ‘accuracy’.

Для обучения нейронной сети применяем метод fit():

Параметр epochs – “эпохи” – количество проходов нейронной сети по всем записям датасета (выбирается исходя из того, насколько быстро модель с каждым новым проходом приближается к желаемой предсказательной точности), batch_size – количество объектов выборки, берущихся за один шаг. В процессе обучения API будет выводить соответствующие строчки с величинам функции потерь и метрики для каждой из эпох.

Оценим результат обучения нейронной сети. Метод evaluate() возвращает значения функции потерь и метрики для обученной модели:

Последняя строчка в форматированном виде выводит точность прогноза по нашей модели для заданной метрики accuracy:

Наконец, полный код нейронной сети с комментариями приведен в листинге ниже:

Вы пропустили

AEGIS Algorithms Android Angular Apache Airflow Apache Druid Apache Flink Apache Spark API API Canvas AppSec Architecture Artificial Intelligence Astro Authentication Authorization AutoGPT AWS AWS Aurora AWS Boto3 AWS EC2 AWS Lambda Azure Babylon.js Backend bash Beautiful Soup Bento UI Big Data Binary Tree Browser API Bun Career Cassandra Charts ChatGPT Chrome Extension Clean Code CLI ClickHouse Coding Codux Combine Compose Computer Context Fusion Copilot Cosmo Route CProgramming cron Cryptography CSS CTF Cypress DALL-E Data Analysis Data science Database dbt dbt Cloud deno Design Design Patterns Detekt Development Distributed Systems Django Docker Docker Hub Drizzle DRY DuckDB Express FastAPI Flask Flutter For Beginners Front End Development Game Development GCN GCP Geospatial Git GitHub Actions GitHub Pages Gitlab GMS GoFr Golang Google Google Sheets Google Wire GPT-3 GPT3 Gradio Gradle Grafana Graphic Design GraphQL gRPC Guidance HMS Hotwire HTML Huawei HuggingFace IndexedDB InfoSec Interview iOS Jackknife Java JavaScript Jetpack Compose JSON Kafka Kotlin Kubernetes LangChain Laravel Linux LlaMA LLM localStorage Logging Machine Learning Magento Math Mermaid Micro Frontends Mobile Mobile App Development mondayDB MongoDB Mongoose MySQL Naming NestJS NET NetMock Networks NextJS NLP Node.js Nodejs NoSQL NPM OOP OpenAI OTP Pandas PDF PHP Playwright Plotly Polars PostgreSQL Prefect Productivity Programming Prometheus Puppeteer Pushover Python Pytorch Quarkus Rabbitmq RAG Ramda Raspberry Pi React React Native Reactor Redis REST API Revolut Riverpod RProgramming Ruby Ruby on Rails Rust Scalene SCDB ScyllaDB Selenium Servers Sklearn SLO SnowFlake Snowkase Software Architecture Software Development Solara Solid Spring Boot SQL SQLite Streamlit SudoLang Supabase Swift SwiftUI Tailwind CSS Taipy Terraform Testing Transformers TURN TypeScript Ubuntu UI Design Unix UX UX Design Vim Vite VSCode Vue Web Architecture Web Components Web Development Web Frameworks Web Scraping Web-разработка Webassembly Websocket Whisper Widgets WordPress YAML YouTube Zed Наука о данных Разное Тренды

Современный подход к разработке с использованием Next.js