«Здоровье - это состояние полного физического, социального и психического благополучия, а не просто отсутствие болезней или недугов. Таким образом, здоровье - это уровень функциональной эффективности живых существ и общее состояние ума, тела и духа человека, что означает отсутствие болезней, травм и боли. Это ресурс повседневной жизни и позитивная концепция, подчеркивающая физические возможности ».

Крепкое здоровье - лучшее богатство !!!

В этой статье на Medium мы узнаем о различных методах классификации, применяемых к сердечным заболеваниям, которые позволяют предсказать, страдает ли человек сердечным заболеванием или нет, с помощью Kaggle Heart Datasease Dataset.

О наборе данных

Этот набор данных датируется 1988 годом и состоит из четырех баз данных: Кливленд, Венгрия, Швейцария и Лонг-Бич V. Он содержит 76 атрибутов, включая предсказанный атрибут, но все опубликованные эксперименты относятся к использованию подмножества из 14 из них. Поле «цель» относится к наличию сердечного заболевания у пациента. Это целочисленное значение: 0 = нет болезни и 1 = болезнь.

Информация об атрибутах

  • age: возраст в годах
  • пол: (1 = мужской; 0 = женский)
  • cp: тип боли в груди
  • trestbps: артериальное давление в состоянии покоя (в мм рт. ст. при поступлении в больницу)
  • хол: холесторальный уровень сыворотки в мг / дл
  • fbs: (уровень сахара в крови натощак ›120 мг / дл) (1 = верно; 0 = неверно)
  • restecg: результаты электрокардиографии в покое
  • талах: достигнутая максимальная частота сердечных сокращений
  • Пример: стенокардия, вызванная физической нагрузкой (1 = да; 0 = нет)
  • oldpeak: депрессия ST, вызванная упражнениями по сравнению с отдыхом
  • наклон: наклон пикового сегмента ST при упражнении
  • ca: количество крупных сосудов (0–3), окрашенных флурозопией
  • thal: 1 = нормально; 2 = исправленный дефект; 3 = обратимый дефект
  • цель: 1 = болезнь; 0 = нет болезни

Импорт библиотек

import numpy as np
import pandas as pd
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score

Чтение файла CSV

dataset = pd.read_csv(‘heart.csv’)
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,-1].values

Кодирование категориальных данных

Одно горячее кодирование - это процесс, с помощью которого категориальные переменные преобразуются в форму, которая может быть предоставлена ​​алгоритмам машинного обучения для более эффективного прогнозирования.

from sklearn.preprocessing import OneHotEncoder
#cp
oneHotEncoder = OneHotEncoder(categorical_features=[2], n_values='auto')
oneHotEncoder.fit(X)
X = oneHotEncoder.transform(X).toarray()
X = X[:, 1:]
#restecg
oneHotEncoder = OneHotEncoder(categorical_features=[8], n_values='auto')
oneHotEncoder.fit(X)
X = oneHotEncoder.transform(X).toarray()
X = X[:, 1:]
#slope
oneHotEncoder = OneHotEncoder(categorical_features=[13], n_values='auto')
oneHotEncoder.fit(X)
X = oneHotEncoder.transform(X).toarray()
X = X[:, 1:]
#ca
oneHotEncoder = OneHotEncoder(categorical_features=[15], n_values='auto')
oneHotEncoder.fit(X)
X = oneHotEncoder.transform(X).toarray()
X = X[:, 1:]
#thal
oneHotEncoder = OneHotEncoder(categorical_features=[19], n_values='auto')
oneHotEncoder.fit(X)
X = oneHotEncoder.transform(X).toarray()
X = X[:, 1:]
from sklearn.preprocessing import StandardScaler
scalerX = StandardScaler()
X = scalerX.fit_transform(X)

Разделение набора данных

from sklearn.model_selection import train_test_split
XTrain, XTest, yTrain, yTest = train_test_split(X, y, test_size=0.3, random_state=0)

Что такое классификация?

Классификация - это метод категоризации наших данных на желаемое и определенное количество классов, где мы можем присвоить метки каждому классу.

Теперь мы будем применять различные методы классификации, используя существующие библиотеки в Python.

Логистическая регрессия

Логистическая регрессия используется для описания данных и объяснения взаимосвязи между одной зависимой двоичной переменной и одной или несколькими номинальными, порядковыми, интервальными или пропорциональными независимыми переменными.

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print(“Logistic Regression :”)
print(“Accuracy = “, accuracy)
print(“Mean Squared Error:”,mse)
print(“R score:”,r)
print(“Mean Absolute Error:”,mae)

Классификатор дерева решений

Деревья решений - это непараметрический метод обучения с учителем, используемый для классификации и регрессии. Цель состоит в том, чтобы создать модель, которая предсказывает значение целевой переменной, изучая простые правила принятия решений, выведенные из характеристик данных.

from sklearn.tree import DecisionTreeClassifier as DT
classifier = DT(criterion='entropy', random_state=0)
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("Decision Tree Classifier :")
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)
print("Accuracy = ", accuracy)

Перцептрон

Perceptron - это алгоритм контролируемого обучения бинарных классификаторов. Двоичный классификатор - это функция, которая может решить, принадлежит ли вход, представленный вектором чисел, какому-либо определенному классу.

