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

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

В этом анализе наличие сердечно-сосудистых заболеваний прогнозируется с использованием машины опорных векторов (SVM), полиномиального наивного байеса, логистической регрессии (LR), дерева решений (DT) и случайного леса (RF), правил объединения ансамблей, т. Е. Средневзвешенное голосование и классификаторы ансамбля, т. Е. Bagging, Adaptive Boosting и Gradient Boosting.

Для анализа производительности были оценены такие параметры, как Accuracy, Precision, Recall и F1-score, и было проведено сравнительное исследование этих классификаторов.

Прежде чем мы углубимся в часть кодирования, давайте кратко обсудим популярные библиотеки Python, которые мы будем использовать повсюду.

Библиотеки Python

Библиотеки Python - это набор функций и методов, который позволяет нам выполнять множество действий без написания кода.

NumPy: NumPy - очень популярная библиотека Python для обработки больших многомерных массивов и матриц с помощью большого набора математических функций высокого уровня. Это очень полезно для фундаментальных научных вычислений в машинном обучении.

Pandas: Pandas - популярная библиотека Python для анализа данных. Pandas разработан специально для извлечения и подготовки данных.

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

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

Seaborn: Seaborn - это библиотека визуализации данных Python, основанная на matplotlib. Он предоставляет высокоуровневый интерфейс для рисования привлекательных и информативных статистических графиков.

train_test_split: он разделяет набор данных на обучающий набор и тестовый набор.

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

#import the libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split, StratifiedKFold, cross_val_score
from sklearn.pipeline import make_pipeline, Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals import joblib
from sklearn.metrics import make_scorer, f1_score, recall_score, precision_score
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
from sklearn.metrics import log_loss
import warnings
warnings.simplefilter(action = ‘ignore’, category= FutureWarning)
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import AdaBoostClassifier

Набор данных

Набор данных Heart Disease был взят из Kaggle. Эта база данных содержит 76 атрибутов, но все опубликованные эксперименты относятся к подмножеству из 14 из них. Всего в нем 303 строки и 14 столбцов, из которых 165 - сердечные заболевания.

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

Прочтите данные

#read the csv dataset
data = pd.read_csv(“file:/C:/…………………/heart.csv”, encoding=’ANSI’)
data.columns
data.head()
#Total number of rows and columns
data.shape

Построение графиков

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

  1. Линейный график
# Plot a line graph for Age V/s heart disease
plt.subplots(figsize =(8,5))
classifiers = [‘<=40’, ‘41–50’, ‘51–60’,’61 and Above’]
heart_disease = [13, 53, 64, 35]
no_heart_disease = [6, 23, 65, 44]
l1 = plt.plot(classifiers, heart_disease , color=’g’, marker=’o’, linestyle =’dashed’, markerfacecolor=’y’, markersize=10)
l2 = plt.plot(classifiers, no_heart_disease, color=’r’,marker=’o’, linestyle =’dashed’, markerfacecolor=’y’, markersize=10 )
plt.xlabel(‘Age’)
plt.ylabel(‘Number of patients’)
plt.title(‘Age V/s Heart disease’)
plt.legend((l1[0], l2[0]), (‘heart_disease’, ‘no_heart_disease’))
plt.show()

2. Гистограмма

Количество мужчин и женщин в наборе данных составляет 207 и 96 соответственно. Из 207 мужчин 93 страдают сердечными заболеваниями, а из 96 женщин 72 страдают сердечными заболеваниями.

# Plot a bar graph for Gender V/s target
N = 2
ind = np.arange(N)
width = 0.1
fig, ax = plt.subplots(figsize =(8,4))
heart_disease = [93, 72]
rects1 = ax.bar(ind, heart_disease, width, color=’g’)
no_heart_disease = [114, 24]
rects2 = ax.bar(ind+width, no_heart_disease, width, color=’y’)
ax.set_ylabel(‘Scores’)
ax.set_title(‘Gender V/s target’)
ax.set_xticks(ind)
ax.set_xticklabels((‘Male’,’Female’))
ax.legend((rects1[0], rects2[0]), (‘heart disease’, ‘no heart disease’))
plt.show()

3. Круговая диаграмма

Следующие круговые диаграммы представляют состояние талассемии в крови пациентов (нормальный, фиксированный дефект и обратимый дефект).

