Не очень понятно, чего вы пытаетесь добиться здесь. Kmeans работает, минимизируя прозрачное расстояние внутри кластеров, поэтому здесь не так уж много вероятности. Чтобы рассчитать вероятность, вам нужно сделать определенные предположения, например, данные в кластере следуют многомерному гауссову. Ниже приведена приблизительная оценка, и она действительно зависит от ваших данных.
Обратите внимание, что при 1 итерации средние значения могут немного измениться в зависимости от вашего набора данных, например:
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture
import matplotlib.pyplot as plt
cts = np.array([[1,1],[2,2],[3,3]])
X, y_true = datasets.make_blobs(n_samples=100,
centers=cts,
cluster_std=0.30,
random_state=0)
plt.scatter(X[:,0],X[:,1],c=y_true)
Теперь, если мы запустим kmeans, как в этом посте, средства изменятся (немного):
kmeans = KMeans(n_clusters=3, random_state=0,
init = cts,
n_init=1).fit(X)
kmeans.cluster_centers_
array([[0.99526578, 1.00152973],
[1.99987588, 2.10819314],
[2.94674517, 2.96792463]])
И чтобы ответить на ваш вопрос, чтобы использовать GMM для получения приблизительной вероятности на основе результатов kmeans, мы можем сделать:
clf = GaussianMixture(n_components=3, covariance_type='spherical',
means_init = kmeans.cluster_centers_ ,n_init= 1 ,max_iter=1)
clf.fit(X)
clf.predict_proba(X)
person
StupidWolf
schedule
18.04.2021