Разное

Scikit learn библиотека: Введение в Scikit-learn

Содержание

Введение в Scikit-learn

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

Для своей работы, scikit-learn использует следующие популярные библиотеки:

  • NumPy: математические операциии и операции над тензорами
  • SciPy: научно-технические вычисления
  • Matplotlib: визуализация данных
  • IPython: интерактивная консоль для Python
  • SymPy: символьная математика
  • Pandas: обработка, манипуляции и анализ данных

Что содержит Scikit-learn

В задачи библиотеки не входит загрузка, обработка, манипуляция данными и их визуализация. С этими задачами отлично справляются библиотеки Pandas и NumPy. Scikit-learn специализируется на алгоритмах машинного обучения для решения задач обучения с учителем: классификации (предсказание признака, множество допустимых значений которого ограничено) и регрессии (предсказание признака с вещественными значениями), а также для задач обучения без учителя: кластеризации (разбиение данных по классам, которые модель определит сама), понижения размерности (представление данных в пространстве меньшей размерности с минимальными потерями полезной информации) и детектирования аномалий.

Библиотека реализует следующие основные методы:

  • Линейные: модели, задача которых построить разделяющую (для классификации) или аппроксимирующую (для регрессии) гиперплоскость.
  • Метрические: модели, которые вычисляют расстояние по одной из метрик между объектами выборки, и принимают решения в зависимости от этого расстояния (K ближайших соседей).
  • Деревья решений: обучение моделей, базирующихся на множестве условий, оптимально выбранных для решения задачи.
  • Ансамблевые методы: методы, основанные на деревьях решений, которые комбинируют мощь множества деревьев, и таким образом повышают их качество работы, а также позволяют производить отбор признаков (бустинг, бэггинг, случайный лес, мажоритарное голосование).
  • Нейронные сети: комплексный нелинейный метод для задач регрессии и классификации.
  • SVM: нелинейный метод, который обучается определять границы принятия решений.
  • Наивный Байес: прямое вероятностное моделирование для задач классификации.
  • PCA: линейный метод понижения размерности и отбора признаков
  • t-SNE: нелинейный метод понижения размерности.
  • K-средних: самый распространенный метод для кластеризации, требущий на вход число кластеров, по которым должны быть распределены данные.
  • Кросс-валидация: метод, при котором для обучения используется весь датасет (в отличие от разбиения на выборки train/test), однако обучение происходит многократно, и в качестве валидационной выборки на каждом шаге выступают разные части датасета. Итоговый результат является усреднением полученных результатов.
  • Grid Search: метод для нахождения оптимальных гиперпараметров модели путем построения сетки из значений гиперпараметров и последовательного обучения моделей со всеми возможными комбинациями гиперпараметров из сетки.

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

Пример применения

Чтобы дать вам представление о том, как легко обучать и тестировать модель ML с помощью Scikit-Learn, вот пример того, как это сделать для классификатора дерева решений!

Деревья решений для классификации и регрессии очень просты в использовании в Scikit-Learn. Сначала мы загрузим наш датасет, который фактически встроен в библиотеку. Затем мы инициализируем наше дерево решений для классификации. Обучение модели — это просто одна строчка .fit(X, Y), где X — обучающая выборка в формате массива NumPy, а Y — массив целевых значений, также в формате массива NumPy.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
# Load data
iris = load_iris()

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

plt.figure(figsize=((20,13)))
clf = DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
plot_tree(clf, 
          filled=True, 
          feature_names=iris.feature_names, 
          class_names=iris.target_names, 
          rounded=True)
plt.show()

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

Создание модели обучения в Scikit-learn: библиотека машинного обучения Python

Предварительное условие: Начало работы с машинным обучением
scikit-learn — это библиотека Python с открытым исходным кодом, которая реализует ряд алгоритмов машинного обучения, предварительной обработки, перекрестной проверки и визуализации с использованием унифицированного интерфейса.

Важные особенности scikit-learn:

  • Простые и эффективные инструменты для интеллектуального анализа данных. Он включает в себя различные алгоритмы классификации, регрессии и кластеризации, включая машины опорных векторов, случайные леса, повышение градиента, k-средних и т. Д.
  • Доступно для всех и многоразового использования в различных контекстах.
  • Построен на основе NumPy, SciPy и matplotlib.
  • Открытый исходный код, коммерчески доступный — лицензия BSD.

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

Установка:

Scikit-Learn требует:

  • NumPy
  • SciPy как его зависимости.

Перед установкой scikit-learn убедитесь, что у вас установлены NumPy и SciPy. Если у вас есть работающая установка NumPy и SciPy, самый простой способ установить scikit-learn — это использовать pip:

pip install -U scikit-learn

Давайте начнем с процесса моделирования сейчас.

Шаг 1: Загрузите набор данных

Набор данных — это не что иное, как набор данных. Набор данных обычно состоит из двух основных компонентов:

  • Особенности : (также известные как предикторы, входные данные или атрибуты), они являются просто переменными наших данных. Они могут быть более одного и, следовательно, представлены матрицей объектов («X» — это общее обозначение для представления матрицы объектов). Список всех имен элементов называется именами элементов .
  • Ответ : (также известный как цель, метка или вывод) Это выходная переменная, зависящая от переменных объекта. У нас обычно есть один столбец ответа, и он представлен вектором ответа («y» — это обычное обозначение для представления вектора ответа). Все возможные значения, взятые вектором ответа, называются целевыми именами .

Загрузка примерного набора данных: scikit-learn поставляется с несколькими примерами наборов данных, такими как наборы данных радужной оболочки и цифр для классификации и набор цен на жилье в Бостоне для регрессии.
Ниже приведен пример того, как можно загрузить примерный набор данных:

from sklearn.datasets import load_iris

iris = load_iris()

  

X = iris.data

y = iris.target

  

feature_names = iris.feature_names

target_names = iris.target_names

  

print("Feature names:", feature_names)

print("Target names:", target_names)

  

print("\nType of X is:", type(X))

  

print("\nFirst 5 rows of X:\n", X[:5])

Выход:

Feature names: ['sepal length (cm)','sepal width (cm)',
                'petal length (cm)','petal width (cm)']
Target names: ['setosa' 'versicolor' 'virginica']

Type of X is: 

First 5 rows of X:
 [[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]
 [ 5.   3.6  1.4  0.2]]

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

