وارد کردن کتابخانههای لازم
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, classification_report
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import streamlit as st
1. بارگذاری دادهها
@st.cache_data # برای کش کردن دادهها در Streamlit
def load_data():
url = “https://raw.githubusercontent.com/plotly/datasets/master/diabetes.csv”
data = pd.read_csv(url)
return data
data = load_data()
2. تقسیم دادهها به ویژگیها و برچسبها
X = data.drop(“Outcome”, axis=1) # ویژگیها
y = data[“Outcome”] # برچسبها
3. تقسیم دادهها به آموزشی و تستی
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4. پیشپردازش دادهها (نرمالسازی)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
5. ساخت مدل یادگیری عمیق با TensorFlow/Keras
model = Sequential([
Dense(64, activation=‘relu’, input_shape=(X_train.shape[1],)),
Dense(32, activation=‘relu’),
Dense(1, activation=‘sigmoid’) # خروجی باینری (0 یا 1)
])
model.compile(optimizer=‘adam’, loss=‘binary_crossentropy’, metrics=[‘accuracy’])
6. آموزش مدل
model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.2)
7. ارزیابی مدل
y_pred = (model.predict(X_test) > 0.5).astype(int)
accuracy = accuracy_score(y_test, y_pred)
print(f"دقت مدل: {accuracy * 100:.2f}%“)
print(”\nگزارش طبقهبندی:\n", classification_report(y_test, y_pred))
8. ذخیره مدل
model.save(“diabetes_model.h5”)
9. ساخت رابط کاربری با Streamlit
st.title(“پیشبینی دیابت با هوش مصنوعی”)
st.write(“”"
این برنامه از یک مدل یادگیری عمیق برای پیشبینی احتمال ابتلا به دیابت استفاده میکند.
لطفاً مقادیر زیر را وارد کنید:
“”")
دریافت ورودی از کاربر
pregnancies = st.number_input(“تعداد بارداریها”, min_value=0, max_value=20, value=1)
glucose = st.number_input(“سطح گلوکز”, min_value=0, max_value=200, value=100)
blood_pressure = st.number_input(“فشار خون”, min_value=0, max_value=150, value=70)
skin_thickness = st.number_input(“ضخامت پوست”, min_value=0, max_value=100, value=20)
insulin = st.number_input(“سطح انسولین”, min_value=0, max_value=900, value=80)
bmi = st.number_input(“شاخص توده بدنی (BMI)”, min_value=0.0, max_value=70.0, value=25.0)
diabetes_pedigree = st.number_input(“سابقه خانوادگی دیابت”, min_value=0.0, max_value=3.0, value=0.5)
age = st.number_input(“سن”, min_value=0, max_value=120, value=30)
پیشبینی با مدل
if st.button(“پیشبینی”):
input_data = np.array([[pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, diabetes_pedigree, age]])
input_data = scaler.transform(input_data) # نرمالسازی دادههای ورودی
prediction = model.predict(input_data)
probability = prediction[0][0] * 100
st.write(f"احتمال ابتلا به دیابت: {probability:.2f}%")
if probability > 50:
st.error(“احتمال ابتلا به دیابت بالا است. لطفاً به پزشک مراجعه کنید.”)
else:
st.success(“احتمال ابتلا به دیابت پایین است.”)