1. км означает
kmeans, алгоритм кластеризации k-средних, который реализует алгоритм для обнаружения k кластеров набора данных, каждый кластер описывается его центром тяжести.
км означает шаги: (1) Случайным образом найти k точек в качестве центроидов (начальных точек); (2) Рассчитать расстояние от других точек до k семян и выбрать ближайшую из них в качестве категории точки; (3) Обновите центроиды различных типов и повторяйте до тех пор, пока центроиды не останутся неизменными.
Q: Как выбрать значение k?
A: График производительности модели при различных значениях k. Абсцисса — это количество кластеров k, а ордината — сумма расстояний от каждой точки до центра. K в точке перегиба (расстояние и скорость спуска становятся медленнее) в качестве выбранного значения.
2. км означает++
Поскольку начальное начальное значение kmeans находится случайно, скорость сходимости алгоритма очень тесно связана с начальным значением, поэтому kmeans++ в основном улучшает выбор начального значения. Выбор начального значения выглядит следующим образом:
1. Семя также выбирается случайным образом; 2. Вычислить расстояние от других точек до этого начального числа; 3. Выберите точку с этими большими расстояниями, чтобы заменить случайно выбранное начальное число в качестве новой исходной точки (большее расстояние здесь можно понимать как maxDistance*случайное число, а случайное число может быть выбрано из диапазона 0,5-1;); 4. Повторяйте шаги 1-3, пока не будет выбрано k семян.
3. Оцените эффект кластеризации
Метод коэффициента контура SC
Коэффициент силуэта объединяет сплоченность и разделение кластеров для оценки эффекта кластеризации. Значение находится в диапазоне от -1 до 1, и чем больше значение, тем лучше эффект кластеризации. этапы расчета: (1) Выберите точку, вычислить среднее расстояние от этой точки до всех других элементов в том же кластере, обозначенное как, количественно оценить степень сплоченности внутри кластера; (2) Выберите еще один кластер и рассчитайте среднее расстояние от точки до кластера. Выберите значение с наименьшим средним расстоянием между точкой и другими кластерами, обозначенное как, который используется для количественной оценки степени разделения между кластерами. (3) Для точек выборки, коэффициент силуэта равен:
a(i): среднее различие между вектором i и другими точками в том же кластере. b(i) : минимальное значение средней непохожести вектора i на другие кластеры.Когда коэффициент силуэта
Следовательно, коэффициент силуэта можно использовать для определения значения K среднего значения K, и K с наибольшим коэффициентом силуэта выбирается в качестве окончательного числа классов.
(2)ошибка сумма квадратов
4. Другие вопросы
(1) Сойдутся ли средние значения?Целевая функция kmeans:Шаг E: Оцените скрытые переменные, категорию, к которой принадлежит каждый образецШаг M: Назначение фиксированных точек данных, обновление параметровПоскольку EM-алгоритм является сходящимся, kmeans в конечном итоге также сойдутся.
(2) Разница между Kmeans и KNN
КНН:
алгоритм классификации; контролируемое обучение; Набор данных — это данные с меткой; Нет очевидного тренировочного процесса, основанного на обучении на основе памяти;
Значение значения K - для выборки X, чтобы классифицировать ее, сначала из набора данных найдите K ближайших к ней точек данных рядом с X и разделите ее на класс, который принадлежит к большинству категорий.
К-означает:
алгоритм кластеризации; обучение без учителя; Набор данных представляет собой дезорганизованные данные без меток; Есть четкий тренировочный процесс;
Значение значения K - K - это заранее установленное число, набор данных разделен на кластеры K, он должен полагаться на предварительные знания человека.
разница:
Фундаментальное различие между этими двумя алгоритмами заключается в том, что K-средние — это, по сути, обучение без учителя, а KNN — обучение с учителем; K-средние — это алгоритм кластеризации, а KNN — это алгоритм классификации (или регрессии).
Алгоритм K-средних делит набор данных на кластеры так, чтобы сформированные кластеры были изоморфны, а точки в каждом кластере были близки друг к другу. Алгоритм пытается поддерживать достаточную разделимость между этими кластерами. Из-за неконтролируемого характера эти кластеры не имеют меток. Алгоритм KNN пытается классифицировать непомеченное наблюдение на основе его k (которое может быть любым числом) окружающих его соседей. Его также называют ленивым обучением, потому что оно предполагает минимальное обучение модели. Следовательно, он не распространяется на невидимые наборы данных без обучающих данных.
5. Практика
Kmeans код Python:
import numpy as np
class KMeans(object):
def __init__(self, n_cluster, epochs=10):
self.n_cluster = n_cluster
self.epochs = epochs
pass
def init_centers(self, X):
idx = np.random.randint(len(X), size=(self.n_cluster,))
centers = X[idx,:]
return centers
def calculate_distance(self,arr1,arr2):
# L2 distance.
distance = np.mean(np.sqrt((arr1-arr2)**2))
return distance
def update_centers(self, X):
predict_class = self.predict(X)
# update centers
centers = self.centers
for ct in range(len(centers)):
idx, = np.where(predict_class == ct)
samples = X[idx, :]
assert len(samples)>0
centers[ct] = np.mean(samples,axis=0)
self.centers = centers
return self.centers
def fit(self, X, y=None):
self.centers = self.init_centers(X)
for epoch in range(self.epochs):
self.centers = self.update_centers(X)
return self.centers
def predict(self,X):
predict_class = np.zeros(shape=(len(X),))
centers = self.centers
for n_sample,arr in enumerate(X):
min_distance = float("inf")
p_class = 0
for ct in range(len(centers)):
distance = self.calculate_distance(arr,centers[ct])
if distance < min_distance:
min_distance = distance
p_class = ct
predict_class[n_sample] = p_class
return predict_class
def score(self, X):
pass
Пример: Задайте 3 распределения Гаусса.
np.random.seed(1)
data1 = np.random.normal(1, 0.5, size=(100, 2))
np.random.seed(1)
data2 = np.random.normal(4, 0.8, size=(100, 2))
np.random.seed(1)
data3 = np.random.normal(7, 0.8, size=(100, 2))
X = np.concatenate((data1, data2, data3),axis=0)#np.random.randint(10,size=(100,2))
print(X.shape)
kmeans = KMeans(3)
centers = kmeans.fit(X)
print(centers)
Визуализируйте результаты кластеризации:
# Generate scatter plot for training data
import matplotlib.pyplot as plt
plt.scatter(X[:,0], X[:,1], marker="o", picker=True)
plt.title('Clusters of data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.scatter(centers[:,0], centers[:,1], marker="v", picker=True)
plt.show()
Ссылаться на:
- kmeans++_Rakuten Notes;
- kmeans_cool оболочка;
- Как определить значение k k-средних?;
- sklearn kmeans;
- Коэффициент силуэта энциклопедии;
- Сходимость алгоритма EM и сходимость K-средних;
- Разница между KNN и KMeans
В этой статье используетсяmdniceнабор текста