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

1. КНН

2. ДБСКАН

3. СПС и т.д.

К- означает:

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

Метод работы:

  1. Выберите количество кластеров = k и выберите k точек в наборе данных.
  2. Назначьте другие точки тому же кластеру, ближайшему к точкам k.
  3. Вычислите центр тяжести каждого кластера.
  4. Назначьте все точки, ближайшие к центроиду кластеров.
  5. Повторяйте последние два шага, пока ошибка не будет сведена к минимуму.

Выбор значения K.Предположим, у нас есть набор наблюдений (x1, x2, …, xn), кластеризация k-средних направлена ​​на разделение n наблюдений на k (≤ n) задает S = {S1, S2, …, Sk}, чтобы минимизировать сумма квадратов внутри кластера (WCSS). Потому что в процессе создания кластера мы хотим максимизировать расстояние между кластерами и минимизировать расстояние между точками данных в одном кластере.

µi=Центр тяжести кластера.

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

Реализация Python:

#......Import the relevant libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
#......read the data
data = pd.read_csv ('3.12. Example.csv')
plt.scatter(data['Satisfaction'],data['Loyalty'])
x = data.copy()
#......scale the data
scaler = StandardScaler()
x_scaled= scaler.fit_transform(x)
x_scaled
#......to minimize the error by WCSS
WCSS=[]
 for k in range(2,30):
     model=KMeans(n_cluster=k)
     model.fit(x_scaled)
     WCSS.append(model.inertia_)
#.....looking where large jump of K
plt.plot(range(2,30),WCSS,'o--')
pd.Series(WCSS).diff().plot(kind='bar')
kmeans = KMeans(30)
kmeans.fit(x_scaled)
clusters = x.copy()
#.....labelling the clusters
clusters['cluster_pred']=kmeans.fit_predict(x_scaled)
clusters
plt.scatter(clusters['Satisfaction'],clusters['Loyalty'],c=clusters['cluster_pred'],cmap='rainbow')
plt.xlabel('Satisfaction')
plt.ylabel('Loyalty')

Практическое применение:

  1. Сегментация клиентов, где набор данных не помечен
  2. Категоризация инвентаря
  3. Поведенческая сегментация

ДБСКАН:

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

Параметры:

  1. Эпсилон: определяет область окрестности точки данных. Если он очень высок, большинство потенциальных кластеров будут объединены. Если он очень низкий, все точки данных будут сформированы в виде кластера.
  2. Мин. баллов: это минимальное количество баллов внутри Эпсилон. Если набор данных очень большой, он также должен быть большим.

Типы точек данных:

  1. Базовая точка : точка считается базовой, если количество точек в пределах расстояния Эпсилон превышает минимально допустимое.
  2. Пограничная точка : точка является пограничной, если в ней меньше минимального количества точек в пределах расстояния Эпсилон и она является окрестностью центральной точки.
  3. Выброс: точка, которая не является ни сердцевиной, ни границей, называется выбросом.

Метод работы :

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

Реализация Python:

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

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

df=pd.read_csv(....//..)
df.describe()
df[].value_counts()
df_dummies=pd.get_dummies(df.drop('unique',axis=1)


def display_categories(model,data)
    labels=model.fit_predict(data)
    sns.scatterplot(data=data,x='X1',y='X2',hue=labels,palette='Set1')

from sklearn.cluster import KMeans
K_Means_model=KMeans(n_clusters=2)
display_categories(K_Means_model,data)

from sklearn.cluster import DBSCAN
DBSCAN_model=DBSCAN(eps=0.15)
display_categories(DBSCAN_model,data)
#for detecting outliers
np.sum(dbscan.labels==-1)
100*np.sum(dbscan.labels==-1)/len(dbscan.labels)

outlier_percent=[]
number_of_outliers=[]
for eps in np.linspace(0.001,10,100):
   dbscan=DBSCAN(eps=eps)
   dbscan.fit(data)
   number_of_outliers.append(np.sum(dbscan.labels==-1))
   perc_outlier=100*np.sum(dbscan.labels==-1)/len(dbscan.labels)
   outlier_percent.append(perc_outlier)
sns.lineplot(x=np.linspace(0.001,10,100),y=number_of_outliers)

  1. KMeans не работает с набором данных, где данные не имеют одинаковой дисперсии во всех направлениях. Но подход, основанный на плотности DBSCAN, улавливает все типы дисперсии данных в любом направлении.
  2. На KMeans сильно влияют выбросы. Метод DBSCAN идентифицирует плотные места, группируя данные вместе, которые закрыты друг от друга при измерении расстояния. Остальные точки будут выбросами.