www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Рабочий процесс машинного обучения по данным о диабете: часть 02

Дата публикации Mar 5, 2018

Имидж Кредит -https://www.chino.io/blog/gdpr-digital-health-apps-compliance/

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

Рабочий процесс машинного обучения по данным о диабете: часть 01

«Машинное обучение в медицинских учреждениях может помочь значительно улучшить медицинскую диагностику».

towardsdatascience.com

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

Этап 5 - Проектирование объектов (Пересмотрено)

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

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

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

  1. Одномерный выбор объектов: Статистические тесты могут использоваться для выбора тех функций, которые наиболее тесно связаны с выходной переменной.
  2. Удаление рекурсивных функций: Рекурсивное удаление объектов (или RFE) работает путем рекурсивного удаления атрибутов и построения модели на основе тех атрибутов, которые остаются. Он использует точность модели, чтобы определить, какие атрибуты (и комбинация атрибутов) вносят наибольший вклад в прогнозирование целевого атрибута.
  3. Анализ главных компонентов: Анализ главных компонентов (или PCA) использует линейную алгебру для преобразования набора данных в сжатую форму. Обычно это называется техникой сокращения данных. Свойство PCA заключается в том, что вы можете выбрать количество измерений или основного компонента в преобразованном результате.
  4. Важность функцииДеревья решений в пакетах, такие как Случайный лес и Дополнительные деревья, могут использоваться для оценки важности функций.

В этом уроке мы будем использовать рекурсивное удаление функций в качестве метода выбора функций.

Сначала мы импортируем RFECV, который поставляется со встроенной функцией перекрестной проверки. Как и в модели классификатора, RFECV имеет метод fit (), который принимает функции и ответ / цель.

Логистическая регрессия - выбор характеристик

from sklearn.feature_selection import RFECVlogreg_model = LogisticRegression()rfecv = RFECV(estimator=logreg_model, step=1, cv=strat_k_fold, scoring='accuracy')
rfecv.fit(X, y)

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

plt.figure()
plt.title('Logistic Regression CV score vs No of Features')
plt.xlabel("Number of features selected")
plt.ylabel("Cross validation score (nb of correct classifications)")
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
plt.show()
Рис - Характеристика важности логистической регрессии

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

feature_importance = list(zip(feature_names, rfecv.support_))new_features = []for key,value in enumerate(feature_importance):
if(value[1]) == True:
new_features.append(value[0])

print(new_features)

[«Беременность», «Глюкоза», «ИМТ», «Диабетическая наследственная функция»]

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

# Calculate accuracy scores 
X_new = diabetes_mod[new_features]initial_score = cross_val_score(logreg_model, X, y, cv=strat_k_fold, scoring='accuracy').mean()
print("Initial accuracy : {} ".format(initial_score))fe_score = cross_val_score(logreg_model, X_new, y, cv=strat_k_fold, scoring='accuracy').mean()
print("Accuracy after Feature Selection : {} ".format(fe_score))

Начальная точность: 0.7764400711728514
Точность после выбора функции: 0.7805877119643279

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

Повышение градиента - выбор функций

Мы также можем проанализировать вторую лучшую модель, которая была у нас - классификатор Gradient Boost, чтобы увидеть, увеличивает ли процесс выбора признаков точность модели и будет ли она лучше, чем Логистическая регрессия после процесса.

Мы следуем той же процедуре, что и для логистической регрессии.

gb_model = GradientBoostingClassifier()gb_rfecv = RFECV(estimator=gb_model, step=1, cv=strat_k_fold, scoring='accuracy')
gb_rfecv.fit(X, y)plt.figure()
plt.title('Gradient Boost CV score vs No of Features')
plt.xlabel("Number of features selected")
plt.ylabel("Cross validation score (nb of correct classifications)")
plt.plot(range(1, len(gb_rfecv.grid_scores_) + 1), gb_rfecv.grid_scores_)
plt.show()
Рис - Характеристика важности Gradient Boost

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

feature_importance = list(zip(feature_names, gb_rfecv.support_))new_features = []for key,value in enumerate(feature_importance):
if(value[1]) == True:
new_features.append(value[0])

print(new_features)

['Глюкоза', 'BMI', 'DiabetesPedigreeFunction', 'Age']

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

X_new_gb = diabetes_mod[new_features]initial_score = cross_val_score(gb_model, X, y, cv=strat_k_fold, scoring='accuracy').mean()
print("Initial accuracy : {} ".format(initial_score))fe_score = cross_val_score(gb_model, X_new_gb, y, cv=strat_k_fold, scoring='accuracy').mean()
print("Accuracy after Feature Selection : {} ".format(fe_score))

Начальная точность: 0.764091206294081
Точность после выбора функции: 0.7723495080069458

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

тем не мениеЛогистическая регрессияявляется более точным, чем Gradient Boosting Поэтому мы будем использовать Логистическую регрессию для фазы настройки параметров.

Этап 6 - Настройка параметров модели

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

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

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

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

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

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

Сначала мы импортируем GridSearchCV.

from sklearn.model_selection import GridSearchCV

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

Документ о классе логистических регрессий можно найтиВот,

# Specify parameters
c_values = list(np.arange(1, 10))param_grid = [
{'C': c_values, 'penalty': ['l1'], 'solver' : ['liblinear'], 'multi_class' : ['ovr']}, {'C': c_values, 'penalty': ['l2'], 'solver' : ['liblinear', 'newton-cg', 'lbfgs'], 'multi_class' : ['ovr']}
]

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

grid = GridSearchCV(LogisticRegression(), param_grid, cv=strat_k_fold, scoring='accuracy')grid.fit(X_new, y)

После завершения обучения и оценки GridSearchCV предоставляет некоторые полезные атрибуты для поиска лучших параметров и наилучшей оценки.

print(grid.best_params_)
print(grid.best_estimator_)
Рис - Лучшие атрибуты логистической регрессии

Мы можем наблюдать, что лучшие гиперпараметры таковы.

{'C': 1, 'multi_class': 'ovr', 'penalty': 'l2', 'solver': 'liblinear'}

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

logreg_new = LogisticRegression(C=1, multi_class='ovr', penalty='l2', solver='liblinear')initial_score = cross_val_score(logreg_new, X_new, y, cv=strat_k_fold, scoring='accuracy').mean()
print("Final accuracy : {} ".format(initial_score))Final accuracy : 0.7805877119643279

Мы можем сделать вывод, что настройка гиперпараметров не повысила его точность. Возможно, гиперпараметры, которые мы выбрали, не были показательными. Однако вы можете попробовать добавить больше комбинаций параметров.

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

Нам удается достичь точности классификации 78,05%, что, можно сказать, неплохо.

Вывод

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

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

Теперь твоя очередь! Теперь вы сможете использовать эти знания, чтобы опробовать другие наборы данных.

Исходный код, который создал этот пост, можно найти ниже.

LahiruTjay / Machine-Learning-С-Python

Machine-Learning-With-Python - эти репозитории содержат различные примеры машинного обучения, выполненные с помощью Python.

github.com

Если у вас есть какие-либо проблемы или вопросы, касающиеся этой статьи, пожалуйста, не стесняйтесь оставить комментарий ниже или напишите мне по электронной почте: [email protected]

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map