Введение

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

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

Часть-1: Исследовательский анализ данных

Часть-2: Разработка функций

Часть-3: Статистика и статистическое моделирование

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

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

👉 Прежде чем начать блог, подпишитесь на мой канал YouTube и следите за мной в Instagram 👇
📷 YouTube — https://bit.ly/38gLfTo
📃 Instagram — https://bit.ly/3VbKHWh

👉 Делайте пожертвования💰или дайте мне совет💵Если вам действительно нравятся мои блоги, потому что я из Индии и не могу участвовать в партнерской программе Medium. Нажмите здесь, чтобы сделать пожертвование или чаевые 💰 — https://bit.ly/3oTHiz3

Оглавление

  1. Типы алгоритмов машинного обучения
  2. Обзор процесса машинного обучения
  3. Алгоритмы регрессии
  • Линейная регрессия
  • Полиномиальная регрессия
  • Ридж-регрессия
  • Лассо-регрессия
  • Эластичная чистая регрессия
  • Регрессия дерева решений
  • Случайная лесная регрессия
  • Градиент, усиливающий регрессию
  • Опорная векторная регрессия

4. Алгоритмы классификации

  • Логистическая регрессия
  • k-ближайшие соседи (k-NN)
  • Наивный Байес
  • Классификация дерева решений
  • Случайная классификация леса
  • Классификация повышения градиента
  • Метод опорных векторов (SVM)
  • Искусственные нейронные сети (ИНС)

5. Алгоритмы кластеризации

  • Кластеризация k-средних
  • Иерархическая кластеризация
  • ДБСКАН
  • Модели гауссовой смеси (GMM)

6. Советы по выбору правильного алгоритма

7. Заключение

Типы алгоритмов машинного обучения

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

  1. Обучение с учителем. Обучение с учителем — это подмножество машинного обучения, в котором алгоритм обучается на размеченных данных с известными входными и выходными данными. На основе входных данных алгоритм учится предсказывать результат. Алгоритм контролируемого обучения, например, можно научить прогнозировать цену дома на основе таких факторов, как местоположение, размер и количество комнат. Линейная регрессия, логистическая регрессия, решение Деревья, случайные леса и машины опорных векторов являются примерами алгоритмов обучения с учителем.
  2. Обучение без учителя.Обучение без учителя — это тип машинного обучения, при котором алгоритм обучается на неразмеченных данных, что означает, что входные данные известны, а выходные данные неизвестны. Без каких-либо предварительных знаний о том, что он ищет, алгоритм учится находить закономерности и взаимосвязи в данных. Алгоритм обучения без учителя, например, можно использовать для сегментации клиентов на основе их покупательского поведения. Кластеризация, анализ основных компонентов и анализ ассоциативных правил являются примерами алгоритмов обучения без учителя.
  3. Полууправляемое обучение. Полууправляемое обучение — это подмножество машинного обучения, в котором алгоритм обучается с использованием как размеченных, так и неразмеченных данных. Алгоритм учится предсказывать и находить закономерности в неразмеченных данных, используя размеченные данные. Алгоритм полууправляемого обучения, например, можно использовать для классификации сообщений электронной почты как спама или не спама на основе небольшого количества помеченных сообщений и большого количества непомеченных сообщений. Распространение ярлыков и Ожидание-максимизация — это два алгоритма обучения с полуучителем.
  4. Обучение с подкреплением. Обучение с подкреплением — это тип машинного обучения, в котором алгоритм обучается посредством взаимодействия с окружающей средой и обратной связи в виде вознаграждений или наказаний. Алгоритм учится предпринимать действия, которые максимизируют вознаграждение и минимизируют штрафы. Алгоритм обучения с подкреплением, например, можно использовать, чтобы научить робота перемещаться по лабиринту, поощряя его, когда он находит правильный путь, и наказывая его, когда он делает неправильный поворот. Q- Learning и Policy Gradient — два примера алгоритмов обучения с подкреплением.

Обзор процесса машинного обучения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