Чтобы установить панд, используйте следующую команду pip:

pip install pandas

В пандах важными типами данных являются:

Серия : Серия — это одномерный помеченный массив, способный хранить данные любого типа.

DataFrame : это двумерная помеченная структура данных со столбцами потенциально разных типов. Вы можете думать об этом как о электронной таблице или таблице SQL, или как о множестве объектов Series. Как правило, это наиболее часто используемый объект панд.

Примечание. Файл CSV, использованный в приведенном ниже примере, можно загрузить здесь: weather.csv

import pandas as pd

  

data = pd.read_csv('weather.csv')

  

print("Shape:", data.shape)

  

print("\nFeatures:", data.columns)

  

X = data[data.columns[:-1]]

y = data[data.columns[-1]]

  

print("\nFeature matrix:\n", X.head())

  

print("\nResponse vector:\n", y.head())

Выход:

Shape: (14, 5)

Features: Index([u'Outlook', u'Temperature', u'Humidity', 
                u'Windy', u'Play'], dtype='object')

Feature matrix:
     Outlook Temperature Humidity  Windy
0  overcast         hot     high  False
1  overcast        cool   normal   True
2  overcast        mild     high   True
3  overcast         hot   normal  False
4     rainy        mild     high  False

Response vector:
0    yes
1    yes
2    yes
3    yes
4    yes
Name: Play, dtype: object

Шаг 2: Разделение набора данных

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

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

Лучший вариант — разделить наши данные на две части: первая — для обучения модели машинного обучения, а вторая — для проверки нашей модели.
Подвести итоги:

  • Разделите набор данных на две части: тренировочный набор и набор для тестирования.
  • Тренируйте модель на тренировочном наборе.
  • Протестируйте модель на тестовом наборе и оцените, насколько хорошо наша модель справилась.

Преимущества поезда / тестового сплита:

  • Модель может быть обучена и протестирована на данных, отличных от тех, которые использовались для обучения.
  • Значения отклика известны для тестового набора данных, поэтому прогнозы можно оценить
  • Точность тестирования — лучшая оценка, чем точность обучения производительности вне выборки.

Рассмотрим пример ниже:

from sklearn.datasets import load_iris

iris = load_iris()

  

X = iris.data

y = iris.target

  

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)

  

print(X_train.shape)

print(X_test.shape)

  

print(y_train.shape)

print(y_test.shape)

Выход:

(90L, 4L)
(60L, 4L)
(90L,)
(60L,)

Функция train_test_split принимает несколько аргументов, которые описаны ниже:

  • X, y : это матрица признаков и вектор ответа, которые необходимо разделить.
  • test_size : это отношение тестовых данных к заданным данным. Например, установка test_size = 0,4 для 150 строк X приводит к получению тестовых данных размером 150 x 0,4 = 60 строк.
  • random_state : если вы используете random_state = some_number, то вы можете гарантировать, что ваше разделение будет всегда одинаковым. Это полезно, если вам нужны воспроизводимые результаты, например, при тестировании на согласованность в документации (чтобы все могли видеть одинаковые цифры).

Шаг 3: Обучение модели

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

В приведенном ниже примере используется классификатор KNN (K ближайших соседей) .

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

Теперь рассмотрим пример ниже:

from sklearn.datasets import load_iris

iris = load_iris()

  

X = iris.data

y = iris.target

  

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)

  

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=3)

knn.fit(X_train, y_train)

  

y_pred = knn.predict(X_test)

  

from sklearn import metrics

print("kNN model accuracy:", metrics.accuracy_score(y_test, y_pred))

  

sample = [[3, 5, 4, 2], [2, 3, 5, 4]]

preds = knn.predict(sample)

pred_species = [iris.target_names[p] for p in preds]

print("Predictions:", pred_species)

  

from sklearn.externals import joblib

joblib.dump(knn, 'iris_knn.pkl')

Выход:

kNN model accuracy: 0.983333333333
Predictions: ['versicolor', 'virginica']

Важные моменты, на которые следует обратить внимание из приведенного выше кода:

  • Мы создаем объект классификатора knn, используя:
    knn = KNeighborsClassifier(n_neighbors=3)
    
  • Классификатор обучается с использованием данных X_train. Процесс называется подходящим . Мы передаем матрицу признаков и соответствующий вектор ответа.
    knn.fit(X_train, y_train)
    
  • Теперь нам нужно проверить наш классификатор на данных X_test. Для этого используется метод knn.predict . Возвращает предсказанный вектор ответа, y_pred .
    y_pred = knn.predict(X_test)
    
  • Теперь мы заинтересованы в поиске точности нашей модели, сравнивая y_test и y_pred . Это делается с помощью метода метрик модуля precision_score :
    print(metrics.accuracy_score(y_test, y_pred))
    
  • Рассмотрим случай, когда вы хотите, чтобы ваша модель делала прогноз на основе выборочных данных. Затем образец ввода может быть просто передан так же, как мы передаем любую матрицу объектов.
    sample = [[3, 5, 4, 2], [2, 3, 5, 4]]
    preds = knn.predict(sample)
    
  • Если вы не заинтересованы в обучении вашего классификатора снова и снова и используете предварительно обученный классификатор, можно сохранить его классификатор с помощью joblib . Все, что вам нужно сделать, это:
    joblib.dump(knn, 'iris_knn.pkl')
    
  • Если вы хотите загрузить уже сохраненный классификатор, используйте следующий метод:
    knn = joblib.load('iris_knn.pkl')

По мере приближения к концу этой статьи, вот некоторые преимущества использования scikit-learn над некоторыми другими библиотеками машинного обучения (например, библиотеками R):

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

Ссылки:

Эта статья предоставлена Нихилом Кумаром . Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя contrib.geeksforgeeks.org, или отправить свою статью на электронный адрес [email protected]. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Рекомендуемые посты:

Создание модели обучения в Scikit-learn: библиотека машинного обучения Python

0.00 (0%) 0 votes

scikit-learn — Начало работы с scikit-learn

замечания

scikit-learn — универсальная библиотека с открытым исходным кодом для анализа данных, написанная на python. Он основан на других библиотеках python: NumPy, SciPy и matplotlib

scikit-learn содержит ряд реализаций для разных популярных алгоритмов машинного обучения.

Установка scikit-learn

