Код реализации, обучающие видеоролики и многое другое.

Тренд

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

Цель

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

Разрушение

Я расскажу в общей сложности о 8 различных алгоритмах машинного обучения (и еще больше). Не стесняйтесь прыгать или пропускать алгоритм, если он у вас не работает. Используйте это руководство, как душе угодно. Итак, без дальнейших прощаний, вот как оно разбито:

  1. Линейная регрессия
  2. Логистическая регрессия
  3. Деревья решений
  4. Поддержка векторных машин
  5. K-ближайшие соседи
  6. Случайные леса
  7. Кластеризация K-средних
  8. Анализ основных компонентов

Уборка

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

Поэтому, чтобы облегчить нам жизнь обоих, я использую Python 3.5.2, и ниже приведены пакеты, которые я импортировал до этих упражнений. Я также взял свои образцы данных из наборов данных Диабет и Ирис в Репозитории машинного обучения UCI. Наконец, если вы хотите пропустить все это и просто увидеть весь код, не стесняйтесь взглянуть на него на Github.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
%matplotlib inline

Линейная регрессия

Объяснил

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

В любом случае, линейная регрессия - это алгоритм обучения с учителем, который предсказывает результат на основе непрерывных функций. Линейная регрессия универсальна в том смысле, что ее можно запускать для одной переменной (простая линейная регрессия) или для многих функций (множественная линейная регрессия). Это работает путем присвоения оптимальных весов переменным, чтобы создать линию (ax + b), которая будет использоваться для прогнозирования результатов. Посмотрите видео ниже для более подробного объяснения.

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

Начиная

from sklearn import linear_model
df = pd.read_csv(‘linear_regression_df.csv’)
df.columns = [‘X’, ‘Y’]
df.head()

Визуализация

sns.set_context(“notebook”, font_scale=1.1)
sns.set_style(“ticks”)
sns.lmplot(‘X’,’Y’, data=df)
plt.ylabel(‘Response’)
plt.xlabel(‘Explanatory’)

Реализация

linear = linear_model.LinearRegression()
trainX = np.asarray(df.X[20:len(df.X)]).reshape(-1, 1)
trainY = np.asarray(df.Y[20:len(df.Y)]).reshape(-1, 1)
testX = np.asarray(df.X[:20]).reshape(-1, 1)
testY = np.asarray(df.Y[:20]).reshape(-1, 1)
linear.fit(trainX, trainY)
linear.score(trainX, trainY)
print(‘Coefficient: \n’, linear.coef_)
print(‘Intercept: \n’, linear.intercept_)
print(‘R² Value: \n’, linear.score(trainX, trainY))
predicted = linear.predict(testX)

Логистическая регрессия

Объяснил

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

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

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

Начиная

from sklearn.linear_model import LogisticRegression
df = pd.read_csv(‘logistic_regression_df.csv’)
df.columns = [‘X’, ‘Y’]
df.head()

Визуализация

sns.set_context(“notebook”, font_scale=1.1)
sns.set_style(“ticks”)
sns.regplot(‘X’,’Y’, data=df, logistic=True)
plt.ylabel(‘Probability’)
plt.xlabel(‘Explanatory’)

Реализация

logistic = LogisticRegression()
X = (np.asarray(df.X)).reshape(-1, 1)
Y = (np.asarray(df.Y)).ravel()
logistic.fit(X, Y)
logistic.score(X, Y)
print(‘Coefficient: \n’, logistic.coef_)
print(‘Intercept: \n’, logistic.intercept_)
print(‘R² Value: \n’, logistic.score(X, Y))

Деревья решений

Объяснил

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

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

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

Начиная

from sklearn import tree
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df.head()

Реализация

from sklearn.cross_validation import train_test_split
decision = tree.DecisionTreeClassifier(criterion=’gini’)
X = df.values[:, 0:4]
Y = df.values[:, 4]
trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)
decision.fit(trainX, trainY)
print(‘Accuracy: \n’, decision.score(testX, testY))

Визуализация

from sklearn.externals.six import StringIO 
from IPython.display import Image
import pydotplus as pydot
dot_data = StringIO()
tree.export_graphviz(decision, out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

Машины опорных векторов

Объяснил

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

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

Теперь, когда вы знаете все о поддерживающих векторных машинах, давайте продолжим и реализуем их на Python.

Начиная

from sklearn import svm
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X4’, ‘X3’, ‘X1’, ‘X2’, ‘Y’]
df = df.drop([‘X4’, ‘X3’], 1)
df.head()