#Pie charts for thal:Thalassemia
# Having heart disease
labels= ‘Normal’, ‘Fixed defect’, ‘Reversible defect’
sizes=[6, 130, 28]
colors=[‘red’, ‘orange’, ‘green’]
plt.pie(sizes, labels=labels, colors=colors, autopct=’%.1f%%’, shadow=True, startangle=140)
plt.axis(‘equal’)
plt.title(‘Thalassemia blood disorder status of patients having heart disease’)
plt.show()
# Not having heart disease
labels= ‘Normal’, ‘Fixed defect’, ‘Reversible defect’
sizes=[12, 36, 89]
colors=[‘red’, ‘orange’, ‘green’]
plt.pie(sizes, labels=labels, colors=colors, autopct=’%.1f%%’, shadow=True, startangle=140)
plt.axis(‘equal’)
plt.title(‘Thalassemia blood disorder status of patients who do not have heart disease’)
plt.show()

Выбор функций

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

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

## Feature selection
#get correlation of each feature in dataset
corrmat = data.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(13,13))
#plot heat map
g=sns.heatmap(data[top_corr_features].corr(),annot=True,cmap=”RdYlGn”)

Cp, thalach, exang, oldpeak, ca и thal были сильно коррелированными функциями с целевой переменной, и мы удалили менее важные функции.

data=data.drop([‘sex’, ‘fbs’, ‘restecg’, ‘slope’, ‘chol’, ‘age’, ‘trestbps’], axis=1)
target=data[‘target’]
data = data.drop([‘target’],axis=1)
data.head()

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

Мы разделили набор данных в соотношении 70:30, чтобы создать подмножества для обучения и тестирования.

# We split the data into training and testing set:
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=10)

БАЗОВЫЕ УЧАЩИЕСЯ

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

## Base Learners
clfs = []
kfolds = StratifiedKFold(n_splits=5, shuffle=True, random_state=1)
np.random.seed(1)
  1. Машина опорных векторов (SVM)
pipeline_svm = make_pipeline(SVC(probability=True, kernel=”linear”, class_weight=”balanced”))
grid_svm = GridSearchCV(pipeline_svm,
 param_grid = {‘svc__C’: [0.01, 0.1, 1]}, 
 cv = kfolds,
 verbose=1, 
 n_jobs=-1)
grid_svm.fit(x_train, y_train)
grid_svm.score(x_test, y_test)
print(“\nBest Model: %f using %s” % (grid_svm.best_score_, grid_svm.best_params_))
print(‘\n’)
print(‘SVM LogLoss {score}’.format(score=log_loss(y_test, grid_svm.predict_proba(x_test))))
clfs.append(grid_svm)
# save best model to current working directory
joblib.dump(grid_svm, “heart_disease.pkl”)

# загружаем из файла и прогнозируем, используя лучшие конфигурации, найденные на шаге CV

model_grid_svm = joblib.load(“heart_disease.pkl” )

# получить прогнозы на основе лучшей модели, приведенной выше