Текущая стабильная версия scikit-learn требует :

  • Python (> = 2.6 или> = 3.3),
  • NumPy (> = 1,6,1),
  • SciPy (> = 0,9).

Для большинства pip установки python менеджер пакетов может установить python и все его зависимости:

pip install scikit-learn
 

Однако для Linux-систем рекомендуется использовать диспетчер пакетов conda , чтобы избежать возможных процессов сборки

conda install scikit-learn
 

Чтобы проверить, что у вас есть scikit-learn , выполните в оболочке:

python -c 'import sklearn; print(sklearn.__version__)'
 

Установка Windows и Mac OSX:

Canopy и Anaconda поставляют новую версию scikit-learn в дополнение к большому набору научной библиотеки python для Windows, Mac OSX (также актуальной для Linux).

Создание трубопроводов

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

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

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
 

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

# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
 

Интерфейсы и условные обозначения:

Различные операции с данными выполняются с использованием специальных классов.

Большинство классов относятся к одной из следующих групп:

  • алгоритмы классификации (полученные из sklearn.base.ClassifierMixin ) для решения задач классификации
  • регрессионные алгоритмы (полученные от sklearn.base.RegressorMixin ) для решения проблемы восстановления непрерывных переменных (проблема регрессии)
  • преобразование данных (полученное из sklearn.base.TransformerMixin ), которое препроцессор данных

Данные хранятся в numpy.array s (но другие pandas.DataFrame объекты, такие как pandas.DataFrame s, принимаются, если они конвертируются в numpy.array s)

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

import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)

Output:
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
 

В sklearn выше наборе данных sklearn содержит 5 объектов, каждый из которых описывается двумя функциями.

Примеры наборов данных

Для удобства тестирования sklearn предоставляет некоторые встроенные наборы данных в модуле sklearn.datasets . Например, давайте загрузим набор данных диафрагмы Fisher:

import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
 

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

Нам интересны данные и классы, которые хранятся в data и target полях. По соглашению они обозначаются как X и y

X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
 
numpy.unique(y)
array([0, 1, 2])
 

Формы X и y говорят, что есть 150 образцов с четырьмя функциями. Каждый образец относится к одному из следующих классов: 0, 1 или 2.

Теперь X и y можно использовать для обучения классификатора, вызывая метод fit() классификатора.


Вот полный список наборов данных, предоставляемых модулем sklearn.datasets с их размером и предполагаемым использованием:

Загрузите Описание Размер использование
load_boston() Набор данных о ценах на жилье в Бостоне 506 регрессия
load_breast_cancer() Рак молочной железы Висконсин 569 классификация (двоичная)
load_diabetes() Набор данных диабета 442 регрессия
load_digits(n_class) Цифры данных 1797 классификация
load_iris() Набор данных Iris 150 классификация (многоклассовый)
load_linnerud() Набор данных Linnerud 20 многомерная регрессия

Обратите внимание, что (источник: http://scikit-learn.org/stable/datasets/) :

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

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

  • load_mlcomp для загрузки примерных наборов данных из репозитория mlcomp.org (обратите внимание, что наборы данных необходимо загрузить до этого). Вот пример использования.
  • fetch_lfw_pairs и fetch_lfw_people для загрузки набора данных с маркированными лицами в Wild (LFW) из http://vis-www.cs.umass.edu/lfw/ , которые используются для проверки лица (соответственно распознавания лиц). Этот набор данных больше 200 МБ. Вот пример использования.

Обучить классификатор с перекрестной проверкой

Использование набора диафрагмы:

import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
 

Данные разделяются на поезда и тестовые наборы. Для этого мы используем train_test_split утилиты train_test_split для разделения как X и y (данных и целевых векторов) случайным образом с опцией train_size=0.75 (учебные наборы содержат 75% данных).

Учебные наборы данных подаются в классификатор k-ближайших соседей . Метод fit классификатора будет соответствовать модели данным.

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75) 
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
 

Наконец, предсказание качества тестового образца:

clf.score(X_test, y_test) # Output: 0.94736842105263153
 

Используя одну пару поездов и тестовых наборов, мы можем получить предвзятую оценку качества классификатора из-за произвольного выбора разделения данных. Используя кросс-валидацию, мы можем поместить классификатор на разные поезда / тестовые подмножества данных и составить среднее значение по всем результатам точности. Функция cross_val_score классификатор входным данным с использованием кросс-валидации. Он может принимать в качестве входного количества различных разделов (сгибов), которые будут использоваться (5 в приведенном ниже примере).

from sklearn.cross_validation import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
# Output: array([ 0.96666667,  0.96666667,  0.93333333,  0.96666667,  1.        ])
print "Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() / 2)
# Output: Accuracy: 0.97 (+/- 0.03)
 

Введение в scikit-learn

Если вы используете Python и хотите найти надежную и удобную библиотеку для применения различных алгоритмов машинного обучения в своей системе, то однозначно стоит взглянуть на scikit-learn. В данном посте будет представлен краткий обзор библиотеки scikit-learn и приведены ссылки на полезные ресурсы для дальнейшего изучения scikit-learn.

Как появилась библиотека scikit-learn?

David Cournapeau изначально разработал библиотеку scikit-learn в рамках проекта Google Summer of Code в 2007 году. Позднее Matthieu Brucher присоединился к проекту и использовал scikit-learn в своей дипломной работе. В 2010 году INRIA подключилась к работе над библиотекой и первая версия (v0.1 beta) была выпущена в конце января 2010.

На текущий момент в проекте задействовано более 30 активных участников и имеется финансовая поддержка от INRIA, Google, Tinyclues и Python Software Foundation.

Что такое scikit-learn?

Библиотека scikit-learn предоставляет реализацию целого ряда алгоритмов для обучения с учителем (Supervised Learning) и обучения без учителя (Unsupervised Learning) через интерфейс для языка программирования Python. Данная библиотека распространяется под лицензией «Simplified BSD License» и имеет дистрибутивы для множества различных версий Linux, поощрая тем самым академическое и коммерческое использование scikit-learn.

Scikit-learn построена поверх SciPy (Scientific Python), который должен быть установлен перед использованием scikit-learn. Данный стек включает в себя:

  • NumPy: расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами
  • SciPy: открытая библиотека высококачественных научных инструментов для языка программирования Python
  • Matplotlib: библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой (3D графика также поддерживается)
  • IPython: интерактивная оболочка для языка программирования Python, которая предоставляет расширенную интроспекцию, дополнительный командный синтаксис, подсветку кода и автоматическое дополнение
  • Sympy: библиотека для символьных вычислений
  • Pandas: различные структуры данных и анализ