from sklearn.linear_model import Perceptron
classifier = Perceptron(tol=1e-3, random_state=0)
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("Perceptron :")
print("Accuracy = ", accuracy)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

K Ближайшие соседи

В распознавании образов алгоритм k-ближайших соседей (k-NN) - это непараметрический метод, используемый для классификации и регрессии. В обоих случаях входные данные состоят из k ближайших обучающих примеров в пространстве признаков.

from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=5, p=2, metric='minkowski')
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("K Nearest Neighbors :")
print("Accuracy = ", accuracy)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Машина опорных векторов

SVM - это управляемый алгоритм машинного обучения, который можно использовать для задач классификации или регрессии. Он использует технику, называемую трюком с ядром, для преобразования ваших данных, а затем на основе этих преобразований находит оптимальную границу между возможными выходами.

from sklearn.svm import SVC
classifier = SVC(kernel='linear',random_state=0)
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("Support Vector Machine :")
print("Accuracy = ", accuracy)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Гауссовский наивный байесовский

Гауссовский наивный байесовский алгоритм - это особый тип алгоритма NB. Он специально используется, когда функции имеют непрерывные значения. Также предполагается, что все функции подчиняются гауссовскому распределению, то есть нормальному распределению.

from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("Gaussian Naive Bayes :")
print("Accuracy = ", accuracy)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Классификатор случайного леса

Он состоит из большого количества отдельных деревьев решений, действующих как ансамбль. Каждое отдельное дерево в случайном лесу дает предсказание класса, и класс, набравший наибольшее количество голосов, становится предсказанием нашей модели.

from sklearn.ensemble import RandomForestClassifier as RF
classifier = RF(n_estimators=10, criterion='entropy', random_state=0)
classifier.fit(XTrain,yTrain)
yPred = classifier.predict(XTest)
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("Random Forest Classifier :")
print("Accuracy = ", accuracy)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Искусственная нейронная сеть

Искусственная нейронная сеть - это взаимосвязанная группа узлов, вдохновленная упрощением нейронов в мозге. Здесь каждый круговой узел представляет собой искусственный нейрон, а стрелка представляет собой соединение между выходом одного искусственного нейрона и входом другого.

from keras.models import Sequential
from keras.layers import Dense
#Initialising ANN
classifier = Sequential()
#Adding the first hidden layer or the input layer
classifier.add(Dense(activation='relu',
                     kernel_initializer='uniform',
                     input_dim=22,
                     units=12))
#Adding the second hidden layer
classifier.add(Dense(activation='relu',
                     kernel_initializer='uniform',
                     units=12))
#Adding the output layer
classifier.add(Dense(activation='sigmoid',
                     kernel_initializer='uniform',
                     units=1))
#Compiling the ANN
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
print(classifier.summary())
#Fitting the ANN
history = classifier.fit(XTrain, yTrain, batch_size=5, epochs=20, verbose=1)
from matplotlib import pyplot as plt
plt.plot(history.history['acc'],'green')
plt.plot(history.history['loss'],'red')
plt.title('Model Accuracy-Loss')
plt.xlabel('Epoch')
plt.legend(['Accuracy','Loss'])
plt.show()
#Predicting the Test set Results
yPred = classifier.predict(XTest)
yPred = (yPred>0.5) #Since output is probability
mse = mean_squared_error(yTest,yPred)
r = r2_score(yTest,yPred)
mae = mean_absolute_error(yTest,yPred)
accuracy = accuracy_score(yTest,yPred)
print("Artificial Neural Network Classifier :")
print("Accuracy = ", accuracy)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Вместо того, чтобы пробовать каждый алгоритм по отдельности, мы попробуем новый метод и отобразим его с помощью красивых таблиц.

from prettytable import PrettyTable
table = PrettyTable()
table.field_names = ["Model","Accuracy", "Mean Squared Error", "R² score","Mean Absolute Error"]
models = [
    LogisticRegression(),
    KNeighborsClassifier(n_neighbors=5, p=2, metric='minkowski'),
    SVC(kernel='linear',random_state=0),
    GaussianNB(),
    DT(criterion='entropy', random_state=0),
    RF(n_estimators=10, criterion='entropy', random_state=0),
    Perceptron(tol=1e-3, random_state=0)
]
for model in models:
    model.fit(XTrain, yTrain) 
    yPred = model.predict(XTest)
    accuracy = accuracy_score(yTest,yPred)
    mse = mean_squared_error(yTest,yPred)
    r = r2_score(yTest,yPred)
    mae = mean_absolute_error(yTest,yPred)
table.add_row([type(model).__name__, format(accuracy, '.3f'),format(mse, '.3f'),format(r, '.3f'),format(mae, '.3f')])
    
table.add_row(["Artificial Neural Network Classifier",0.954 ,0.045,0.817,0.045])
print(table)

ЗАКЛЮЧЕНИЕ

Из приведенных выше выходных данных мы видим, что RandomForestClassifier лучше всего подходит для нашего набора данных.

А если вы хотите получить весь код протестированных выше алгоритмов, вы можете найти его здесь :)

Автор блога:

Акшита Мехта

Github LinkedIn