Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Сегодня поговорим о типичной проблеме кластеризации K-средних и ее кодовой реализации.
Сфера
- Снижение размерности, проблема кластеризации
- генеративная модель
неконтролируемое обучение
- трудно оценить
- Сложно настроить
проблема кластеризации
Лично я считаю, что это относительно простой и понятный алгоритм машинного обучения, но он имеет определенную практичность.
один пример
Предположим, мы проводим анализ групп покупателей в супермаркете.Разные покупатели имеют разные заботы.Разных покупателей можно разделить на разные группы в соответствии с их характеристиками, но мы не знаем, как делить и делить их на эти группы. Мы можем позволить детям без каких-либо знаний попытаться классифицировать животных, и они могут сделать простую классификацию животных по некоторым характеристикам, таким как размер и цвет животного, есть ли у них крылья или нет.
Сгруппировать похожие вещи
K-means
k-means — это неконтролируемый алгоритм нахождения центров кластеров. K-means — метод итерационной неопределенности (сколько задано k — сложность k-means) Так называемая итерация означает, что каждый кластер, сгенерированный повторяющимися шагами алгоритма, может быть оценен по следующим показателям.
-
Расположение кластера: найти координаты центра кластера, когда инициализируется k-means, в качестве центральной точки случайным образом выбирается точка, а затем каждый шаг итеративно находит новый центр, точки возле нового центра похожи и делятся на одну группу
-
Затем решите, что каждый образец принадлежит к определенной категории $b_1^n = \begin{cases} 1
0
\end{cases}$
- Радиус кластера: средняя разница в расстоянии от каждой точки внутри кластера до центра кластера.
- размер кластера: общее количество точек в кластере
- Плотность кластера: отношение размера кластера к радиусу кластера
- Затем обновите центральную позицию каждого кластера
расстояние
Расстояние Мин
для точек выборкии точки выборки
В соответствии с расстоянием Мина мы получаем манхэттенское расстояние, евклидово расстояние и расстояние Чебышева в соответствии с различными значениями p.
Манхэттенское, евклидово и чебышевское расстояния.
- Манхэттенское расстояние (блочное расстояние), когда p = 1
- Когда p = 2, евклидово расстояние
- когдаРасстояние Чебышева
Оценка моделей K-средних
Как оценить качество выходных кластеров?Поскольку это неконтролируемая проблема, невозможно дать метод оценки, такой как точность, отзыв, точность, оценка F1 или другие подобные показатели.Мы будем использовать так называемый коэффициент силуэта для оценки результатов Kmeans. Фактор силуэта имеет значение от -1 до 1.
- Отрицательное значение указывает на то, что радиус кластера больше, чем расстояние между кластерами, то есть между двумя кластерами есть перекрытие.
- Чем больше значение, то есть чем ближе к 1, тем лучше результат кластеризации.
фактор силуэта
Мы знаем, что коэффициент силуэта используется для измерения качества модели Kmean, так как же нам рассчитать коэффициент силуэта.
- Представляет среднее расстояние от точки i в кластере C до других точек в кластере.
- Затем вычислить среднее расстояний от точки i до всех точек в других кластерах и выбрать среди них наименьшее
Среднее значение коэффициентов силуэта всех точек в каждом кластере можно использовать для измерения качества кластера, а среднее значение коэффициентов силуэта всех точек можно использовать для измерения качества кластеризации.
def get_random_data():
x_1 = np.random.normal(loc=0.2,scale=0.2,size=(100,100))
x_2 = np.random.normal(loc=0.9,scale=0.1,size=(100,100))
#np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat()
x = np.r_[x_1,x_2]
return x
x = get_random_data()
# plt.cla()
plt.figure()
plt.title("Generated Data")
plt.scatter(x[:,0],x[:,1])
plt.show()
print(x.shape)
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
def form_clusters(x,k):
# k 是划分出的簇的个数
no_clusters = k
model = KMeans(n_clusters=no_clusters,init='random')
model.fit(x)
labels = model.labels_
# print(labels)
# 计算轮廓系数
sh_score = silhouette_score(x,labels)
return sh_score
sh_scores = []
for i in range(1,5):
sh_score = form_clusters(x,i+1)
sh_scores.append(sh_score)
no_clusters = [i+1 for i in range(1,5)]
plt.figure(2)
plt.plot(no_clusters,sh_scores)
plt.title("Cluster Quality")
plt.xlabel("No of clusters k")
plt.ylabel("Sihouette Coefficient")
plt.show()
k-means - это итеративный алгоритм, примерно шаги следующие:
- Случайным образом выберите k точек из набора данных в качестве начальных центральных точек кластеров.
- Затем выполните следующие действия до сходимости
- Назначьте точку ближайшему центру кластера и рассчитайте расстояние между этой точкой и точкой центра кластера.
- Пересчитайте центры кластеров на основе точек, назначенных во время этой итерации.
- Если точки распределения такие же, как и в предыдущей итерации, алгоритм сходится к оптимальному решению и выходит из цикла.
Базовые концепты
- Чтобы получить количество кластеров, нужно указать значение k
- Центроид: среднее значение, то есть среднее значение каждого измерения вектора может быть
- Метрики расстояния: обычно используемые евклидово расстояние и косинусное сходство.
- оптимизировать цель:
алгоритм kmean
- указать кластер k
- Инициализируйте центроиды кластеров k. Есть два способа инициализировать центроиды.
- Случайный метод: это лучше понять, чтобы случайным образом указать инициализированный центроид
- Метод наибольшего расстояния:
- Рассчитайте расстояние от каждой точки выборки до центра тяжести различных групп по очереди и назначьте каждую точку выборки ближайшему центру тяжести в соответствии с принципом минимального расстояния.
- После назначения каждой точки выборки обновите центр тяжести каждого кластера.Формула расчета центроида алгоритма Kmeans представляет собой средний вектор всех точек выборки в кластере, аФормула для вычисления центра масс:
- Определить, выполнено ли условие остановки
- указать количество итераций
- Задает порог диапазона смещения центроидаесли
алгоритм kmean
- технический подход
Предполагается, что каждая выборка находится как можно ближе к кластеру, к которому она относится, и как можно дальше от других кластеров, что соответствует коэффициенту силуэта точки выборки i.
-
такое же расстояние
-
расстояние от инопланетян
-
Аналогичное расстояние
-
Неоднородное расстояние
-
На самом деле мы не вычисляем расстояние между точкой выборки и каждой точкой выборки других категорий, а вместо этого вычисляем расстояние между точкой выборки и центроидом других категорий.
-
деловой подход
После того, как наша кластеризация завершена, нам нужно наблюдать за результатами классификации, а затем сделать вывод, есть ли у этих групп соответствующие бизнес-сценарии.
Вопросы кластеризации
- Нормализация данных непрерывного типа
Поскольку мы выбираем разные единицы измерения, наши данные будут сильно различаться, что также повлияет на расчет расстояния. Поэтому вам необходимо стандартизировать данные, прежде чем выполнять кластеризацию.
- Категориальная стандартизация данных
Поскольку расчет расстояния алгоритма кластеризации предназначен для числовых переменных, когда переменные включают категориальные переменные, алгоритм кластеризации не может обрабатывать их напрямую, вместо этого категориальные переменные должны обрабатываться численно и вводятся фиктивные переменные.
записывать | x | |||
---|---|---|---|---|
1 | A | 1 | 0 | 0 |
2 | A | 0 | 1 | 0 |
3 | A | 0 | 0 | 1 |
Однако стоит отметить, что хотя метод фиктивных переменных используется для решения задачи расчета расстояния категориальных переменных, расчет с использованием фиктивных переменных приведет к тому, что вес категориальных переменных будет больше, чем другие числовые переменные. Например, как показано в приведенной выше таблице, хотя запись 1 и запись 2 разнесены только на один уровень, но расстояние между ними по переменной x становится равным
Для обеспечения того, чтобы веса категориальных переменных согласовывались с весами числовых переменных, фиктивные переменные также будут стандартизированы.