Дополнения и модули SciPy условно именуются SciKits. Именно поэтому модуль, предоставляющий алгоритмы обучения, называется scikit-learn.

Одна из основных концепций библиотеки scikit-learn — библиотека с уровнем надежности и поддержки, который необходим для продакшн-систем, а это значит, что большое внимание уделяется вопросам удобства использования, качества кода, документации и оптимизации скорости работы библиотеки.

Несмотря на то что весь интерфейс библиотеки представлен на Python, но использование библиотек, написанных на C во внутренней реализации некоторых частей scikit-learn, позволяет значительно повысить скорость работы, например, использование NumPy для работы с массивами и для операций с матрицами, использование LAPACK и LibSVM и аккуратное использование Cython.

Возможности scikit-learn

Библиотека scikit-learn ориентирована в первую очередь на моделирование данных, а не на загрузку, манипуляцию и обобщение данных. Для таких целей, как раз-таки, лучше использовать NumPy и Pandas.

Вот несколько популярных функциональных областей, в которых scikit-learn помогает решать поставленные задачи:

  • Кластеризация (Clustering): для группировки неразмеченных данных, например, метод k-средних (k-means)
  • Перекрестная проверка (Cross Validation): для оценки эффективности работы модели на независимых данных
  • Наборы данных (Datasets): для тестовых наборов данных и для генерации наборов данных с определенными свойствами для исследования поведенческих свойств модели
  • Сокращение размерности (Dimensionality Reduction): для уменьшения количества атрибутов для визуализации и отбора признаков (Feature Selection), например, метод главных компонент (Principal Component Analysis)
  • Алгоритмические композиции (Ensemble Methods): для комбинирования предсказаний нескольких моделей
  • Извлечение признаков (Feature Extraction): определение атрибутов в изображениях и текстовых данных
  • Отбор признаков (Feature Selection): для выявления значимых атрибутов на основе которых будет построена модель
  • Оптимизация параметров алгоритма (Parameter Tuning): для получения максимально эффективной отдачи от модели
  • Множественное обучение (Manifold Learning): для нелинейного сокращения размерности данных
  • Алгоритмы обучения с учителем (Supervised Models): огромный набор методов не ограничивается обобщенными линейными моделями (Generalized Linear Models), дискриминантным анализом (Discriminate Analysis), наивным байесовским классификатором (Naive Bayes), нейронными сетями (Neural Networks), методом опорных векторов (Support Vector Machines) и деревьями принятия решений (Decision Trees).

Пример: Деревья регрессии и классификации

Следующий небольшой пример показывает, как легко пользоваться библиотекой scikit-learn.

В данном примере мы используем достаточно популярный алгоритм на основе деревьев принятия решений под названием Classification and Regression Tress (CART) и применяем его к набору данных Iris. Данный набор данных используется для различных примеров и поставляется вместе с библиотекой. Классификатор проходит процесс настройки и выполняется процесс предсказания. Все это происходит на тренировочном наборе данных. И в самом конце мы выводим на экран оценку качества работы нашей модели и матрицу неточностей (Confusion Matrix).

Кто использует scikit-learn

Страница отзывов scikit-learn содержит отзывы Inria, Mendeley, wise.io, Evernote, Telecom ParisTech и AWeber в качестве пользователей библиотеки. И, в общем-то, если посмотреть на этот список компаний, которые рассказали об использовании scikit-learn, то вполне можно предположить, что количество компаний, которые используют scikit-learn в своей работе, вероятнее всего, еще больше.

При разработке библиотеки просматривается хорошее управление релизами. Важным фактором также является то, что код библиотеки имеет высокий процент покрытия тестами. Scikit-learn вполне подходит как для тестовых проектов, так и для продакшн-систем.

Дополнительные ресурсы

Хорошей отправной точкой для продолжения своего знакомства с scikit-learn будет домашняя страница библиотеки, которая содержит документацию и ссылки на дополнительные ресурсы. При желании можно получить доступ к коду в репозитарии на github, а также доступ к релизам на странице Sourceforge.

Документация

Хорошим стартом использования scikit-learn на практике будет страница Quick Start Tutorial и просмотр примеров кода по интересующим вас алгоритмам обучения в руководстве пользователя. Ну и конечно же API Reference будет отличным подспорьем при выполнении практических задач.

Публикации

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

Книги

Хорошей книгой по данной тематике будет “Building Machine Learning Systems with Python”, она написана хорошим языком и содержит интересные примеры.

Источники:

Работа с текстовыми данными в scikit-learn (перевод документации) — часть 1 / Хабр

Данная статья представляет перевод главы, обучающей работе с текстовыми данными, из официальной документации scikit-learn.

Цель этой главы — это исследование некоторых из самых важных инструментов в scikit-learn на одной частной задаче: анализ коллекции текстовых документов (новостные статьи) на 20 различных тематик.

В этой главе мы рассмотрим как:

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

Инструкция по установке

Чтобы начать практическое занятие, описанное в данной главе, у вас должен быть установлен scikit-learn и все компоненты, от которых он зависит (numpy, Scipy).
Чтобы получить инструкцию по установке и рекомендации для разных ОС перейдите на эту страницу.
Локальную копию данного занятия вы можете найти в своей папке:
scikit-learn/doc/tutorial/text_analytics/
Теперь scikit-learn не устанавливается с папкой doc/ и прочим содержимым. Вы можете ее скачать с github.
Папка с обучающими примерами должна содержать следующие файлы и папки:

  • *.rst files — источник учебных документов, обработанных с помощью sphinx
  • data — папка для хранения наборов данных в процессе обучения
  • skeletons — образцы неполных скриптов для упражнений
  • solutions — решения упражнений

Также вы можете скопировать skeletons в новую папку в любое место на вашем жестком диске, названную sklearn_tut_workspace, где вы будете редактировать ваши собственные файлы для упражнений. Так изначальные skeletons останутся неизменными:

% cp -r skeletons work_directory/sklearn_tut_workspace

Алгоритмы машинного обучения нуждаются в данных. Зайдите в каждую подпапку $TUTORIAL_HOME/data и запустите оттуда скрипт fetch_data.py (для начала прочтите их).
Например:

% cd $TUTORIAL_HOME/data/languages
% less fetch_data.py
% python fetch_data.py

Загрузка 20 новостных наборов данных

Набор данных называется “Twenty Newsgroups”. Вот его официальное описание, взятое с сайта:

Данные «The 20 Newsgroups» — это коллекция примерно из 20000 новостных документов, разделенная (приблизительно) равномерно между 20 различными категориями. Насколько нам известно, изначально она собиралась Кеном Ленгом (Ken Lang), возможно, для его работы «Newsweeder: Learning to filter netnews» («Новостной обозреватель: учимся фильтровать новости из сети»), хотя он явно не заявлял об этом. Коллекция «The 20 newsgroups» стала популярным набором данных для экспериментов с техниками машинного обучения для текстовых приложений, таких как классификация текста или его кластеризация.

Далее мы будем использовать встроенный загрузчик наборов данных для выборки «The 20 newsgroups» из scikit-learn. Иначе, выборку можно загрузить вручную с вэб сайта, использовать функцию sklearn.datasets.load_files и указав папку «20news-bydate-train» для сохранения распакованного архива.
Чтобы первый пример быстрее исполнялся, мы будем работать только с частью нашего набора данных, разбитой на 4 категории из 20 возможных:

>>> categories = ['alt.atheism', 'soc.religion.christian',
...               'comp.graphics', 'sci.med']

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

>>> from sklearn.datasets import fetch_20newsgroups
>>> twenty_train = fetch_20newsgroups(subset='train',
...     categories=categories, shuffle=True, random_state=42)

Возвращаемый набор данных — это scikit-learn совокупность: одномерный контейнер с полями, которые могут интерпретироваться как ключи в словаре python (dict keys), проще говоря — как признаки объекта (object attributes). Например, target_names содержит список названий запрошенных категорий:

>>> twenty_train.target_names
['alt.atheism', 'comp.graphics', 'sci.med', 'soc.religion.christian']

Сами файлы загружаются в память как атрибут data. Вы также можете ссылаться на названия файлов:

>>> len(twenty_train.data)
2257
>>> len(twenty_train.filenames)
2257

Давайте выведем на печать первые строки из первого загруженного файла:

>>> print("\n".join(twenty_train.data[0].split("\n")[:3]))
From: [email protected] (Michael Collier)
Subject: Converting images to HP LaserJet III?
Nntp-Posting-Host: hampton

>>> print(twenty_train.target_names[twenty_train.target[0]])
comp.graphics

Алгоритмы для обучения с учителем (контролируемого обучения) требуют, чтобы у каждого документа в обучающей выборке была помета определенной категории. В нашем случае, категория — это название новостной выборки, которая «случайно» оказывается названием папки, содержащей характерные документы.
Для увеличения скорости и эффективного использования памяти, scikit-learn загружает целевой атрибут как массив целых чисел, который соответствует индексу названия категории из списка target_names. Индекс категории каждой выборки хранится в атрибуте target:

>>> twenty_train.target[:10]
array([1, 1, 3, 3, 3, 3, 3, 2, 2, 2])

Можно получить название категории:

>>> for t in twenty_train.target[:10]:
...     print(twenty_train.target_names[t])
...
comp.graphics
comp.graphics
soc.religion.christian
soc.religion.christian
soc.religion.christian
soc.religion.christian
soc.religion.christian
sci.med
sci.med
sci.med

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

Извлечение характерных признаков из текстовых файлов

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

«Мешок слов» (набор слов)

Наиболее интуитивно понятный способ сделать описанное выше преобразование — это представить текст в виде набора слов:

  1. приписать уникальный целочисленный индекс каждому слову, появляющемуся в документах в обучающей выборке (например, построив словарь из слов с целочисленными индексами).
  2. для каждого документа #i посчитать количество употреблений каждого слова w и сохранить его (количество) в X[i, j]. Это будет значение признака #j, где j — это индекс слова w в словаре.

Представление «мешок слов» подразумевает, что n_features — это некоторое количество уникальных слов в корпусе. Обычно, это количество превышает 100000.
Если n_samples == 10000, то Х, сохраненный как массив numpy типа float32, потребовал бы 10000 x 100000 x 4 bytes = 4GB оперативной памяти (RAM), что едва осуществимо в современным компьютерах.
К счастью, большинство значений в X являются нулями, поскольку в одном документе используется менее чем пара сотен уникальных слов. Поэтому «мешок слов» чаще всего является высоко размерным разреженным набором данных. Мы можем сэкономить много свободной оперативки, храня в памяти только лишь ненулевые части векторов признаков.
Матрицы scipy.sparse — это структуры данных, которые именно это и делают — структурируют данные. В scikit-learn есть встроенная поддержка этих структур.

Токенизация текста с scikit-learn

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

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> count_vect = CountVectorizer()
>>> X_train_counts = count_vect.fit_transform(twenty_train.data)
>>> X_train_counts.shape
(2257, 35788)

CountVectorizer поддерживает подсчет N-грам слов или последовательностей символов. Векторизатор строит словарь индексов признаков:

>>> count_vect.vocabulary_.get(u'algorithm')
4690

Значение индекса слова в словаре связано с его частотой употребления во всем обучающем корпусе.

От употреблений к частотности

Подсчет словоупотреблений — это хорошее начало, но есть проблема: в длинных документах среднее количество словоупотреблений будет выше, чем в коротких, даже если они посвящены одной теме.
Чтобы избежать этих потенциальных несоответствий, достаточно разделить количество употреблений каждого слова в документе на общее количество слов в документе. Этот новый признак называется tf — Частота термина.
Следующее уточнение меры tf — это снижение веса слова, которое появляется во многих документах в корпусе, и отсюда является менее информативным, чем те, которые используются только в небольшой части корпуса. Примером низко ифнормативных слов могут служить служебные слова, артикли, предлоги, союзы и т.п.
Это снижение называется tf–idf, что значит “Term Frequency times Inverse Document Frequency” (обратная частота термина).
Обе меры tf и tf–idf могут быть вычислены следующим образом:

>>> from sklearn.feature_extraction.text import TfidfTransformer
>>> tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
>>> X_train_tf = tf_transformer.transform(X_train_counts)
>>> X_train_tf.shape
(2257, 35788)