I. Алгоритмы регрессии

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

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

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

Математическое уравнение линейной регрессии:

y = β0 + β1*x + ε

где:

  • y - зависимая переменная (также называемая ответом или целью)
  • x - независимая переменная (также называемая предиктором или функцией)
  • β0 — точка пересечения с осью y (значение y при x = 0).
  • β1 — наклон линии регрессии (изменение y при изменении x на одну единицу)
  • ε - член ошибки (разница между фактическим значением y и прогнозируемым значением y)

Рассмотрим следующий пример прогнозирования цен на жилье на основе размера дома. Мы можем оценить цену дома на основе его размера, используя линейную регрессию. Вот пример линейной регрессии Python с использованием библиотеки scikit-learn:

from sklearn.linear_model import LinearRegression
import numpy as np

# Define the input and output data
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([1.2, 2.2, 2.8, 4.0, 5.1])

# Train the linear regression model
reg = LinearRegression().fit(X, y)

# Predict the output for a new input
new_X = np.array([6]).reshape(-1, 1)
print(reg.predict(new_X))

Когда использовать:

  • Когда связь между независимой и зависимой переменной является линейной
  • Когда вам нужно делать прогнозы на основе непрерывных данных
  • Когда нужна простая и интерпретируемая модель

Преимущества:

  • Линейная регрессия проста и легко интерпретируется.
  • Его можно быстро обучить, и он эффективен в вычислительном отношении.

Недостатки:

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

2. Полиномиальная регрессия

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

Рассмотрим тот же пример прогнозирования цен на жилье на основе размера дома. Мы можем оценить цену дома на основе его размера, используя полиномиальную регрессию. Вот пример полиномиальной регрессии на Python с использованием библиотеки scikit-learn:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import numpy as np

# Define the input and output data
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([1.2, 2.2, 2.8, 4.0, 5.1])

# Transform the input data into polynomial features
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

# Train the polynomial regression model
reg = LinearRegression().fit(X_poly, y)

# Predict the output for a new input
new_X = np.array([6]).reshape(-1, 1)
new_X_poly = poly.transform(new_X)
print(reg.predict(new_X_poly))

Когда использовать:

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

Преимущества:

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

Недостатки:

  • Он может быть чувствителен к выбросам.
  • Он может быть склонен к переоснащению, если степень полинома слишком высока.

3. Ридж-регрессия

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

Математическое уравнение регрессии хребта в формате латекса:

Рассмотрим следующий пример прогнозирования цен на жилье на основе размера дома. Мы можем оценить цену дома на основе его размера, используя гребневую регрессию. Вот пример гребневой регрессии на Python с использованием библиотеки scikit-learn:

import numpy as np
from sklearn.linear_model import Ridge

# Generate random data for house sizes and prices
X = np.random.rand(100, 1) * 10
y = 1 + 2*X + np.random.rand(100, 1)

# Fit the ridge regression model
ridge = Ridge(alpha=1)
ridge.fit(X, y)

# Predict the price of a house with size 5
size = np.array([[5]])
price = ridge.predict(size)

print("Predicted price:", price)

Когда использовать:

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

Преимущества гребневой регрессии:

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

Недостатки гребневой регрессии:

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

4. Лассо-регрессия

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

Вот пример использования регрессии Лассо в Python с scikit-learn:

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Load the Boston housing dataset
boston = load_boston()

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

# Fit a Lasso regression model
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)

# Make predictions on the test set
y_pred = lasso.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)

Математическое уравнение регрессии Лассо:

Когда использовать:

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

Преимущества:

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

Недостатки:

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

5. Эластичная чистая регрессия

Регрессия эластичной сети представляет собой гибрид регрессии Лассо-Риджа, который сочетает штрафные условия L1 и L2. Это полезно, когда набор данных содержит множество функций, некоторые из которых коррелируют друг с другом.

Вот пример использования регрессии Elastic Net в Python с помощью scikit-learn:

from sklearn.linear_model import ElasticNet
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Load the Boston housing dataset
boston = load_boston()

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

# Fit an Elastic Net regression model
enet = ElasticNet(alpha=0.1, l1_ratio=0.5)
enet.fit(X_train, y_train)

# Make predictions on the test set
y_pred = enet.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)

Целевая функция эластичной чистой регрессии задается как:

Когда использовать:

  • Когда необходимо найти баланс между регрессией Лассо и Риджа
  • Когда функций много, но важны лишь некоторые
  • Когда есть потребность в модели, которая хорошо работает с новыми данными

Преимущества:

  • Может выполнять выбор функций и обрабатывать коррелированные функции.
  • Хорошо работает, когда в наборе данных много нерелевантных функций.

Недостатки:

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

6. Регрессия дерева решений

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

Вот пример использования регрессии дерева решений в Python с scikit-learn:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

# Generate random data
np.random.seed(0)
n_samples = 100
X = np.sort(np.random.rand(n_samples, 1), axis=0)
y = np.sin(2 * np.pi * X).ravel()
y += 0.1 * np.random.randn(n_samples)

# Fit the model
regr = DecisionTreeRegressor(max_depth=2)
regr.fit(X, y)

# Predict
X_test = np.arange(0.0, 1.0, 0.01)[:, np.newaxis]
y_test = regr.predict(X_test)

# Plot the results
plt.figure()
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_test, color="cornflowerblue", label="max_depth=2", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

Математическое уравнение для регрессионной модели дерева решений:

Когда использовать:

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

Преимущества:

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

Недостатки:

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

Посмотрите это полное видео о линейной регрессии и дереве решений с помощью Python Implement and Complete End to End Project.

7. Регрессия случайного леса

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

Вот пример использования регрессии случайного леса в Python с scikit-learn:

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression

# Create a random dataset
X, y = make_regression(n_features=4, n_informative=2,
                       random_state=0, shuffle=False)

# Initialize the model
reg = RandomForestRegressor(max_depth=2, random_state=0)

# Train the model
reg.fit(X, y)

# Make a prediction
X_test = [[0, 0, 0, 0]]
print(reg.predict(X_test))

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

Когда использовать:

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

Преимущества:

  • Он может обрабатывать большие наборы данных с высокой размерностью.
  • Он может обрабатывать пропущенные значения и поддерживать точность
  • Это уменьшает переоснащение по сравнению с деревьями решений

Недостатки:

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

8. Градиентная повышающая регрессия

Gradient Boosting — это еще один метод ансамблевого обучения, который объединяет несколько слабых моделей для более точного прогнозирования. Регрессия с повышением градиента строит деревья решений последовательно, при этом каждое дерево пытается исправить ошибки, допущенные предыдущим деревом.

Вот пример использования регрессии с усилением градиента в Python с помощью scikit-learn:

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import make_regression

# Create a random dataset
X, y = make_regression(n_features=4, n_informative=2,
                       random_state=0, shuffle=False)

# Initialize the model
reg = GradientBoostingRegressor(random_state=0)

# Train the model
reg.fit(X, y)

# Make a prediction
X_test = [[0, 0, 0, 0]]
print(reg.predict(X_test))

Математическое уравнение можно представить следующим образом:

Когда использовать:

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

Преимущества:

  • Он может решать как проблемы регрессии, так и проблемы классификации.
  • Он может обрабатывать пропущенные значения и поддерживать точность
  • Это может быть более точным, чем Random Forest для некоторых наборов данных.

Недостатки:

  • Он может быть чувствителен к переоснащению
  • Обучение может занять больше времени, чем Random Forest

9. Поддержка векторной регрессии

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

Вот пример использования регрессии опорных векторов в Python с scikit-learn:

from sklearn.svm import SVR
from sklearn.datasets import make_regression

# Create a random dataset
X, y = make_regression(n_features=4, n_informative=2,
                       random_state=0, shuffle=False)

# Initialize the model
reg = SVR()

# Train the model
reg.fit(X, y)

