Термин «сердечное заболевание» часто используется как синонимы термина «сердечно-сосудистое заболевание». Сердечно-сосудистые заболевания обычно относятся к состояниям, которые связаны с сужением или закупоркой кровеносных сосудов, которые могут привести к сердечному приступу, боли в груди (стенокардии) или инсульту. Другие сердечные заболевания, например те, которые влияют на сердечную мышцу, клапаны или ритм, также считаются формами сердечных заболеваний.
Заболевания, относящиеся к сердечно-сосудистым заболеваниям, включают заболевания кровеносных сосудов, такие как ишемическая болезнь сердца; проблемы с сердечным ритмом (аритмии); и пороки сердца, с которыми вы родились (врожденные пороки сердца), среди прочего. Многие формы сердечных заболеваний можно предотвратить или вылечить с помощью здорового образа жизни. - "Клиника Майо"
В этой статье я покажу вам, как создать программу на Python, чтобы определить, есть ли у человека сердечно-сосудистые заболевания или нет. Информацию о наборе данных, который я буду использовать в этой статье и программе, можно найти ниже.
Data Set Features: Age | age | int (days)| Height | height | int (cm) | Weight | weight | float (kg) | Gender | gender | categorical code | Systolic blood pressure | ap_hi | int | Diastolic blood pressure | ap_lo | int | Cholesterol | cholesterol | 1: normal, 2: above normal, 3: well above normal | Glucose | gluc | 1: normal, 2: above normal, 3: well above normal | Smoking | smoke | binary | Alcohol intake | alco | binary | Physical activity | active | binary | Presence or absence of cardiovascular disease | cardio | binary |
Если вы предпочитаете не читать эту статью и хотите ее видеопрезентацию, вы можете проверить Видео YouTube. В нем подробно рассказывается обо всем, что описано в этой статье, и он поможет вам легко начать программировать собственную модель машинного обучения, даже если на вашем компьютере не установлен язык программирования Python. Или вы можете использовать оба в качестве дополнительных материалов для изучения машинного обучения!
Программирование:
Первое, что мне нравится делать перед написанием единственной строчки кода, - это добавлять в комментарии описание того, что делает код. Таким образом, я могу оглянуться на свой код и точно знать, что он делает.
#Description: #This program classifies a person as having a cardiovascular disease (1) or not (0) #So the target class "cardio" equals 1, when the patient has cardiovascular disease, and it's 0, when the patient is healthy.
Импортируйте библиотеки.
#Import Libraries import numpy as np import pandas as pd import seaborn as sns
Загрузите набор данных.
#Load the data from google.colab import files # Use to load data on Google Colab uploaded = files.upload() # Use to load data on Google Colab
Сохраните данные в переменной и распечатайте данные.
#Store the data into the df variable df = pd.read_csv('cardio.csv') df.head(7) #Print the first 7 rows
Получите количество строк и столбцов.
#Get the shape of the data (the number of rows & columns) df.shape
Подсчитайте количество пустых значений в каждом столбце.
#Count the empty (NaN, NAN, na) values in each column df.isna().sum()
Вот еще один способ проверить, содержит ли ваш набор данных какие-либо значения NULL.
#Another check for any null / missing values df.isnull().values.any()
Получите статистику по данным.
#View some basic statistical details like percentile, mean, standard deviation etc. df.describe()
Подсчитайте количество людей с сердечно-сосудистыми заболеваниями и количество людей без сердечно-сосудистых заболеваний.
#Get a count of the number of patients with (1) and without (0) a cardiovasculer disease df['cardio'].value_counts()
Визуализируйте количество людей с сердечно-сосудистыми заболеваниями и количество людей без сердечно-сосудистых заболеваний.
#Visualize this count sns.countplot(df['cardio'])
Давайте посмотрим на количество людей с сердечно-сосудистыми заболеваниями, которое превышает количество людей без сердечно-сосудистых заболеваний?
# Let's look at the number of people with a Cardio Vascular Disease that exceed #the number of people without a Cardio Vascular Disease? #Create a years column df['years'] = ( df['age'] / 365).round(0) #Get the years by dividing the age in days by 365 df["years"] = pd.to_numeric(df["years"],downcast='integer') # Convert years to an integer #Visualize the data #colorblind palette for colorblindness sns.countplot(x='years', hue='cardio', data = df, palette="colorblind", edgecolor=sns.color_palette("dark", n_colors = 1));
Получите корреляцию столбцов.
#Get the correlation of the columns df.corr()
Визуализируйте корреляцию.
#Visualize the correlation import matplotlib.pyplot as plt plt.figure(figsize=(7,7)) #7in by 7in sns.heatmap(df.corr(), annot=True, fmt='.0%')
Удалите или опустите столбец лет и столбец идентификатора.
# Remove or drop the years column df = df.drop('years', axis=1) #Remove or drop the id column df = df.drop('id', axis=1)
Разделите данные на данные функций и целевые данные.
#Split the data into feature data and target data X = df.iloc[:, :-1].values Y = df.iloc[:, -1].values
Снова разделите данные на набор данных 75% для обучения и набор данных для тестирования 25%.
#Split the data again, into 75% training data set and 25% testing data set from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size= 0.25, random_state = 1)
Масштабируйте значения в данных до значений от 0 до 1 включительно.
#Feature Scaling #Scale the values in the data to be values between 0 and 1 inclusive from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)
Создайте модель машинного обучения под названием Классификатор случайного леса.
# Use Random Forest Classifier from sklearn.ensemble import RandomForestClassifier forest = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 1) forest.fit(X_train, Y_train)
Проверьте точность моделей на обучающих данных.
#Test the models accuracy on the trainingg data set model = forest model.score(X_train, Y_train)
Модель была примерно 97,99% с точностью до обучающих данных.
Проверьте точность модели на тестовом наборе данных, создав матрицу неточностей, а затем используя матрицу неточностей для вычисления показателя точности.
Распечатайте матрицу неточностей и точность на экране.
#Test the models accuracy on the test data set from sklearn.metrics import confusion_matrix cm = confusion_matrix(Y_test, model.predict(X_test)) TN = cm[0][0] TP = cm[1][1] FN = cm[1][0] FP = cm[0][1] #Print the confusion matrix print(cm) #Print the models accuracy on the test data print('Model Test Accuracy = {}'. format( (TP + TN)/ (TP +TN + FN + FP) ) )
Точность модели на тестовых данных составила 70,2%. Это нормально, но когда дело касается людей и их здоровья, вам нужно получить гораздо более высокий показатель точности, чем этот.
После некоторой дополнительной настройки этой программы, возможно, удастся получить более высокий балл точности!
Если вам интересно узнать больше о машинном обучении, чтобы сразу приступить к работе с проблемами и примерами, я настоятельно рекомендую вам ознакомиться с Практическое машинное обучение с помощью Scikit-Learn и TensorFlow: концепции, инструменты и методы для создания интеллектуальных систем. Системы ». Это отличная книга, которая поможет новичкам научиться писать программы машинного обучения и понять концепции машинного обучения.
Спасибо, что прочитали эту статью. Надеюсь, она была вам интересна! Если вам понравилась эта статья и вы нашли ее полезной, пожалуйста, оставьте несколько аплодисментов, чтобы выразить свою признательность. Если вы еще не являетесь участником Medium, подумайте о том, чтобы стать участником, если не для моих статей, то для всех других замечательных статей и авторов на этом сайте. Вы можете легко стать участником Medium, перейдя по ссылке здесь. Продолжайте учиться, и если вам нравятся финансы, информатика или программирование, посетите и подпишитесь на мои каналы YouTube (randerson112358 и computer science).