В примере кода, представленного выше, мы сначала используем метод fit(..), чтобы прогнать наш алгоритм оценки на данных, а потом — метод transform(..), чтобы преобразовать нашу числовую матрицу к представлению tf-idf. Эти два шага могут быть объединены и дадут тот же результат на выходе, но быстрее, что можно сделать с помощью пропуска излишней обработки. Для этого нужно использовать метод fit_transform(..), как показано ниже:

>>> tfidf_transformer = TfidfTransformer()
>>> X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
>>> X_train_tfidf.shape
(2257, 35788)



Продолжение будет в части 2.

ПО для машинного обучения на Python / Блог компании Инфосистемы Джет / Хабр

Сегодня существует большое количество программных инструментов для создания моделей Machine Learning. Первые такие инструменты формировались в среде ученых и статистиков, где популярны языки R и Python, исторически сложились экосистемы для обработки, анализа и визуализации данных именно на этих языках, хотя определенные библиотеки машинного обучения есть и для Java, Lua, С++. При этом интерпретируемые языки программирования существенно медленнее компилируемых, поэтому на интерпретируемом языке описывают подготовку данных и структуру моделей, а основные вычисления проводят на компилируемом языке.

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

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

Библиотеки общего назначения на Python

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

NumPy

Библиотека с открытым исходным кодом для выполнения операций линейной алгебры и численных преобразований. Как правило, такие операции необходимы для преобразования датасетов, которые можно представить в виде матрицы. В библиотеке реализовано большое количество операций для работы с многомерными массивами, преобразования Фурье и генераторы случайных чисел. Форматы хранения numpy де-факто являются стандартом для хранения числовых данных во многих других библиотеках (например, Pandas, Scikit-learn, SciPy).

Сайт: www.numpy.org

Pandas

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

Сайт: pandas.pydata.org

Scikit-learn

Библиотека программного обеспечения с более чем десятилетней историей содержит реализации практически всех возможных преобразований, и нередко ее одной хватает для полной реализации модели. Как правило, при программировании практически любой модели на языке Python какие-то преобразования с использованием данной библиотеки всегда присутствуют.
Scikit-learn содержит методы разбиения датасета на тестовый и обучающий, вычисление основных метрик над наборами данных, проведение кросс-валидации. В библиотеке также есть основные алгоритмы машинного обучения: линейной регрессии (и ее модификаций Лассо, гребневой регрессии), опорных векторов, решающих деревьев и лесов и др. Есть и реализации основных методов кластеризации. Кроме того, библиотека содержит постоянно используемые исследователями методы работы с параметрами (фичами): например, понижение размерности методом главных компонент. Частью пакета является библиотека imblearn, позволяющая работать с разбалансированными выборками и генерировать новые значения.

Сайт: www.scikit-learn.org

SciPy

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

Сайт: www.scipy.org

Специфические библиотеки

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

Tensorflow

Библиотека, разработанная корпорацией Google для работы с тензорами, используется для построения нейросетей. Поддержка вычислений на видеокартах имеет версию для языка C++. На основе данной библиотеки строятся более высокоуровневые библиотеки для работы с нейронными сетями на уровне целых слоев. Так, некоторое время назад популярная библиотека Keras стала использовать Tensorflow как основной бэкенд для вычислений вместо аналогичной библиотеки Theano. Для работы на видеокартах NVIDIA используется библиотека cuDNN. Если вы работаете с картинками (со сверточными нейросетями), скорее всего, придется использовать данную библиотеку.

Сайт: www.tensorflow.org

Keras

Библиотека для построения нейросетей, поддерживающая основные виды слоев и структурные элементы. Поддерживает как рекуррентные, так и сверточные нейросети, имеет в своем составе реализацию известных архитектур нейросетей (например, VGG16). Некоторое время назад слои из данной библиотеки стали доступны внутри библиотеки Tensorflow. Существуют готовые функции для работы с изображениями и текстом (Embedding слов и т.д.). Интегрирована в Apache Spark с помощью дистрибутива dist-keras.

Сайт: www.keras.io

Caffe

Фреймворк для обучения нейросетей от университета Беркли. Как и TensorFlow, использует cuDNN для работы с видеокартами NVIDIA. Содержит в себе реализацию большего количества известных нейросетей, один из первых фреймворков, интегрированных в Apache Spark (CaffeOnSpark).

Сайт: cafee.berkeleyvision.org

pyTorch

Позволяет портировать на язык Python библиотеку Torch для языка Lua. Содержит реализации алгоритмов работы с изображениями, статистических операций и инструментов работы с нейронными сетями. Отдельно можно создать набор инструментов для оптимизационных алгоритмов (в частности стохастического градиентного спуска).

Сайт: www.torch.ch

Реализации градиентного бустинга над решающими деревьями

Подобные алгоритмы неизменно вызывают повышенный интерес, так как часто они показывают лучший результат, чем нейросети. Особенно это проявляется, если в вашем распоряжении не очень большие наборы данных (очень грубая оценка: тысячи и десятки тысяч, но не десятки миллионов). Среди моделей-победителей на соревновательной платформе kaggle алгоритмы градиентного бустинга над решающими деревьями встречаются довольно часто.
Как правило, реализации таких алгоритмов есть в библиотеках машинного обучения широкого профиля (например, в Scikit-learn). Однако существуют особые реализации данного алгоритма, которые часто можно встретить среди победителей различных конкурсов. Стоит выделить следующие.

Xgboost

Самая распространенная реализация градиентного бустинга. Появившись в 2014 г., уже к 2016-му она завоевала немалую популярность. Для выбора разбиения используют сортировку и модели, основанные на анализе гистограмм.

Сайт: github.com/dmlc/xgboost

LightGBM

Вариант градиентного бустинга от Microsoft, вышедший в 2017 г. Для выбора критерия разбиения используется Gradient-based One-Side Sampling (GOSS). Имеются методы работы с категориальными признаками, т.е. с признаками, которые явно не выражаются числом (например, имя автора или марка машины). Является частью проекта Microsoft DMTK, посвященного реализации подходов машинного обучения для .Net.

Сайт: www.dmtk.io

CatBoost