# Make a prediction
X_test = [[0, 0, 0, 0]]
print(reg.predict(X_test))

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

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

Двойственная задача линейного SVR:

Когда использовать:

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

Преимущества:

  • Он может обрабатывать проблемы нелинейной регрессии
  • Он может обрабатывать многомерные наборы данных
  • Он менее подвержен переоснащению по сравнению с другими алгоритмами.

Недостатки:

  • Может быть чувствителен к выбору функции ядра.
  • Это может быть вычислительно затратным для больших наборов данных

II. Алгоритмы классификации

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

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

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

Вот пример использования логистической регрессии в Python с scikit-learn:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)

logreg = LogisticRegression()
logreg.fit(X_train, y_train)

y_pred = logreg.predict(X_test)

Математическое уравнение для логистической регрессии:

Когда использовать:

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

Преимущества:

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

Недостатки:

  • Он склонен к переоснащению, особенно когда пространство признаков велико.
  • Он может работать плохо, если классы плохо разделены.

2. k-ближайшие соседи (k-NN)

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

Вот пример использования k-NN в Python с scikit-learn:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)

knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

y_pred = knn.predict(X_test)

Не существует единого математического уравнения, описывающего работу алгоритма k-ближайших соседей (k-NN). Общая концепция алгоритма k-NN может быть резюмирована следующим образом:

Когда использовать:

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

Преимущества:

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

Недостатки:

  • Он может быть чувствителен к выбору k.
  • Это может быть дорогостоящим в вычислительном отношении, особенно когда пространство признаков велико.

3. Наивная байесовская классификация

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

Вот пример использования Наивного Байеса в Python с scikit-learn:

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)

nb = GaussianNB()
nb.fit(X_train, y_train)

y_pred = nb.predict(X_test)

Математическое уравнение алгоритма наивной байесовской классификации можно записать следующим образом:

Когда использовать:

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

Преимущества:

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

Недостатки:

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

4. Классификация дерева решений

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

Вот пример использования классификации дерева решений в Python с помощью scikit-learn:

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load the iris dataset
iris = load_iris()

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# Create the decision tree classifier
clf = DecisionTreeClassifier()

# Fit the classifier to the training data
clf.fit(X_train, y_train)

# Predict the classes of the testing data
y_pred = clf.predict(X_test)

# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)

print("Accuracy:", accuracy)

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

Но, как показано ниже, серию операторов if-then можно использовать для описания функции прогнозирования для классификации дерева решений:

Когда использовать:

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

Преимущества:

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

Недостатки:

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

5. Случайная классификация леса

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

Вот пример использования классификации случайного леса в Python с помощью scikit-learn:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=4, n_informative=2, n_redundant=0, random_state=0, shuffle=False)

clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X, y)

print(clf.predict([[0, 0, 0, 0]]))

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

Когда использовать:

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

Преимущества:

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

Недостатки:

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

6. Классификация повышения градиента

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

Вот пример использования классификации повышения градиента в Python с XGBoost:

import xgboost as xgb
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=4, n_informative=2, n_redundant=0, random_state=0, shuffle=False)

dtrain = xgb.DMatrix(X, label=y)
param = {'max_depth': 2, 'eta': 1, 'objective': 'binary:logistic'}
num_round = 2

bst = xgb.train(param, dtrain, num_round)
bst.predict(xgb.DMatrix([[0, 0, 0, 0]]))

Математическое уравнение для классификации повышения градиента:

Когда использовать:

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

Преимущества:

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

Недостатки:

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

7. Метод опорных векторов (SVM)

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

Вот пример использования классификации SVM в Python с помощью scikit-learn:

from sklearn import svm
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=4, n_informative=2, n_redundant=0, random_state=0, shuffle=False)

clf = svm.SVC(kernel='linear', C=1, gamma='auto')
clf.fit(X, y)

print(clf.predict([[0, 0, 0, 0]]))

Вот уравнение для машины опорных векторов (SVM):

