Термин «сердечное заболевание» часто используется как синонимы термина «сердечно-сосудистое заболевание». Сердечно-сосудистые заболевания обычно относятся к состояниям, которые связаны с сужением или закупоркой кровеносных сосудов, которые могут привести к сердечному приступу, боли в груди (стенокардии) или инсульту. Другие сердечные заболевания, например те, которые влияют на сердечную мышцу, клапаны или ритм, также считаются формами сердечных заболеваний.

Заболевания, относящиеся к сердечно-сосудистым заболеваниям, включают заболевания кровеносных сосудов, такие как ишемическая болезнь сердца; проблемы с сердечным ритмом (аритмии); и пороки сердца, с которыми вы родились (врожденные пороки сердца), среди прочего. Многие формы сердечных заболеваний можно предотвратить или вылечить с помощью здорового образа жизни. - "Клиника Майо"

В этой статье я покажу вам, как создать программу на 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: концепции, инструменты и методы для создания интеллектуальных систем. Системы ». Это отличная книга, которая поможет новичкам научиться писать программы машинного обучения и понять концепции машинного обучения.

Практическое машинное обучение с помощью Scikit-Learn и TensorFlow: концепции, инструменты и методы для создания интеллектуальных систем

Спасибо, что прочитали эту статью. Надеюсь, она была вам интересна! Если вам понравилась эта статья и вы нашли ее полезной, пожалуйста, оставьте несколько аплодисментов, чтобы выразить свою признательность. Если вы еще не являетесь участником Medium, подумайте о том, чтобы стать участником, если не для моих статей, то для всех других замечательных статей и авторов на этом сайте. Вы можете легко стать участником Medium, перейдя по ссылке здесь. Продолжайте учиться, и если вам нравятся финансы, информатика или программирование, посетите и подпишитесь на мои каналы YouTube (randerson112358 и computer science).