Реализация

from sklearn.cross_validation import train_test_split
support = svm.SVC()
X = df.values[:, 0:2]
Y = df.values[:, 2]
trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)
support.fit(trainX, trainY)
print(‘Accuracy: \n’, support.score(testX, testY))
pred = support.predict(testX)

Визуализация

sns.set_context(“notebook”, font_scale=1.1)
sns.set_style(“ticks”)
sns.lmplot(‘X1’,’X2', scatter=True, fit_reg=False, data=df, hue=’Y’)
plt.ylabel(‘X2’)
plt.xlabel(‘X1’)

K-Ближайшие соседи

Объяснил

K-Nearest Neighbours, сокращенно KNN, - это алгоритм обучения с учителем, специализирующийся на классификации. Алгоритм смотрит на разные центроиды и сравнивает расстояние, используя какую-то функцию (обычно евклидову), затем анализирует эти результаты и назначает каждую точку группе, чтобы она была оптимизирована для размещения всех ближайших к ней точек . Посмотрите видео ниже, чтобы глубже погрузиться в то, что на самом деле происходит за кулисами с K-Nearest Neighbours.

Теперь, когда вы разобрались с концепциями, лежащими в основе алгоритма K-Nearest Neighbours, давайте реализуем его на Python.

Начиная

from sklearn.neighbors import KNeighborsClassifier
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df = df.drop([‘X4’, ‘X3’], 1)
df.head()

Визуализация

sns.set_context(“notebook”, font_scale=1.1)
sns.set_style(“ticks”)
sns.lmplot(‘X1’,’X2', scatter=True, fit_reg=False, data=df, hue=’Y’)
plt.ylabel(‘X2’)
plt.xlabel(‘X1’)

Реализация

from sklearn.cross_validation import train_test_split
neighbors = KNeighborsClassifier(n_neighbors=5)
X = df.values[:, 0:2]
Y = df.values[:, 2]
trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)
neighbors.fit(trainX, trainY)
print(‘Accuracy: \n’, neighbors.score(testX, testY))
pred = neighbors.predict(testX)

Случайные леса

Объяснил

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

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

Начиная

from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df.head()

Реализация

from sklearn.cross_validation import train_test_split
forest = RandomForestClassifier()
X = df.values[:, 0:4]
Y = df.values[:, 4]
trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)
forest.fit(trainX, trainY)
print(‘Accuracy: \n’, forest.score(testX, testY))
pred = forest.predict(testX)

Кластеризация K-средних

Объяснил

K-Means - это популярный алгоритм классификации с обучением без учителя, который обычно используется для решения проблемы кластеризации. «K» обозначает количество кластеров, введенное пользователем. Алгоритм начинается со случайно выбранных точек, а затем оптимизирует кластеры, используя формулу расстояния, чтобы найти наилучшую группировку точек данных. В конечном итоге специалист по данным должен выбрать правильное значение "K". Вы знать упражнение, посмотрите видео, чтобы узнать больше.

Теперь, когда мы узнали больше о кластеризации K-средних и о том, как она работает, давайте реализуем алгоритм на Python.

Начиная

from sklearn.cluster import KMeans
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df = df.drop([‘X4’, ‘X3’], 1)
df.head()

Реализация

from sklearn.cross_validation import train_test_split
kmeans = KMeans(n_clusters=3)
X = df.values[:, 0:2]
kmeans.fit(X)
df[‘Pred’] = kmeans.predict(X)
df.head()

Визуализация

sns.set_context(“notebook”, font_scale=1.1)
sns.set_style(“ticks”)
sns.lmplot(‘X1’,’X2', scatter=True, fit_reg=False, data=df, hue = ‘Pred’)

Анализ основных компонентов

Объяснил

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

Теперь, когда мы узнали больше о PCA и о том, как он работает, давайте реализуем алгоритм на Python.

Начиная

from sklearn import decomposition
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df.head()

Реализация

from sklearn import decomposition
pca = decomposition.PCA()
fa = decomposition.FactorAnalysis()
X = df.values[:, 0:4]
Y = df.values[:, 4]
train, test = train_test_split(X,test_size = 0.3)
train_reduced = pca.fit_transform(train)
test_reduced = pca.transform(test)
pca.n_components_

Заключение

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

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