Разработка компании Яндекс, вышедшая, как и LightGBM, в 2017 г. Реализует особый подход к обработке категориальных признаков (основанный на target encoding, т.е. на подмене категориальных признаков статистиками на основе предсказываемого значения). К тому же алгоритм содержит особый подход к построению дерева, который показал лучшие результаты. Проведенное нами сравнение показало, что данный алгоритм лучше других работает прямо «из коробки», т.е. без настройки каких-либо параметров.

Сайт: catboost.yandex

Microsoft Cognitive Toolkit (CNTK)

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

Сайт: www.microsoft.com/en-us/cognitive-toolkit

Другие ресурсы для разработки

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

Azure ML

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

Cайт: azure.microsoft.com/ru-ru/services/machine-learning-studio

IBM DataScience experience (IBM DSX)

Сервис для работы в среде Jupyter Notebook с возможностью выполнять вычисления в языке Python и на других. Поддерживает интеграцию с известными наборами данных и Spark, проектом IBM Watson.

Сайт: ibm.com/cloud/watson-studio

Пакеты для социальных наук

Среди них можно выделить IBM Statistical Package for the Social Sciences (SPSS) — программный продукт IBM для обработки статистики в социальных науках, поддерживает графический интерфейс задания процесса обработки данных. Некоторое время назад стало можно встраивать алгоритмы машинного обучения в общую структуру выполнения. В целом, ограниченная поддержка алгоритмов машинного обучения становится популярной среди пакетов для статистиков, в которых уже включены статистические функции и методы визуализации (например, Tableau и SAS).

Заключение

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

  1. Окружение, в котором будет использоваться модель: необходима ли поддержка Spark, в какие сервисы нужно интегрироваться.
  2. Особенности данных. Чем являются данные: изображением, текстом или это набор чисел, какая обработка им требуется?
  3. Предрасположенность моделей к данному типу задач. Данные с изображений обычно обрабатывают сверточными нейронными сетями, а для небольших наборов данных используют алгоритмы, основанные на решающих деревьях.
  4. Ограничения по вычислительным мощностям, как при обучении, так и при использовании.

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

Построить первую модель можно, используя сравнительно небольшое число библиотек, а дальше придется принимать решение, на что тратить время: на проработку параметров (feature engineering) или на подбор оптимальной библиотеки и алгоритма, или же выполнять эти задачи параллельно.

Теперь немного о рекомендациях по выбору. Если вам нужен алгоритм, который лучше всего работает прямо «из коробки», — это Catboost. Если вы предполагаете работать с изображениями, можно использовать Keras и Tensorflow или Caffe. При работе с текстом надо определиться, собираетесь ли вы строить нейросеть и учитывать контекст. Если да, те же пожелания, что и к изображениям, если достаточно «мешка слов» (частотных характеристик встречаемости каждого слова), подойдут алгоритмы градиентного бустинга. При небольших наборах данных можно использовать алгоритмы генерации новых данных из Scikit-learn и линейные методы, реализованные в той же библиотеке.

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

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

Топ 8 библиотек Python для машинного обучения

Машинное обучение (ML) и искусственный интеллект (AI) все шире распространяются в различных сферах деятельности, и многие предприятия начинают активно инвестировать в эти технологии. С ростом объемов и сложности данных, повышается необходимость их обработки и анализа при помощи ML и АI. Искусственный интеллект дает гораздо более точные оценки и прогнозы, которые заметно повышают эффективность, увеличивают производительность и снижают расходы.

AI и ML проекты сильно отличаются от обычных проектов разработки ПО. При работе над ними используется другой технологический стек, нужны навыки машинного обучения и готовность заниматься глубокими исследованиями. Чтобы заложить основу МL и AI проекта, вам нужно выбрать гибкий и при этом стабильный язык программирования с большим количеством готовых библиотек и фреймворков. Python как раз один из таких языков, и не удивительно, что на нем ведется большое количество AI и ML проектов. Ниже мы расскажем вам про топ-8 библиотек Python, которые могут быть использованы для AI и ML.

Почему Python предпочтителен для машинного обучения и AI?

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

  • встроенные библиотеки
  • пологая кривая изучения
  • простота интеграции
  • легкость в создании прототипов
  • открытый код
  • объектно-ориентированная парадигма
  • переносимость
  • высокая производительность
  • платформонезависимость

Именно эти свойства еще больше повышают популярность языка. Огромное количество Python-библиотек для AI и ML существенно упрощают и ускоряют разработку. Простой синтаксис и читаемость способствуют быстрому тестированию сложных процессов и делают язык понятным для всех. Например, в контексте веб-разработки в качестве конкурента Python можно рассматривать PHP, но найти PHP-программистов с опытом работы в проектах ML и AI очень сложно.

Лучшие библиотеки Python для машинного обучения и AI

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

1. Tensor Flow

TensorFlow — библиотека сквозного машинного обучения Python для выполнения высококачественных численных вычислений. С помощью TensorFlow можно построить глубокие нейронные сети для распознавания образов и рукописного текста и рекуррентные нейронные сети для NLP(обработки естественных языков). Также есть модули для векторизации слов (embedding) и решения дифференциальных уравнений в частных производных (PDE). Этот фреймворк имеет отличную архитектурную поддержку, позволяющую с легкостью производить вычисления на самых разных платформах, в том числе на десктопах, серверах и мобильных устройствах.

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

2. Keras

Keras — одна из основных библиотек Python с открытым исходным кодом, написанная для построения нейронных сетей и проектов машинного обучения. Keras может работать совместно с Deeplearning4j, MXNet, Microsoft Cognitive Toolkit (CNTK), Theano или TensorFlow. В этой библиотеке реализованы практически все автономные модули нейронной сети, включая оптимизаторы, нейронные слои, функции активации слоев, схемы инициализации, функции затрат и модели регуляризации. Это позволяет строить новые модули нейросети, просто добавляя функции или классы. И поскольку модель уже определена в коде, разработчику не приходится создавать для нее отдельные конфигурационные файлы.

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

3. Theano

С момента своего появления в 2007 году, Theano привлекла разработчиков Python и инженеров ML и AI.

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

Когда речь идет о производительности, Theano — отличная библиотека ML и AI, поскольку она может работать с очень большими нейронными сетями. Ее целью является снижение времени разработки и увеличение скорости выполнения приложений, в частности, основанных на алгоритмах глубоких нейронных сетей. Ее единственный недостаток — не слишком простой синтаксис (по сравнению с TensorFlow), особенно для новичков.

4. Scikit-learn