Когда использовать:

  • Когда набор данных имеет небольшое количество признаков и большое количество выборок.
  • Когда граница решения сложна и нелинейна.
  • Когда модель необходимо оптимизировать для определенного показателя оценки (например, AUC, оценка F1).

Преимущества:

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

Недостатки:

  • Может быть чувствителен к выбору функции ядра и ее параметров.
  • Вычислительно дорого.
  • Требует тщательной предварительной обработки данных.

8. Искусственные нейронные сети (ИНС)

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

Вот пример использования ИНС для классификации изображений с помощью популярной библиотеки TensorFlow:

import tensorflow as tf

# Load the MNIST dataset
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Normalize the input data
x_train, x_test = x_train / 255.0, x_test / 255.0

# Build the neural network model
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

# Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Train the model
model.fit(x_train, y_train, epochs=5)

# Evaluate the model on the test data
model.evaluate(x_test, y_test)

Математические уравнения для искусственных нейронных сетей (ИНС) могут быть довольно сложными и могут варьироваться в зависимости от конкретной архитектуры и типа используемой нейронной сети. Однако основное уравнение для нейронной сети с прямой связью с одним скрытым слоем можно выразить следующим образом:

Когда использовать:

  1. Сложные задачи, связанные с большими объемами данных. ИНС идеально подходят для ситуаций, в которых используется множество функций или входных переменных, поскольку они могут изучать сложные закономерности и взаимосвязи в обширных наборах данных.
  2. Нелинейные задачи. ИНС особенно полезны для решения нелинейных проблем, таких как распознавание изображений или речи, когда связи между входными и выходными данными сложны и сложны для понимания обычными алгоритмами.
  3. Анализ временных рядов.Способность ИНС распознавать и прогнозировать закономерности во времени делает их полезными в этом типе анализа. Их можно использовать для прогнозирования предстоящих значений или выявления несоответствий в данных временных рядов.

Преимущества:

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

Недостатки:

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

III. Алгоритмы кластеризации

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

1. Кластеризация k-средних

Распространенный неконтролируемый подход к кластеризации, называемый k-Means, делит набор данных на k кластеров в зависимости от того, насколько точки данных похожи на центры кластеров. Цель алгоритма — уменьшить сумму квадратов расстояний между каждой точкой данных и ближайшим центром кластера.

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

Код Python:

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=0)
kmeans.fit(X)
labels = kmeans.predict(X)

Математическое уравнение для кластеризации k-средних можно записать следующим образом:

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

Когда использовать:

  • k-Means полезен, когда заранее известно количество кластеров k и данные распределены равномерно.

Преимущества:

  • Просто и легко реализовать.
  • Хорошо работает для больших наборов данных.

Недостатки:

  • Чувствителен к начальным центрам кластеров.
  • Не может эффективно обрабатывать выбросы.

2. Иерархическая кластеризация

Иерархическая кластеризация — еще один популярный алгоритм неконтролируемой кластеризации, который строит иерархию кластеров путем итеративного слияния или разделения кластеров на основе сходства точек данных.

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

Код Python:

from scipy.cluster.hierarchy import linkage, dendrogram

linkage_matrix = linkage(X, method='ward')
dendrogram(linkage_matrix, truncate_mode='level', p=3)

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

Когда использовать:

  • Иерархическая кластеризация полезна, когда количество кластеров k заранее неизвестно, а данные имеют иерархическую структуру.

Преимущества:

  • Может обрабатывать любые типы данных.
  • Обеспечивает визуализацию иерархии кластеров.

Недостатки:

  • Вычислительно дорого для больших наборов данных.
  • Не подходит для наборов данных с различной плотностью.

3. ДБСКАН

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

