Diabetes є однією з хронічних хвороб, яка може призвести до різних ускладнень здоров'я, таких як порушення серцево-судинної системи, сліпота та навіть ампутація. Тому рання діагностика ризику діабету є надзвичайно важливою для запобігання подальшим ускладненням. Для цього технології, такі як machine learning (ML), можуть бути використані для розробки систем прогнозування, які допоможуть медичним працівникам або навіть широкій громадськості у виявленні діабету.
Flask — це мікрофреймворк для веб-розробки на Python, легкий і зручний у використанні для створення веб-додатків. Flask ідеально підходить для розробки простих, але потужних додатків, які можна інтегрувати з моделями machine learning. У цьому контексті Flask буде використовуватися для створення веб-додатку, який приймає введені користувачем дані, обробляє їх за допомогою моделі machine learning і надає прогноз, чи є ризик розвитку діабету.
У цьому випадку ми будемо використовувати відкритий набір даних Pima Indians Diabetes, який містить медичну інформацію про осіб, що мають ризик розвитку діабету, і буде використаний для навчання моделі machine learning. Після того, як модель буде натренована, веб-додаток на базі Flask використовуватиме її для прогнозування ризику діабету на основі введених користувачем даних.
Мета
Метою цього проєкту є створення веб-додатку на базі Flask, який використовує модель machine learning для прогнозування, чи є у користувача ризик розвитку діабету на основі введених медичних даних.
Підготовка Даних та Моделі
- Використовуваний набір даних
Набір даних, що використовується в цьому проєкті, — це 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. Цей додаток матиме два основних маршрути:
- Головний маршрут (
/
) - для відображення форми введення для користувача. - Маршрут прогнозування (
/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)