y_preds = model_grid_svm.predict(x_test)
print(‘SVM accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка точности SVM: 0,802197

2. Полиномиальный наивный Байес

classifierNB=MultinomialNB()
classifierNB.fit(x_train,y_train)
classifierNB.score(x_test, y_test)
print(‘MultinomialNB LogLoss {score}’.format(score=log_loss(y_test, classifierNB.predict_proba(x_test))))
clfs.append(classifierNB)

# сохранить лучшую модель в текущий рабочий каталог

joblib.dump(classifierNB, “heart_disease.pkl”)

# загружаем из файла и прогнозируем, используя лучшие конфигурации, найденные на шаге CV

model_classifierNB = joblib.load(“heart_disease.pkl” )

# получить прогнозы на основе лучшей модели, приведенной выше

y_preds = model_classifierNB.predict(x_test)
print(‘MultinomialNB accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка точности MultinomialNB: 0,769230

3. Логистическая регрессия (LR)

classifierLR=LogisticRegression()
classifierLR.fit(x_train,y_train)
classifierLR.score(x_test, y_test)
print(‘LogisticRegression LogLoss {score}’.format(score=log_loss(y_test, classifierLR.predict_proba(x_test))))
clfs.append(classifierLR)

# сохранить лучшую модель в текущий рабочий каталог

joblib.dump(classifierLR, “heart_disease.pkl”)
# load from file and predict using the best configs found in the CV step
model_classifierLR = joblib.load(“heart_disease.pkl” )

# получить прогнозы на основе лучшей модели, приведенной выше

y_preds = model_classifierLR.predict(x_test)
print(‘Logistic Regression accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка точности логистической регрессии: 0,802197

4. Дерево решений (DT)

classifierDT=DecisionTreeClassifier(criterion=”gini”, random_state=50, max_depth=3, min_samples_leaf=5)
classifierDT.fit(x_train,y_train)
classifierDT.score(x_test, y_test)
print(‘Decision Tree LogLoss {score}’.format(score=log_loss(y_test, classifierDT.predict_proba(x_test))))
clfs.append(classifierDT)
# save best model to current working directory
joblib.dump(classifierDT, “heart_disease.pkl”)
# load from file and predict using the best configs found in the CV step
model_classifierDT = joblib.load(“heart_disease.pkl” )
# get predictions from best model above
y_preds = model_classifierDT.predict(x_test)
print(‘Decision Tree accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка точности дерева решений: 0,758241

5. Случайный лес (РФ)

Случайный лес - один из самых популярных и мощных алгоритмов машинного обучения. Это разновидность алгоритма машинного обучения E nsemble, который называется Bootstrap Aggregation или bagging.

classifierRF=RandomForestClassifier()
classifierRF.fit(x_train,y_train)
classifierRF.score(x_test, y_test)
print(‘RandomForest LogLoss {score}’.format(score=log_loss(y_test, classifierRF.predict_proba(x_test))))
clfs.append(classifierRF)
# save best model to current working directory
joblib.dump(classifierRF, “heart_disease.pkl”)
# load from file and predict using the best configs found in the CV step
model_classifierRF = joblib.load(“heart_disease.pkl” )
# get predictions from best model above
y_preds = model_classifierRF.predict(x_test)
print(‘Random Forest accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка точности случайного леса: 0,769230

Точность базовых учащихся

print(‘Accuracy of svm: {}’.format(grid_svm.score(x_test, y_test)))
print(‘\n’)
print(‘Accuracy of naive bayes: {}’.format(classifierNB.score(x_test, y_test)))
print(‘\n’)
print(‘Accuracy of logistic regression: {}’.format(classifierLR.score(x_test, y_test)))
print(‘\n’)
print(‘Accuracy of decision tree: {}’.format(classifierDT.score(x_test, y_test)))
print(‘\n’)
print(‘Accuracy of random forest: {}’.format(classifierRF.score(x_test, y_test)))

АНСАМБЛЬНОЕ ОБУЧЕНИЕ

Ансамблевое обучение сочетает в себе разнообразный набор индивидуальных моделей или классификаторов, чтобы улучшить стабильность и предсказательную силу модели.

Правила комбинирования ансамблей

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

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

# Ensemble Majority Voting Classifier
from sklearn.ensemble import VotingClassifier
#create a dictionary of our models
estimators=[(‘svm’, grid_svm), (‘nb’, classifierNB), (‘lr’, classifierLR), (‘dt’, classifierDT),(‘rf’, classifierRF)]
#create our voting classifier, inputting our models
majority_voting = VotingClassifier(estimators, voting=’hard’)
#fit model to training data
majority_voting.fit(x_train, y_train)
#test our model on the test data
majority_voting.score(x_test, y_test)
# save best model to current working directory
joblib.dump(majority_voting, “heart_disease.pkl”)
# load from file and predict using the best configs found in the CV step
model_max_v = joblib.load(“heart_disease.pkl” )
# get predictions from best model above
y_preds = model_max_v.predict(x_test)
print(‘majority_voting_accuracy: ‘,majority_voting.score(x_test, y_test))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Majority_voting_accuracy: 0.802197

2. Средневзвешенное голосование. Всем классификаторам присваиваются разные веса, определяющие важность каждого классификатора для прогнозирования.

#Ensemble Weighted average classifier
#finding the optimum weights
from scipy.optimize import minimize
predictions = []
for clff in clfs:
 predictions.append(clff.predict_proba(x_test))
def log_loss_func(weights):
 final_prediction = 0
 for weight, prediction in zip(weights, predictions):
 final_prediction += weight*prediction
return log_loss(y_test, final_prediction)
 
#the algorithms need a starting value, right not we chose 0.5 for all weights
#its better to choose many random starting points and run minimize a few times
starting_values = [0.5]*len(predictions)
#adding constraints and a different solver as suggested by user 16universe
cons = ({‘type’:’eq’,’fun’:lambda w: 1-sum(w)})

#our weights are bound between 0 and 1
bounds = [(0,1)]*len(predictions)
res = minimize(log_loss_func, starting_values, method=’SLSQP’, bounds=bounds, constraints=cons)
print(‘ensamble score: {best_score}’.format(best_score=res[‘fun’]))
print(‘Best Weights: {weights}’.format(weights=res[‘x’]))
weighted_avg = VotingClassifier(estimators, voting=’soft’,weights=res[‘x’]).fit(x_train, y_train)
print(‘The accuracy weighted average classifier is :’, weighted_avg.score(x_test,y_test))
# save best model to current working directory
joblib.dump(weighted_avg, “heart_disease.pkl”)
# load from file and predict using the best configs found in the CV step
model_w_avg = joblib.load(“heart_disease.pkl” )
# get predictions from best model above
y_preds = model_w_avg.predict(x_test)
print(‘weighted_average_accuracy: ‘,weighted_avg.score(x_test, y_test))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

weighted_average_accuracy: 0,824175

Классификаторы ансамбля

  1. Бэггинг. Бэггинг или бутстрап-агрегирование создает несколько подмножеств данных из обучающей выборки, выбранных случайным образом с заменой. Каждый набор данных подмножества используется для обучения их деревьев решений. В результате мы получаем ансамбль различных моделей. Используется среднее всех прогнозов из разных деревьев, что более надежно, чем классификатор с одним деревом решений.

# Упаковка

classifierBa= BaggingClassifier(max_samples=0.5, max_features=1.0, n_estimators=50)
classifierBa.fit(x_train,y_train)
classifierBa.score(x_test, y_test)

# сохранить лучшую модель в текущий рабочий каталог

joblib.dump(classifierBa, “heart_disease.pkl”)

# загружаем из файла и прогнозируем, используя лучшие конфигурации, найденные на шаге CV

model_bagging = joblib.load(“heart_disease.pkl” )

# получить прогнозы на основе лучшей модели, приведенной выше

y_preds = model_bagging.predict(x_test)
print(‘bagging_accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

оценка bagging_accuracy: 0,813186

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

· Адаптивное ускорение (AdaBoost)

classifierAdaBoost= AdaBoostClassifier(n_estimators=500)
classifierAdaBoost.fit(x_train,y_train)
classifierAdaBoost.score(x_test, y_test)

# сохранить лучшую модель в текущий рабочий каталог

joblib.dump(classifierAdaBoost, “heart_disease.pkl”)

# загружаем из файла и прогнозируем, используя лучшие конфигурации, найденные на шаге CV

model_Ada_boost = joblib.load(“heart_disease.pkl” )

# получить прогнозы на основе лучшей модели, приведенной выше

y_preds = model_Ada_boost.predict(x_test)
print(‘Ada_boost_accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка Ada_boost_accuracy: 0,736263

· Повышение градиента

from sklearn.ensemble import GradientBoostingClassifier
classifierGBo= GradientBoostingClassifier(n_estimators=500, learning_rate=1.0, max_depth=1)
classifierGBo.fit(x_train,y_train)
classifierGBo.score(x_test, y_test)

# сохранить лучшую модель в текущий рабочий каталог

joblib.dump(classifierGBo, “heart_disease.pkl”)

# загружаем из файла и прогнозируем, используя лучшие конфигурации, найденные на шаге CV

model_Gradient_boosting = joblib.load(“heart_disease.pkl” )

# получить прогнозы на основе лучшей модели, приведенной выше

y_preds = model_Gradient_boosting.predict(x_test)
print(‘Gradient_boosting_accuracy score: ‘,accuracy_score(y_test, y_preds))
print(‘\n’)
import pylab as plt
labels=[0,1]
cmx=confusion_matrix(y_test,y_preds, labels)
print(cmx)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cmx)
plt.title(‘Confusion matrix of the classifier’)
fig.colorbar(cax)
ax.set_xticklabels([‘’] + labels)
ax.set_yticklabels([‘’] + labels)
plt.xlabel(‘Predicted’)
plt.ylabel(‘Actual’)
plt.show()
print(‘\n’)
print(classification_report(y_test, y_preds))

Оценка Gradient_boosting_accuracy: 0,813186

Точность методов комбинирования ансамблей и классификаторов ансамблей

print(‘\n’)
print(‘Majority Voting accuracy score: ‘,majority_voting.score(x_test, y_test))
print(‘Weighted Average accuracy score: ‘,weighted_avg.score(x_test, y_test))
print(‘Bagging_accuracy score: ‘,classifierBa.score(x_test, y_test))
print(‘Ada_boost_accuracy score: ‘,classifierAdaBoost.score(x_test, y_test))
print(‘Gradient_boosting_accuracy score: ‘,classifierGBo.score(x_test, y_test))

Заключение

В этой работе делается попытка предсказать наличие сердечных заболеваний с использованием базовых учащихся, правил комбинирования ансамбля и классификаторов ансамбля. Было отмечено, что точность средневзвешенного классификатора (82,417%) была самой высокой.

Примечание. Весь набор данных и код Python можно загрузить по адресу: https://github.com/Harshita9511/Heart-Disease-Prediction