Реалізація системи машинного навчання на основі Flask для прогнозування діабету

Diabetes є однією з хронічних хвороб, яка може призвести до різних ускладнень здоров'я, таких як порушення серцево-судинної системи, сліпота та навіть ампутація. Тому рання діагностика ризику діабету є надзвичайно важливою для запобігання подальшим ускладненням. Для цього технології, такі як machine learning (ML), можуть бути використані для розробки систем прогнозування, які допоможуть медичним працівникам або навіть широкій громадськості у виявленні діабету.

Flask — це мікрофреймворк для веб-розробки на Python, легкий і зручний у використанні для створення веб-додатків. Flask ідеально підходить для розробки простих, але потужних додатків, які можна інтегрувати з моделями machine learning. У цьому контексті Flask буде використовуватися для створення веб-додатку, який приймає введені користувачем дані, обробляє їх за допомогою моделі machine learning і надає прогноз, чи є ризик розвитку діабету.

У цьому випадку ми будемо використовувати відкритий набір даних Pima Indians Diabetes, який містить медичну інформацію про осіб, що мають ризик розвитку діабету, і буде використаний для навчання моделі machine learning. Після того, як модель буде натренована, веб-додаток на базі Flask використовуватиме її для прогнозування ризику діабету на основі введених користувачем даних.

Мета

Метою цього проєкту є створення веб-додатку на базі Flask, який використовує модель machine learning для прогнозування, чи є у користувача ризик розвитку діабету на основі введених медичних даних.

Підготовка Даних та Моделі

  1. Використовуваний набір даних

Набір даних, що використовується в цьому проєкті, — це Pima Indians Diabetes Dataset, який доступний у репозиторії UCI Machine Learning. Цей набір даних складається з 768 зразків з 8 вхідними ознаками та 1 цільовою змінною, яка вказує на наявність діабету (1 — позитивний, 0 — негативний). Ось деякі ознаки з цього набору даних:

  • Pregnancies: Кількість вагітностей
  • Glucose: Рівень глюкози в крові
  • BloodPressure: Артеріальний тиск
  • SkinThickness: Товщина шкіри
  • Insulin: Рівень інсуліну
  • BMI: Індекс маси тіла
  • DiabetesPedigreeFunction: Генетична історія діабету
  • Age: Вік

2. Модель машинного навчання

Для прогнозування діабету ми використовуємо алгоритм Random Forest Classifier. Random Forest — це ансамблевий алгоритм, що складається з багатьох дерев рішень. Алгоритм працює шляхом об'єднання результатів прогнозів кількох дерев, що дозволяє досягти більш точних результатів. Основною перевагою Random Forest є здатність уникати перенавчання і давати стабільні результати на різних наборах даних.

3. Веб-додаток Flask

Flask використовується для створення веб-додатку, який дозволяє користувачам вводити свої медичні дані та отримувати прогноз, чи є у них ризик діабету. Flask дозволяє інтегрувати навчену модель з простим та зручним інтерфейсом для користувачів.

Методологія

1. Підготовка середовища розробки

Перший крок у розробці цього додатку — налаштування середовища розробки. Якщо ви використовуєте PythonAnywhere by Anaconda, переконайтеся, що Anaconda вже встановлена у вашому середовищі. Anaconda спрощує встановлення і керування Python-пакетами. Ви можете створити віртуальне середовище за допомогою наступної команди:

conda create --name diabetes-env python=3.8  
conda activate diabetes-env

Далі встановіть необхідні пакети за допомогою pip:

pip install flask pandas scikit-learn matplotlib

2. Обробка даних та створення моделі машинного навчання

Наступний крок — підготовка даних та навчання моделі machine learning. Код нижче показує, як можна завантажити дані, натренувати модель і зберегти натреновану модель за допомогою pickle:

import pandas as pd   
from sklearn.
pemilihan_model імпортує train_test_split   
з sklearn. ensemble імпортує RandomForestClassifier   
з sklearn. praproses імпортує StandardScaler   
імпортує pickle
# Завантаження набору даних   
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"   
columns = ['Вагітність', 'Глюкоза', 'Кров'яний тиск', 'Товщина шкіри', 'Інсулін', 'Індекс маси тіла', 'Генетична функція діабету', 'Вік', 'Результат']   
data = pd.read_csv(url, names=columns)  # Розділення на ознаки та цільову змінну  
X = data.drop('Outcome', axis=1)  
y = data['Outcome']  # Розподіл на тренувальні та тестові дані  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # Нормалізація ознак  
scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
X_test_scaled = scaler.transform(X_test)  # Навчання моделі  
model = RandomForestClassifier(n_estimators=100, random_state=42)  
model.fit(X_train_scaled, y_train)  # Збереження моделі  
with open("diabetes_model.pkl", "wb") as f:  
    pickle.dump(model, f)

3. Розробка веб-додатку за допомогою Flask

Після того як модель була натренована, наступним кроком є розробка веб-додатку на Flask. Цей додаток матиме два основних маршрути:

  1. Головний маршрут (/) - для відображення форми введення для користувача.
  2. Маршрут прогнозування (/predict) - для обробки введення користувача та надання результату прогнозу.

Ось як можна реалізувати веб-додаток на Flask:

from flask import Flask, request, render_template  
import pickle  
import numpy as np
app = Flask(__name__)  # Завантаження натренованої моделі  
with open("diabetes_model.pkl", "rb") as f:  
    model = pickle.load(f)  

@app.route('/')  
def home():  
    return render_template('index.html')  

@app.route('/predict', methods=['POST'])  
def predict():  
    if request.method == 'POST':  
        # Отримання введених даних з форми  
        pregnancies = int(request.form['Pregnancies'])  
        glucose = int(request.form['Glucose'])  
        blood_pressure = int(request.form['BloodPressure'])  
        skin_thickness = int(request.form['SkinThickness'])  
        insulin = int(request.form['Insulin'])  
        bmi = float(request.form['BMI'])  
        pedigree = float(request.form['DiabetesPedigreeFunction'])  
        age = int(request.form['Age'])  

        # Перетворення введених даних у формат, який потрібен для моделі  
        input_features = np.array([pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, pedigree, age]).reshape(1, -1)  

        # Прогнозування  
        prediction = model.predict(input_features)  

        # Відображення результату прогнозу  
        if prediction == 1:  
            return render_template('index.html', prediction_text="Пацієнт має ризик розвитку діабету.")  
        else:  
            return render_template('index.html', prediction_text="Пацієнт не має ризику розвитку діабету.")  

    return render_template('index.html')  

if __name__ == "__main__":  
    app.run(debug=True)

4. Створення інтерфейсу користувача (HTML)

Щоб користувач міг вводити свої дані, нам потрібна проста форма введення.
Ось код HTML для форми введення:


< html lang = "uk" >   
< head >   
 < meta charset = "UTF-8" >   
 < meta name = "viewport" content = "width=device-width, initial-scale=1.0" >   
 < title > Прогноз ризику діабету    

< body >   
 < h2 > Прогноз ризику діабету    
 < form action = "/predict" method = "POST" >   
 < label > Вагітність:  < br >   
 < input type = "text" name = "Pregnancies" required > < br > < br >
Глюкоза:   
  Кров'яний тиск:   
  Товщина шкіри:   
  Інсулін:   
  Індекс маси тіла:   
  Генетична функція діабету:   
  Вік:   
  Прогноз   

{{ prediction_text }}
         ```  ## 5. Запуск додатку  Після того, як все буде готово, запустіть додаток Flask за допомогою команди:  ``` python app.py ```  Цей додаток можна відкрити в браузері за адресою `http://127.0.0.1:5000/`[.](http://127.0.0.1:5000/.)  ## Висновок  У цьому проєкті ми успішно розробили веб-додаток на Flask для прогнозування ризику діабету за допомогою _machine learning_ (машинного навчання). Цей додаток дозволяє користувачам вводити свої медичні дані та отримувати прогноз, чи є в них ризик захворіти на діабет. Для реалізації було використано модель _Random Forest_, яку було натреновано на наборі даних _Pima Indians Diabetes_.  Ось кілька аспектів, які можна покращити в майбутньому:  1. **Додавання нових функцій**: Наприклад, додавання глибшого аналізу харчування або фізичної активності. 2. **Поліпшення інтерфейсу користувача**: Зробити інтерфейс більш адаптивним і зручним для використання. 3. **Використання більш складних моделей**: Наприклад, XGBoost або моделей глибокого навчання для покращення точності.  Завдяки цьому додатку, сподіваємося, що можна допомогти в ранньому виявленні ризику діабету, що є важливим кроком у профілактиці та лікуванні цього захворювання.



Перекладено з: [Implementasi Mesin Pembelajaran Berbasis Flask untuk Prediksi Diabetes](https://medium.com/@arifiyanfnqlprinting09/implementasi-mesin-pembelajaran-berbasis-flask-untuk-prediksi-diabetes-5a239d312fd3)

Leave a Reply

Your email address will not be published. Required fields are marked *