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

Сначала импортируйте библиотеки и набор данных:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
url = "https://raw.githubusercontent.com/MateLabs/Public-Datasets/master/Datasets/diabetes.csv"
diabetes_df = pd.read_csv(url)
names = ["times_pregnant", "glucose_concentration", "blood_pressure", "skin_fold", "serum_insulin", "body_mass",
        "diabetes_pedigree", "age", "class"]
diabetes_df.columns = names
diabetes_df.head()

Первые строки набора данных:

Наш последний столбец «класс» будет вектором «y», мы обрабатываем этот столбец, преобразовывая «положительное» значение в 1 и «отрицательное» значение в 0.

diabetes_df['class'][diabetes_df['class'] == 'positive'] = 1
diabetes_df['class'][diabetes_df['class'] == 'negative'] = 0
diabetes_df.head()

Выглядит так:

Давайте посмотрим на описательную статистику:

print("Size: {}".format(diabetes_df.shape))
print(diabetes_df.describe())
diabetes_df.hist()
plt.show()

сравнение машинного обучения

Теперь, когда мы посмотрели наш набор данных, пришло время оценить алгоритмы ML.

Сначала мы делим наш набор данных на «X» и «y», разделяем на обучающий и тестовый наборы, а затем стандартизируем характеристики X, удаляя среднее и масштабируя до единичной дисперсии.

X = diabetes_df.iloc[:,0:8]
y = diabetes_df.iloc[:,8]
y = y.astype('int')
#Split into train and test set using sklearn model_selection
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=7)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Следующим шагом будет импорт библиотек и создание списка с нашими моделями.

from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))

Оценим работу оценщиков

results = []
names = []
for name, model in models:
    kfold = KFold(n_splits=10, random_state=seed)
    cv_results = cross_val_score(model, X_train, y_train, cv=kfold,          scoring=scoring)
    results.append(cv_results)
    names.append(name)
    print("{} {}({})"(name, cv_results.mean(), cv_results.std()))

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

cls = LogisticRegression(random_state=7)
cls.fit(X_train,y_train)
y_pred = cls.predict(X_test)

И на последнем этапе мы сравниваем наши прогнозы с правдой.

print(accuracy_score(y_test,y_pred))
print(confusion_matrix(y_test,y_pred))
print(classification_report(y_test,y_pred))

Мы получаем точность алгоритма логистической регрессии по нашим значениям. Соответствующие элементы или истинно положительные и ложноотрицательные являются правильнымипрогнозами.

Последние мысли

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

Этот пример был загружен на Github в блокноте Jupyter:

https://github.com/ramcesc/ml_compar