Scikit-learn — еще одна известная опенсорсная библиотека машинного обучения Python, с широким спектром алгоритмов кластеризации, регрессии и классификации. DBSCAN, градиентный бустинг, случайный лес, SVM и k-means — вот только несколько примеров. Она также отлично взаимодействует с другими научными библиотеками Python, такими как NumPy и SciPy.

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

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

5. PyTorch

Вы когда-нибудь задумывались, почему PyTorch стала одной из самых популярных библиотек Python по машинному обучению?

PyTorch — это полностью готовая к работе библиотека машинного обучения Python с отличными примерами, приложениями и вариантами использования, поддерживаемая сильным сообществом. PyTorch отлично адаптирована к графическому процессору (GPU), что позволяет использовать его, например в приложениях NLP (обработка естественных языков). Вообще, поддержка вычислений на GPU и CPU обеспечивает оптимизацию и масштабирование распределенных задач обучения как в области исследований, так и в области создания ПО. Глубокие нейронные сети и тензорные вычисления с ускорением на GPU — две основные фишки PyTorch. Библиотека также включает в себя компилятор машинного обучения под названием Glow, который серьезно повышает производительность фреймворков глубокого обучения.

6. NumPy

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

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

7. Pandas

В проектах по машинному обучению значительное время уходит на подготовку данных, а также на анализ основных тенденций и моделей. Именно здесь Pandas привлекает внимание специалистов по машинному обучению. Python Pandas — это библиотека с открытым исходным кодом, которая предлагает широкий спектр инструментов для обработки и анализа данных. С ее помощью вы можете читать данные из широкого спектра источников, таких как CSV, базы данных SQL, файлы JSON и Excel.

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

8. Seaborn

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

С помощью этой библиотеки машинного обучения легко создавать определенные типы графиков, такие как временные ряды, тепловые карты (heat map) и графики «скрипками» (violin plot). По функционалу Seaborn превосходит Pandas и MathPlotLib — благодаря функциям статистической оценки данных в процессе наблюдений и визуализации пригодности статистических моделей для этих данных.

Ниже в таблице приведены данные по этим библиотекам из GitHub:

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

Начало работы с

— документация scikit-learn 0.23.2

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

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

Подгонка и прогнозирование: основы работы с оценкой

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

Вот простой пример, когда мы подбираем
RandomForestClassifier для некоторых очень простых данных:

 >>> из sklearn.импорт ансамбля RandomForestClassifier
>>> clf = RandomForestClassifier (random_state = 0)
>>> X = [[1, 2, 3], # 2 примера, 3 функции
... [11, 12, 13]]
>>> y = [0, 1] # классов каждого образца
>>> clf.fit (X, y)
RandomForestClassifier (random_state = 0)
 

Метод подгонки обычно принимает 2 входа:

  • Матрица образцов (или матрица дизайна) X. Размер X
    обычно (n_samples, n_features) , что означает, что образцы
    представлены в виде строк, а объекты — в виде столбцов.

  • Целевые значения y, которые являются действительными числами для задач регрессии, или
    целые числа для классификации (или любой другой дискретный набор значений). За
    задачи обучения без учителя, y указывать не нужно. л это
    обычно 1d массив, где i -я запись соответствует цели
    i -й образец (ряд) X .

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

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

 >>> clf.predict (X) # предсказываем классы обучающих данных
массив ([0, 1])
>>> clf.predict ([[4, 5, 6], [14, 15, 16]]) # предсказываем классы новых данных
массив ([0, 1])
 

Трансформаторы и препроцессоры

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

В scikit-learn препроцессоры и преобразователи используют тот же API, что и
объекты оценщика (фактически все они наследуются от одного и того же
BaseEstimator класс). Объекты-трансформеры не имеют
прогнозировать метод, а метод преобразования, который выводит
недавно преобразованная матрица выборки X :

 >>> из sklearn.preprocessing import StandardScaler
>>> X = [[0, 15],
... [1, -10]]
>>> StandardScaler (). Fit (X).преобразовать (X)
массив ([[- 1., 1.],
       [1., -1.]])
 

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

.

О нас - документация scikit-learn 0.23.2

История

Этот проект был начат в 2007 году как проект Google Summer of Code.
Дэвид Курнапо. Позже в том же году Матье Брюше начал работу над
этот проект как часть его диссертации.

В 2010 году Фабиан Педрегоса, Гаэль Вароко, Александр Грамфор и Винсент
Мишель из INRIA взял на себя руководство проектом и сделал первый публичный
релиз, 1 февраля 2010 года. С тех пор появилось несколько релизов.
после трехмесячного цикла, и процветающее международное сообщество
руководил разработкой.

Авторы

Следующие люди в настоящее время вносят основной вклад в разработку scikit-learn.
и обслуживание:

Жереми дю Буасберранже

Йорис Ван ден Босше

Loïc Estève

Thomas J Fan

Александр Грамфор

Оливье Гризель

Ярослав Гальченко

Николас Хуг

Адрин Джалали

Гийом Леметр

Ян Хендрик Метцен

Андреас Мюллер

Влад Никулае

Джоэл Нотман

Ханьминь Цинь

Бертран Тирион

Tom Dupré la Tour

Гаэль Вароку

Нелле Вароку

Юрчак Роман

Пожалуйста, не пишите авторам напрямую с просьбой о помощи или сообщать о проблемах.Вместо этого ознакомьтесь с разделом "Как лучше всего задавать вопросы о scikit-learn".
в FAQ.

.

Страница не найдена · GitHub Pages

Страница не найдена · GitHub Pages

Файл не найден

Сайт, настроенный по этому адресу, не
содержать запрошенный файл.

Если это ваш сайт, убедитесь, что регистр имени файла соответствует URL-адресу.
Для корневых URL (например, http://example.com/ ) вы должны предоставить
index.html файл.

Прочтите полную документацию
для получения дополнительной информации об использовании GitHub Pages .

.

Страница не найдена · GitHub Pages

Страница не найдена · GitHub Pages

Файл не найден

Сайт, настроенный по этому адресу, не
содержать запрошенный файл.

Если это ваш сайт, убедитесь, что регистр имени файла соответствует URL-адресу.
Для корневых URL (например, http://example.com/ ) вы должны предоставить
index.html файл.

Прочтите полную документацию
для получения дополнительной информации об использовании GitHub Pages .

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *