«Здоровье - это состояние полного физического, социального и психического благополучия, а не просто отсутствие болезней или недугов. Таким образом, здоровье - это уровень функциональной эффективности живых существ и общее состояние ума, тела и духа человека, что означает отсутствие болезней, травм и боли. Это ресурс повседневной жизни и позитивная концепция, подчеркивающая физические возможности ».
Крепкое здоровье - лучшее богатство !!!
В этой статье на 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 лучше всего подходит для нашего набора данных.
А если вы хотите получить весь код протестированных выше алгоритмов, вы можете найти его здесь :)
Автор блога:
Акшита Мехта