Для DBSCAN нет прямого математического уравнения. Однако алгоритм работает, определяя два параметра:

  1. Эпсилон (E) —радиус, в пределах которого алгоритм ищет близлежащие точки, также известный как "окрестность" точки данных.
  2. Минимум точек —минимальное количество точек в радиусе $\epsilon$, которое должно присутствовать, чтобы точка данных считалась базовой точкой.
  3. Основные точки: это точки, имеющие не менее minPts числа точек в радиусе эпсилон (т. е. точки, лежащие в пределах эпсилон-окрестности центральной точки). Эти точки считаются сердцем кластера.
  4. Пограничные точки. Это точки, имеющие менее minPts точек в радиусе эпсилон, но лежащие в эпсилон-окрестности центральной точки. Эти точки принадлежат кластеру, но они не считаются такими значимыми, как основные точки.
  5. Точки шума. Это точки, не принадлежащие ни к одному кластеру. Это точки, у которых нет точек minPts в радиусе эпсилон, и они не находятся в эпсилон-окрестности центральной точки. Эти точки считаются выбросами и не используются при кластеризации.

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

Код Python:

from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)
labels = dbscan.labels_

Когда использовать:

  • DBSCAN полезен, когда данные имеют разную плотность, а количество кластеров заранее неизвестно.

Преимущества:

  • Может обрабатывать наборы данных с различной плотностью.
  • Может эффективно идентифицировать выбросы.

Недостатки:

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

4. Модели гауссовых смесей (GMM)

GMM — это вероятностные алгоритмы кластеризации, которые моделируют распределение данных как смесь распределений Гаусса и оценивают параметры гауссианов с помощью алгоритма максимизации ожидания (EM).

Пример. Давайте рассмотрим набор данных о транзакциях клиентов, и мы хотим сгруппировать клиентов на основе их истории покупок. Мы можем использовать GMM для моделирования покупательского поведения как смеси гауссианов и оценки параметров гауссианов.

Код Python:

from sklearn.mixture import GaussianMixture

gmm = GaussianMixture(n_components=3, covariance_type='full', random_state=0)
gmm.fit(X)
labels = gmm.predict(X)

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

Когда использовать:

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

Преимущества:

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

Недостатки:

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

Советы по выбору правильного алгоритма

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

  1. Понимание проблемы. Перед выбором алгоритма вам необходимо понять проблему, которую вы пытаетесь решить. Вам нужно знать тип проблемы, будь то проблема классификации, регрессии или кластеризации.
  2. Оцените данные. Вам необходимо оценить имеющиеся у вас данные, размер данных, количество функций и распределение данных. Некоторые алгоритмы лучше работают с большими наборами данных, а другие хорошо работают с меньшими наборами данных.
  3. Рассмотрите предположения. Некоторые алгоритмы имеют предположения о данных, такие как линейность или нормальность. Вы должны рассмотреть эти предположения, прежде чем выбирать алгоритм.
  4. Учитывайте сложность. Некоторые алгоритмы сложнее других, и их обучение и тестирование может занять больше времени. Вам необходимо учитывать сложность алгоритма и доступные ресурсы.
  5. Эксперимент. Вам нужно поэкспериментировать с разными алгоритмами и оценить их эффективность. Вы можете использовать методы перекрестной проверки для оценки производительности различных алгоритмов.
  6. Выберите лучший алгоритм: после оценки производительности различных алгоритмов вам необходимо выбрать лучший алгоритм, который хорошо работает для вашей задачи.

Заключение

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

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

Код и примеры можно найти в моем профиле на GitHub.



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

👏 Похлопайте истории (100 хлопков) и следуйте за мной 👉🏻Simranjeet Singh

📑 Смотрите больше контента в моем Среднем профиле

🔔 Следуйте за мной: LinkedIn | Средний | Гитхаб | Твиттер | "Телеграмма"

🚀 Помогите мне охватить более широкую аудиторию, поделившись моим контентом с друзьями и коллегами.

🎓 Если вы хотите начать карьеру в области Data Science и искусственного интеллекта, но не знаете как? Я предлагаю сеансы наставничества по науке о данных и искусственному интеллекту, а также долгосрочную профессиональную ориентацию.

📅 Консультация или профориентация

📅 Наставничество 1:1 — о Python, науке о данных и машинном обучении