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

import pandas as pd
import numpy as np

df = pd.read_csv("diabetes_prediction_dataset.csv")
df

df.isna().sum()

это мой счастливый день :)

Данные визуализации

в этих данных 1 означает наличие диабета, а 0 означает отсутствие диабета.

import matplotlib.pyplot as plt

# Menghitung jumlah data dengan nilai 1 dan 0 pada kolom "diabetes"
diabetes_counts = df['diabetes'].value_counts()

# Membuat pie chart
plt.figure(figsize=(3, 3))
plt.pie(diabetes_counts, labels=diabetes_counts.index, autopct='%1.1f%%', startangle=90, colors=['blue', 'orange'])
plt.title('Persentase Data dengan Nilai 1 dan 0 pada Kolom "Diabetes"')

plt.show()

из 100 000 данных люди, страдающие сахарным диабетом, составляют 8,5%

import matplotlib.pyplot as plt
import seaborn as sns

# Filter data dengan nilai 1 pada kolom "diabetes"
age_diabetes_1 = df[df['diabetes'] == 1]

# Menghitung jumlah "age" dengan nilai 1 pada kolom "diabetes" dan mengambil 10 "age" teratas
age_counts = age_diabetes_1['age'].value_counts().sort_values(ascending=False).head(10)

# Membuat diagram batang
plt.figure(figsize=(8, 4))
sns.barplot(x=age_counts.index, y=age_counts.values, color='blue')
plt.title('10 Age Teratas dengan Nilai 1 pada Kolom "Diabetes"')
plt.xlabel('Usia (age)')
plt.ylabel('Jumlah')

plt.show()

Данные показывают первые 10 возрастов, у которых есть диабет.


# Menghitung jumlah data dalam setiap kategori "smoking_history"
smoking_counts = df['smoking_history'].value_counts()

# Membuat diagram pie
plt.figure(figsize=(6, 6))
plt.pie(smoking_counts, labels=smoking_counts.index, autopct='%1.1f%%', startangle=90)
plt.title('Proporsi Kategori pada Kolom "Smoking History"')

plt.show()

Это показывает данные о курильщиках в наборе данных, довольно много неизвестных данных.

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

После визуализации данных следующим шагом была классификация данных, чтобы подготовить их для машинного понимания. Однако, прежде чем двигаться дальше, я провел отбор признаков, используя несколько методов. Одним из них было рекурсивное устранение признаков (RFE), которое итеративно устраняет признаки с наименьшим влиянием на прогноз диабета. Метод RFE продемонстрировал высокую точность выбора признаков, что сделало его основным методом, выбранным для этого исследования.

В дополнение к RFE я также использовал метод SelectKBest, чтобы выбрать лучшие k функций на основе рассчитанных статистических оценок. Кроме того, я реализовал алгоритм классификатора случайного леса, который может определить наиболее важные особенности прогнозирования диабета. Среди этих трех методов я выбрал функции, выбранные методом RFE, для обучения моей модели прогнозирования.

Классификация данных

классификация направлена ​​на облегчение обработки данных с помощью машинного обучения

# Membuat klasifikasi pada kolom "gender"
df['gender'] = df['gender'].replace({'Male': 1, 'Female': 2})
df['diabetes'] = df['diabetes'].replace({'False': 0, 'True': 1})
# Membuat klasifikasi pada kolom "smoking_history"
smoking_classification = {
    'No Info': 0,
    'ever': 1,
    'not current': 2,
    'current': 3,
    'former': 4,
    'never': 5
}

df['smoking_history'] = df['smoking_history'].replace(smoking_classification)

Определить функции

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectKBest, chi2

# Memisahkan fitur (X) dan target (y)
X = df.drop('diabetes', axis=1)
y = df['diabetes']

#RFE
# Inisialisasi model pengklasifikasi
model = LogisticRegression()

# Inisialisasi objek RFE dengan model pengklasifikasi dan jumlah fitur yang ingin dipilih
rfe = RFE(estimator=model, n_features_to_select=5)

# Melakukan seleksi fitur dengan RFE
X_selected = rfe.fit_transform(X, y)

# Mendapatkan subset fitur yang terpilih
selected_features_rfe = X.columns[rfe.support_].tolist()


#SelectKBest: 
k = 5  # Jumlah fitur terbaik yang ingin dipilih
selector = SelectKBest(score_func=chi2, k=k)
X_new = selector.fit_transform(X, y)

# Mendapatkan fitur terbaik yang dipilih
selected_features_skbest = X.columns[selector.get_support()]


# Menampilkan fitur-fitur yang terpilih
print("Fitur yang terpilih(RFE):")
print(selected_features_rfe)

# Menampilkan fitur terbaik yang dipilih
print("Fitur terbaik yang dipilih selectKBest:")
print(selected_features_skbest)

это напряженный момент, определение признаков такое же, как и определение успешности модели, я здесь, чтобы сделать 2 метода выбора признаков для сравнения

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# Memilih subset fitur yang relevan
selected_features = ['age', 'hypertension', 'bmi', 'HbA1c_level', 'blood_glucose_level']
X = df[selected_features]
y = df['diabetes']

# Membagi data menjadi data pelatihan dan data pengujian
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Membangun model Random Forest
rf = RandomForestClassifier()

# Melatih model menggunakan data pelatihan
rf.fit(X_train, y_train)

# Memprediksi target menggunakan data pengujian
y_pred = rf.predict(X_test)

# Menampilkan laporan klasifikasi
print(classification_report(y_test, y_pred))

здесь я использую возможности метода RFE, он дает 0,97. это более чем достаточно точно для прогнозирования, в то время как 2-й признак дает 0,94, у него есть разрыв, который довольно далек от метода RFE.

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

Помимо использования существующих данных, я также хотел протестировать созданную мной модель с новыми данными. Вот новые данные, которые я использовал:

new_data = pd.DataFrame({
    'age': [45, 65, 30, 50],
    'hypertension': [0, 1, 1, 0],
    'bmi': [25, 30, 35, 28],
    'HbA1c_level': [6.0, 7.5, 5.8, 6.2],
    'blood_glucose_level': [120, 180, 100, 140]
})
predictions = rf.predict(new_data)
print(predictions)
[0 1 0 0]

После запуска модели прогнозирования результаты показали следующие классификации: [0 1 0 0]. Число 0 указывает на то, что у людей низкий риск развития диабета, а число 1 указывает на высокий риск.

В этом исследовании я описал этапы разработки модели прогнозирования диабета с использованием подхода машинного обучения. Начальные шаги включали импорт данных, визуализацию и выбор признаков с использованием методов RFE, SelectKBest и Random Forest Classifier. Результаты показали, что метод RFE успешно идентифицировал наиболее значимые признаки для прогнозирования диабета. Понимая эти факторы риска, мы можем более эффективно предотвращать и лечить сахарный диабет в будущем. Кроме того, благодаря тестированию новых данных созданная мной модель показала хорошие возможности прогнозирования риска диабета у новых людей.