diabetes-prediction-ml-project
- Stars
- 8
- Language
- Python
- Updated
Diabetes Prediction Machine Learning Project
A comprehensive machine learning project for predicting diabetes using the UCI Diabetes dataset (Pima Indians Diabetes Database). This project implements multiple machine learning algorithms, performs hyperparameter tuning, and provides detailed visualizations and analysis.
๐ Project Overview
This project aims to predict the onset of diabetes in patients based on various medical and demographic features. The dataset contains information about 768 female patients of Pima Indian heritage, including diagnostic measurements such as glucose level, blood pressure, BMI, and more.
Key Features
- Multiple ML Models: Logistic Regression, Random Forest, and Support Vector Machine
- Hyperparameter Tuning: GridSearchCV for optimal model performance
- Comprehensive EDA: Detailed exploratory data analysis with visualizations
- Model Evaluation: Accuracy, confusion matrix, ROC curves, and classification reports
- Data Preprocessing: Missing value handling, feature scaling, and outlier removal
- Modular Code Structure: Clean, maintainable, and well-documented code
- Visualization Suite: Rich set of plots for data understanding and model comparison
๐๏ธ Project Structure
diabetes-prediction-ml-project/
โโโ data/
โ โโโ diabetes.csv # UCI Diabetes dataset
โโโ notebooks/
โ โโโ diabetes_analysis.ipynb # Jupyter notebook for analysis
โโโ src/
โ โโโ preprocessing.py # Data preprocessing functions
โ โโโ model_training.py # Model training and evaluation
โ โโโ visualization.py # Visualization functions
โโโ outputs/ # Generated plots and results
โโโ models/ # Saved trained models
โโโ main.py # Main pipeline script
โโโ requirements.txt # Python dependencies
โโโ README.md # Project documentation
๐ Quick Start
Prerequisites
- Python 3.8 or higher
- pip package manager
Installation
-
Clone or download the project
# If you have the ZIP file, extract it unzip diabetes-prediction-ml-project.zip cd diabetes-prediction-ml-project -
Create a virtual environment (recommended)
# Create virtual environment python -m venv diabetes_env # Activate virtual environment # On Windows: diabetes_env\Scripts\activate # On macOS/Linux: source diabetes_env/bin/activate -
Install dependencies
pip install -r requirements.txt
Running the Project
Option 1: Run the Complete Pipeline
Execute the main script to run the entire machine learning pipeline:
python main.py
This will:
- Load and explore the diabetes dataset
- Perform data preprocessing
- Train multiple ML models
- Conduct hyperparameter tuning
- Evaluate and compare models
- Generate visualizations
- Save trained models
Option 2: Use Jupyter Notebook
For interactive analysis:
# Start Jupyter Notebook
jupyter notebook
# Open notebooks/diabetes_analysis.ipynb
๐ Dataset Information
The dataset contains 768 observations with 8 features plus the target variable:
Features:
- Pregnancies: Number of times pregnant
- Glucose: Plasma glucose concentration (2-hour oral glucose tolerance test)
- BloodPressure: Diastolic blood pressure (mm Hg)
- SkinThickness: Triceps skin fold thickness (mm)
- Insulin: 2-hour serum insulin (ฮผU/ml)
- BMI: Body mass index (weight in kg/(height in m)ยฒ)
- DiabetesPedigreeFunction: Diabetes pedigree function (genetic influence)
- Age: Age in years
Target Variable:
- Outcome: 0 = No diabetes, 1 = Diabetes
๐ฌ Machine Learning Models
The project implements and compares three different algorithms:
1. Logistic Regression
- Use Case: Binary classification with linear decision boundary
- Hyperparameters Tuned: C (regularization), penalty type, solver
- Advantages: Interpretable, fast training, probabilistic output
2. Random Forest
- Use Case: Ensemble method handling non-linear relationships
- Hyperparameters Tuned: n_estimators, max_depth, min_samples_split, min_samples_leaf
- Advantages: Feature importance, handles overfitting, robust to outliers
3. Support Vector Machine (SVM)
- Use Case: Complex decision boundaries with kernel trick
- Hyperparameters Tuned: C (regularization), kernel type, gamma
- Advantages: Effective in high dimensions, memory efficient
๐ Model Evaluation Metrics
The project evaluates models using multiple metrics:
- Accuracy: Overall correct predictions
- Precision: True positives / (True positives + False positives)
- Recall: True positives / (True positives + False negatives)
- F1-Score: Harmonic mean of precision and recall
- AUC-ROC: Area under the Receiver Operating Characteristic curve
- Confusion Matrix: Detailed breakdown of predictions
- Cross-Validation: 5-fold CV for robust performance estimation
๐จ Visualizations
The project generates comprehensive visualizations:
Exploratory Data Analysis:
- Target variable distribution
- Feature distributions and histograms
- Correlation heatmap
- Box plots by diabetes outcome
Model Comparison:
- Accuracy comparison bar chart
- ROC curves for all models
- Precision-recall curves
- Confusion matrices
- Feature importance plots
All plots are saved in the outputs/ directory as high-resolution PNG files.
๐ง Hyperparameter Tuning
GridSearchCV is used for systematic hyperparameter optimization:
Logistic Regression:
- C: [0.01, 0.1, 1, 10, 100]
- penalty: ['l1', 'l2']
- solver: ['liblinear']
Random Forest:
- n_estimators: [50, 100, 200]
- max_depth: [None, 10, 20, 30]
- min_samples_split: [2, 5, 10]
- min_samples_leaf: [1, 2, 4]
SVM:
- C: [0.1, 1, 10, 100]
- kernel: ['rbf', 'linear']
- gamma: ['scale', 'auto', 0.001, 0.01, 0.1, 1]
๐ Output Files
After running the project, you'll find:
outputs/ folder:
target_distribution.png: Dataset target variable analysisfeature_distributions.png: Individual feature histogramscorrelation_heatmap.png: Feature correlation matrixfeature_boxplots.png: Feature distributions by outcomemodel_accuracy_comparison.png: Model performance comparisonconfusion_matrices.png: Confusion matrices for all modelsroc_curves.png: ROC curves comparisonprecision_recall_curves.png: Precision-recall analysismodel_evaluation_results.txt: Detailed text results
models/ folder:
logistic_regression_model.pkl: Trained Logistic Regressionrandom_forest_model.pkl: Trained Random Forestsupport_vector_machine_model.pkl: Trained SVMscaler.pkl: Fitted StandardScaler for preprocessing
๐งช Using Trained Models
Load and use saved models for predictions:
import joblib
import pandas as pd
# Load the best model (example: Random Forest)
model = joblib.load('models/random_forest_model.pkl')
scaler = joblib.load('models/scaler.pkl')
# Prepare new data (example)
new_data = pd.DataFrame({
'Pregnancies': [1],
'Glucose': [120],
'BloodPressure': [70],
'SkinThickness': [25],
'Insulin': [80],
'BMI': [28.5],
'DiabetesPedigreeFunction': [0.5],
'Age': [35]
})
# Scale the data
new_data_scaled = scaler.transform(new_data)
# Make prediction
prediction = model.predict(new_data_scaled)
probability = model.predict_proba(new_data_scaled)
print(f"Prediction: {'Diabetes' if prediction[0] == 1 else 'No Diabetes'}")
print(f"Probability: {probability[0][1]:.2%}")
๐ Customization
Adding New Models:
- Add the model to
src/model_training.py - Define hyperparameter grid in
main.py - Update visualization functions if needed
Modifying Preprocessing:
- Edit
src/preprocessing.pyfor different data cleaning approaches - Adjust feature engineering in the
DataPreprocessorclass
Custom Visualizations:
- Add new plotting functions to
src/visualization.py - Call them from the main pipeline
๐จ Troubleshooting
Common Issues:
-
Import Errors:
# Ensure you're in the project directory cd diabetes-prediction-ml-project # Check if src is in Python path python -c "import sys; print(sys.path)" -
Memory Issues:
- Reduce GridSearchCV parameter combinations
- Use smaller cross-validation folds
-
Visualization Issues:
- Ensure matplotlib backend is properly configured
- Try:
import matplotlib; matplotlib.use('Agg')
-
Missing Dependencies:
pip install --upgrade -r requirements.txt
๐ Expected Results
Typical model performance on this dataset:
- Logistic Regression: ~77% accuracy
- Random Forest: ~75-80% accuracy
- SVM: ~76-78% accuracy
Results may vary based on data preprocessing and hyperparameter tuning.
๐ค Contributing
To contribute to this project:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- UCI Machine Learning Repository for the Pima Indians Diabetes dataset
- National Institute of Diabetes and Digestive and Kidney Diseases
- Scikit-learn community for excellent ML tools
- Matplotlib and Seaborn for visualization capabilities
๐ Support
If you encounter any issues or have questions:
- Check the troubleshooting section above
- Review the code comments in each module
- Ensure all dependencies are correctly installed
- Verify Python version compatibility (3.8+)
Happy Machine Learning! ๐