Введение в sklearn, платформу машинного обучения

машинное обучение Python

Сегодня я дам вам краткое введение в sKlearn, Разделы следующие:

  1. Введение
  2. Базовый обзор
  3. Импорт данных и предварительная обработка данных примера реального боя
  4. Пример тренировочной модели для реального боя
  5. выбор модели
  6. поиск гиперпараметров
  7. Выбор функций
  8. сегментация данных
  9. Pineline
  10. резюме

Введение

Представленный вам сегодняscikit-learn.sklearnЯвляетсяPythonОчень мощная библиотека машинного обучения, предоставленная сторонними поставщиками, охватывает все аспекты от предварительной обработки данных до моделей обучения. используется в реальном боюscikit-learnЭто может значительно сэкономить нам время на написание кода и уменьшить объем нашего кода, чтобы у нас было больше энергии для анализа распределения данных, настройки модели и изменения гиперпараметров. (sklearn — это имя пакета)

Базовый обзор

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

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

  • fit(x,y) : Модель можно обучать, передавая данные и метки.Время обучения и настройки параметров связаны с размером набора данных и характеристиками самих данных.
  • score(x,y)Используется для оценки точности модели (диапазон 0–1). Однако из-за различных проблем стандарт для оценки качества модели не ограничивается простым показателем точности, но может также включать другие показатели, такие как показатель полноты или показатель точности, особенно для выборок с несбалансированными категориями, показатель точности не ограничивается Это хороший способ оценить плюсы и минусы модели, поэтому при оценке модели не дайте себя легко обмануть оценкой.
  • predict(x)Используется для прогнозирования данных, он принимает ввод и выводит предсказанные метки, а выходной формат представляет собой массив numpy. Обычно мы используем этот метод для возврата результата теста, который затем используется для оценки модели.

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

  • fit(x,y) : этот метод принимает ввод и метки, а также вычисляет, как данные должны быть преобразованы.
  • transform(x): В соответствии с вычисленным методом преобразования вернуть входные данныеxПреобразованный результат (без изменения x)
  • fit_transform(x,y) :После расчета метода преобразования данных методxПреобразование на месте.

Вышеупомянутое является лишь кратким изложениемsklearnнекоторые особенности функции.sklearnОсновное использование большинства функций, вероятно, одинаково. Но разные оценщики будут иметь свои собственные разные свойства, например случайные леса будут иметьFeature_importanceдля измерения важности функций, в то время как логистическая регрессияcoef_Хранить коэффициенты регрессииintercept_Затем сохраните перехват и так далее. А для машинного обучения качество модели определяется не только тем, какую модель вы выберете, но и во многом связано с настройками ваших гиперпараметров. Так что используйтеsklearnОбязательно ознакомьтесь с официальной документацией, когда захотите настроить гиперпараметры.

Импорт данных и предварительная обработка данных примера реального боя

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

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

from sklearn.datasets import load_iris
dataSet = load_iris()
data = dataSet['data'] # 数据
label = dataSet['target'] # 数据对应的标签
feature = dataSet['feature_names'] # 特征的名称
target = dataSet['target_names'] # 标签的名称
print(target)

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

import pandas as pdimport numpy as np
df = pd.DataFrame(np.column_stack((data,label)),columns = np.append(feature,'label'))
df.head()# 查看前五行数据 

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

df.isnull().sum(axis=0).sort_values(ascending=False)/float(len(df))# 检查缺失值比例 

sklearnизpreprocessingдоступныйImputer()Функция для работы с пропущенными значениями, которая предоставляет такие стратегии, как медиана, среднее значение и мода, для заполнения пропущенных значений. Однако обработка не обязательно использует заполнение для обработки пропущенных значений в разных случаях. Поэтому будьте осторожны при работе с пропущенными значениями. К счастью, в нашем наборе данных нет пропущенных значений, что экономит нам время при работе с пропущенными значениями. Следующим шагом является определение того, сбалансированы ли выборочные категории набора данных.

df['label'].value_counts() # 检查数据类别的比例 

К счастью, доля наших образцов классов оказалась1:1:1, если пропорция нашей выборки серьезно несбалансирована, нам может потребоваться внести некоторые коррективы в несбалансированную пропорцию, напримерповторная выборка,недостаточная выборкаи Т. Д. Набор данных теперь выглядит нормально, но мы все равно должны нормализовать данные перед обучением.

Перед обучением модели нам необходимо предварительно обработать данные.sklearnсерединаpreprocessingМодуль предоставляет множество классов для нормализации данных.

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

from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(data)

Например,нормализация z-показателя будетСобственные значения выборок преобразуются в одинаковую размерность, что обеспечивает сопоставимость между разными признаками. Выше мы используемz-scoreстандартизация,sklearnизpreprocessingВ России есть и другие методы стандартизации, и заинтересованные друзья могут ознакомиться с официальными документами.

Пример тренировочной модели для реального боя

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

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import ShuffleSplit
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
ss = ShuffleSplit(n_splits = 1,test_size= 0.2) # 按比例拆分数据,80%用作训练
for tr,te in ss.split(data,label):
    xr = data[tr]
    xe = data[te]
    yr = label[tr]
    ye = label[te]
    clf = LogisticRegression(solver = 'lbfgs',multi_class = 'multinomial') 
    clf.fit(xr,yr)
    predict = clf.predict(xe)
    print(classification_report(ye, predict)) 

Здесь наша логистическая регрессия использует метод мультиклассификации OVR,

OvR рассматривает множественную логистическую регрессию как бинарную логистическую регрессию. Конкретный метод заключается в том, чтобы каждый раз выбирать один класс в качестве положительного примера, а остальные классы - в качестве отрицательного примера, а затем выполнять бинарную логистическую регрессию для получения модели классификации первого класса. Наконец, получаются множественные модели бинарной регрессии. Результаты классификации получаются в соответствии с баллами каждой категории.

выбор модели

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

раздел данных

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

  • K-кратная перекрестная проверка:
    • KFold Обычная K-кратная перекрестная проверка
    • StratifiedKFold (гарантируется, что доля каждого класса равна)
  • Забудь об этом:
    • LeaveOneOut
    • LeavePOut (оставьте P для проверки, когда P = 1, он становится методом исключения)
  • Метод случайного деления:
    • ShuffleSplit (разделить набор данных после случайного перемешивания)
    • StratifiedShuffleSplit (после случайной перетасовки вернуться к стратифицированному делению, пропорция каждого разделенного класса соответствует исходной пропорции выборки)

Вышеупомянутые методы имеют те же параметры, за исключением метода исключения:

  • n_splits: установить количество делений
  • random_state: установить случайное начальное число

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

поиск гиперпараметров

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

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

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

model_seletionОн также предоставляет функции для автоматической настройки параметров, которые можно искать по решетке (GridSearchCV) Например.

from sklearn.model_selection import GridSearchCV
clf = LogisticRegression()
gs = GridSearchCV(clf, parameters)
gs.fit(data, label)
gs.best_params_ 

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

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

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

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

Pineline

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

from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
clf = LogisticRegression()
new_clf = Pipeline([('pca',pca),('clf',clf)]) 

Приведенный выше пакетный оценщик будет использоваться первым.PCAДанные были сведены к двум измерениям и аппроксимированы с помощью логистической регрессии.

резюме

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