Der Diabetes-Vorhersagedatensatz ist eine Sammlung medizinischer und demografischer Daten von Patienten sowie ihres Diabetesstatus (positiv oder negativ). Die Daten umfassen Merkmale wie Alter, Geschlecht, Physique-Mass-Index (BMI), Bluthochdruck, Herzerkrankungen, Rauchergeschichte, HbA1c-Wert und Blutzuckerspiegel. Dieser Datensatz kann verwendet werden, um Modelle für maschinelles Lernen zu erstellen, um Diabetes bei Patienten basierend auf ihrer Krankengeschichte und demografischen Informationen vorherzusagen. Dies kann für medizinisches Fachpersonal nützlich sein, um Patienten zu identifizieren, bei denen das Risiko besteht, an Diabetes zu erkranken, und um personalisierte Behandlungspläne zu entwickeln. Darüber hinaus kann der Datensatz von Forschern genutzt werden, um die Zusammenhänge zwischen verschiedenen medizinischen und demografischen Faktoren und der Wahrscheinlichkeit, an Diabetes zu erkranken, zu untersuchen.
- Unter Geschlecht versteht man das biologische Geschlecht des Individuums, das einen Einfluss auf dessen Anfälligkeit für Diabetes haben kann
- Das Alter ist ein wichtiger Faktor, da Diabetes häufiger bei älteren Erwachsenen diagnostiziert wird. Das Alter liegt in unserem Datensatz zwischen 0 und 80 Jahren.
- Bluthochdruck ist eine Erkrankung, bei der der Blutdruck in den Arterien anhaltend erhöht ist. Es hat Werte von 0
- Herzerkrankungen sind eine weitere Erkrankung, die mit einem erhöhten Risiko für die Entwicklung von Diabetes verbunden ist. Es hat die Werte 0 oder 1, wobei
- Rauchen gilt auch als Risikofaktor für Diabetes und kann die damit verbundenen Komplikationen verschlimmern
- Der BMI (Physique Mass Index) ist ein Maß für den Körperfettanteil basierend auf Gewicht und Größe. Höhere BMI-Werte gehen mit einem höheren Risiko einher
- Der HbA1c-Wert (Hämoglobin A1c) ist ein Maß für den durchschnittlichen Blutzuckerspiegel einer Particular person in den letzten zwei bis drei Monaten. Höhere Werte weisen auf ein höheres Risiko hin
- Der Blutzuckerspiegel bezieht sich auf die Menge an Glukose, die sich zu einem bestimmten Zeitpunkt im Blutkreislauf befindet. Ein hoher Blutzuckerspiegel ist ein Schlüsselfaktor
- Diabetes ist die vorhergesagte Zielvariable, wobei Werte von 1 das Vorliegen von Diabetes und 0 das Vorliegen von Diabetes anzeigen
Gehen wir zum Codeteil, um zu überprüfen, was ich getan habe.
Wir haben in unseren ersten Schritten die Bibliotheken initialisiert, die wir benötigen.
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import seaborn as sns
Den Datensatz lesen
#Studying Knowledge
file_path = ("/kaggle/enter/diabetes-prediction-dataset/diabetes_prediction_dataset.csv")
diabetes = pd.read_csv(file_path)
Dann führen wir einige Operationen durch, um unsere Daten sehr intestine zu verstehen und sie für die Vorverarbeitungsphase vorzubereiten.
# Attempting to grasp dataset
print(diabetes.describe())
age hypertension heart_disease bmi
depend 100000.000000 100000.00000 100000.000000 100000.000000
imply 41.885856 0.07485 0.039420 27.320767
std 22.516840 0.26315 0.194593 6.636783
min 0.080000 0.00000 0.000000 10.010000
25% 24.000000 0.00000 0.000000 23.630000
50% 43.000000 0.00000 0.000000 27.320000
75% 60.000000 0.00000 0.000000 29.580000
max 80.000000 1.00000 1.000000 95.690000 HbA1c_level blood_glucose_level diabetes
depend 100000.000000 100000.000000 100000.000000
imply 5.527507 138.058060 0.085000
std 1.070672 40.708136 0.278883
min 3.500000 80.000000 0.000000
25% 4.800000 100.000000 0.000000
50% 5.800000 140.000000 0.000000
75% 6.200000 159.000000 0.000000
max 9.000000 300.000000 1.000000
#Checking lacking values
print(diabetes.isna().sum())#Checking null values
print(diabetes.isnull().sum())
# They're purported to be the identical however I used to be to strive them each :P
gender 0
age 0
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 0
blood_glucose_level 0
diabetes 0
dtype: int64
gender 0
age 0
hypertension 0
heart_disease 0
smoking_history 0
bmi 0
HbA1c_level 0
blood_glucose_level 0
diabetes 0
dtype: int64
Wir haben versucht, aus unseren Funktionen detailliertere Informationen zu erhalten, um zu überprüfen, wie es funktioniert, die Particular person zu finden, die an Diabetes erkrankt ist oder nicht
# Getting individuals who has blood glucose stage equal or better than the typical
blood_MA = diabetes[diabetes.blood_glucose_level >= diabetes.blood_glucose_level.mean()]
print(blood_MA)
gender age hypertension heart_disease smoking_history bmi
0 Feminine 80.0 0 1 by no means 25.19
2 Male 28.0 0 0 by no means 27.32
3 Feminine 36.0 0 0 present 23.45
4 Male 76.0 1 1 present 20.14
6 Feminine 44.0 0 0 by no means 19.31
... ... ... ... ... ... ...
99989 Feminine 26.0 0 0 No Data 27.32
99992 Feminine 26.0 0 0 by no means 34.34
99993 Feminine 40.0 0 0 by no means 40.69
99994 Feminine 36.0 0 0 No Data 24.60
99997 Male 66.0 0 0 former 27.83 HbA1c_level blood_glucose_level diabetes
0 6.6 140 0
2 5.7 158 0
3 5.0 155 0
4 4.8 155 0
6 6.5 200 1
... ... ... ...
99989 5.0 158 0
99992 6.5 160 0
99993 3.5 155 0
99994 4.8 145 0
99997 5.7 155 0
[56360 rows x 9 columns]
# Getting individuals who has bmi equal or better than the typical
bmi_MA = diabetes[diabetes.bmi >= diabetes.bmi.mean()]
print(bmi_MA)
gender age hypertension heart_disease smoking_history bmi
8 Male 42.0 0 0 by no means 33.64
11 Feminine 54.0 0 0 former 54.70
12 Feminine 78.0 0 0 former 36.05
16 Male 15.0 0 0 by no means 30.36
20 Male 40.0 0 0 present 36.38
... ... ... ... ... ... ...
99991 Male 22.0 0 0 present 29.65
99992 Feminine 26.0 0 0 by no means 34.34
99993 Feminine 40.0 0 0 by no means 40.69
99997 Male 66.0 0 0 former 27.83
99998 Feminine 24.0 0 0 by no means 35.42 HbA1c_level blood_glucose_level diabetes
8 4.8 145 0
11 6.0 100 0
12 5.0 130 0
16 6.1 200 0
20 6.0 90 0
... ... ... ...
99991 6.0 80 0
99992 6.5 160 0
99993 3.5 155 0
99997 5.7 155 0
99998 4.0 100 0
[33768 rows x 9 columns]
# Getting individuals who has hemoglobin stage equal or better than the typical
HbA1c_level = diabetes[diabetes.HbA1c_level >= diabetes.HbA1c_level.mean()]
print(HbA1c_level)
gender age hypertension heart_disease smoking_history bmi
0 Feminine 80.0 0 1 by no means 25.19
1 Feminine 54.0 0 0 No Data 27.32
2 Male 28.0 0 0 by no means 27.32
5 Feminine 20.0 0 0 by no means 27.32
6 Feminine 44.0 0 0 by no means 19.31
... ... ... ... ... ... ...
99992 Feminine 26.0 0 0 by no means 34.34
99995 Feminine 80.0 0 0 No Data 27.32
99996 Feminine 2.0 0 0 No Data 17.37
99997 Male 66.0 0 0 former 27.83
99999 Feminine 57.0 0 0 present 22.43 HbA1c_level blood_glucose_level diabetes
0 6.6 140 0
1 6.6 80 0
2 5.7 158 0
5 6.6 85 0
6 6.5 200 1
... ... ... ...
99992 6.5 160 0
99995 6.2 90 0
99996 6.5 100 0
99997 5.7 155 0
99999 6.6 90 0
[62143 rows x 9 columns]
#Getting counts of people that have diabetes
print(diabetes.groupby(diabetes.diabetes).gender.depend())
diabetes
0 91500
1 8500
Identify: gender, dtype: int64
# Getting the individuals who has diabetes alone in a dataset
diabetes_only = diabetes[diabetes.diabetes == 1]
print(diabetes_only)
gender age hypertension heart_disease smoking_history bmi
6 Feminine 44.0 0 0 by no means 19.31
26 Male 67.0 0 1 not present 27.32
38 Male 50.0 1 0 present 27.32
40 Male 73.0 0 0 former 25.91
53 Feminine 53.0 0 0 former 27.32
... ... ... ... ... ... ...
99935 Feminine 65.0 1 1 by no means 33.55
99938 Male 55.0 0 1 former 30.42
99957 Feminine 61.0 0 0 No Data 34.45
99962 Feminine 58.0 1 0 by no means 38.31
99979 Feminine 61.0 0 0 present 30.11 HbA1c_level blood_glucose_level diabetes
6 6.5 200 1
26 6.5 200 1
38 5.7 260 1
40 9.0 160 1
53 7.0 159 1
... ... ... ...
99935 8.2 140 1
99938 6.2 300 1
99957 6.5 280 1
99962 7.0 200 1
99979 6.2 240 1
[8500 rows x 9 columns]
# Getting the distinctive values of smoking historical past function as It is an necessary function that we'll want in our prediction
print(diabetes.smoking_history.distinctive())
['never' 'No Info' 'current' 'former' 'ever' 'not current']
Nachdem wir die Vorverarbeitung unseres Datensatzes abgeschlossen und ihn sehr intestine studiert hatten, konnten wir ihn visualisieren, um die Sicht auf unsere Daten zu erleichtern und es anderen Menschen leichter zu machen, sie zu verstehen
# Create a pie chart of diabetes outcome counts
labels = ["True" , "False"]
diabetes_counts = diabetes['diabetes'].value_counts()
plt.pie(diabetes_counts, labels=diabetes_counts)
plt.legend(labels)
plt.present()
# scatter to verify relationship between bmi and the blood_glucose_level in case of getting diabetes or not
yes_diabetes = diabetes[diabetes.diabetes == 1]
no_diabetes = diabetes[diabetes.diabetes == 0]
plt.scatter(yes_diabetes.bmi, yes_diabetes.blood_glucose_level, c = 'r')
plt.scatter(no_diabetes.bmi, no_diabetes.blood_glucose_level, c = 'b')
plt.xlabel("Bmi")
plt.ylabel("Blood Glucose Degree")
plt.present()
# scatter to verify relationship between bmi and the HbA1c_level in case of getting diabetes or not
plt.scatter(yes_diabetes.bmi, yes_diabetes.HbA1c_level, c = 'r')
plt.scatter(no_diabetes.bmi, no_diabetes.HbA1c_level, c = 'b')
plt.xlabel("Bmi")
plt.ylabel("HbA1c_level")
plt.present()
# Plot a histogram for smoking historical past distribution
plt.hist(diabetes.smoking_history)
plt.title('Knowledge Distribution')
plt.xlabel('Smoking Historical past Standing')
plt.ylabel('Frequency')
plt.present()
# Plot a histogram for age distribution
plt.hist(diabetes.age)
plt.title('Knowledge Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.present()
# Plot a histogram for gender distribution
plt.hist(diabetes.gender)
plt.title('Knowledge Distribution')
plt.xlabel('Gender')
plt.ylabel('Frequency')
plt.present()
# Plot a histogram for bmi distribution
plt.hist(diabetes.bmi)
plt.title('Knowledge Distribution')
plt.xlabel('Bmi')
plt.ylabel('Frequency')
plt.present()
plt.hist(diabetes.blood_glucose_level)
plt.title('Knowledge Distribution')
plt.xlabel('blood_glucose_level')
plt.ylabel('Frequency')
plt.present()
#boxplot for blood_glucose_level
plt.boxplot(diabetes.blood_glucose_level)
plt.present()
#boxplot for blood_glucose_level
plt.boxplot(diabetes.bmi)
plt.present()
# Pair plot for numeric options
sns.pairplot(diabetes, hue='diabetes')
plt.present()
Nachdem wir die Untersuchung und Visualisierung unseres Datensatzes abgeschlossen haben, können wir verschiedene Modellbewertungen daran durchführen.
Wir müssen lediglich einige kleine Schritte und Änderungen am Datensatz durchführen, um ihn für das Modell vorzubereiten.
# first we have to convert the smooking_history and gender options into numeric values as we are going to use this function in our prediction#Utilizing map() operate in pandas
diabetes['smoking_history'] = diabetes['smoking_history'].map({
'by no means': 0,
'No Data': 1,
'present': 2,
'former': 3,
'ever': 4,
'not present': 5
})
diabetes['gender'] = diabetes['gender'].map({
'Male': 0,
'Feminine': 1,
})
#One-Sizzling Encoding Categoric Variables
diabetes = pd.get_dummies(diabetes,columns=['hypertension', 'heart_disease','gender','smoking_history','diabetes'],drop_first=True)
#Making ready the info options and goal
X = diabetes.iloc[: , 0:8]
y = diabetes.iloc[: , -1]
# Standardize information to deal with giant values or lacking values (we do not have lacking values in our case right here)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
# Cut up dataset into coaching and testing
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=42)
print("Knowledge Varieties")
print(diabetes.dtypes) # df is the identify of your DataFrame
Knowledge Varieties
age float64
bmi float64
HbA1c_level float64
blood_glucose_level int64
hypertension_1 uint8
heart_disease_1 uint8
gender_1.0 uint8
smoking_history_1 uint8
smoking_history_2 uint8
smoking_history_3 uint8
smoking_history_4 uint8
smoking_history_5 uint8
diabetes_1 uint8
dtype: object
#Logistic Regression Mannequin
from sklearn.linear_model import LogisticRegressionmannequin = LogisticRegression()
mannequin.match(X_train, y_train)
# Carry out predictions
y_pred = mannequin.predict(X_test)
# Accuracy of the mannequin
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: " , accuracy*100 ,'%')
Accuracy: 95.875 %
from sklearn.tree import DecisionTreeClassifier# Create and match the choice tree classifier
mannequin = DecisionTreeClassifier()
mannequin.match(X_train, y_train)
# Carry out predictions on the check set
y_pred = mannequin.predict(X_test)
# Calculate the accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy*100 , '%')
Accuracy: 95.345 %
from sklearn.ensemble import RandomForestClassifier
# Create a Random Forest classifier with default parameters
model3 = RandomForestClassifier()# Match the Random Forest classifier on the coaching information
model3.match(X_train, y_train)
# Make predictions on the check set utilizing model3
y_pred3 = model3.predict(X_test)
# Calculate the analysis metrics for model3
accuracy3 = accuracy_score(y_test, y_pred3)
print("Accuracy: ", accuracy3*100 , '%')
Accuracy: 96.975 %
Wie wir sehen können, haben wir bei den drei Modellen eine hohe Genauigkeit erzielt, bei Verwendung des RandomForest-Klassifikators jedoch eine höhere Genauigkeit: 96,98 % (Bester Schuss)