如何使用 seaborn 绘制集群的质心
How to plot the cluster's centroids using seaborn
基本上,我想这样画:
我已经设法使用
绘制了集群
sns.scatterplot(X[:,0], X[:,1], hue=y, palette=['red', 'blue', 'purple', 'green'], alpha=0.5, s=7)
结果为
如何像上图一样精确定位质心?
你可以计算每组的平均值,然后在那个位置画一个散点。
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
N = 1000
X0 = np.random.normal(np.repeat(np.random.uniform(0, 20, 4), N), 1)
X1 = np.random.normal(np.repeat(np.random.uniform(0, 10, 4), N), 1)
X = np.vstack([X0, X1]).T
y = np.repeat(range(4), N)
colors = ['red', 'blue', 'purple', 'green']
ax = sns.scatterplot(X[:, 0], X[:, 1], hue=y, palette=colors, alpha=0.5, s=7)
means = np.vstack([X[y == i].mean(axis=0) for i in range(4)])
ax = sns.scatterplot(means[:, 0], means[:, 1], hue=range(4), palette=colors, s=20, ec='black', legend=False, ax=ax)
plt.show()
或者,Scikit Learns 的 KMeans
可用于计算 KMeans 标签和均值:
from sklearn.cluster import KMeans
from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns
N = 500
X0 = np.random.normal(np.repeat(np.random.uniform(0, 20, 20), N), 3)
X1 = np.random.normal(np.repeat(np.random.uniform(0, 10, 20), N), 2)
X = np.vstack([X0, X1]).T
num_clusters = 4
kmeans = KMeans(n_clusters=num_clusters).fit(X)
colors = ['red', 'blue', 'purple', 'green']
ax = sns.scatterplot(X[:, 0], X[:, 1], hue=kmeans.labels_, palette=colors, alpha=0.5, s=7)
ax = sns.scatterplot(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
hue=range(num_clusters), palette=colors, s=20, ec='black', legend=False, ax=ax)
plt.show()
基本上,我想这样画:
我已经设法使用
绘制了集群sns.scatterplot(X[:,0], X[:,1], hue=y, palette=['red', 'blue', 'purple', 'green'], alpha=0.5, s=7)
结果为
如何像上图一样精确定位质心?
你可以计算每组的平均值,然后在那个位置画一个散点。
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
N = 1000
X0 = np.random.normal(np.repeat(np.random.uniform(0, 20, 4), N), 1)
X1 = np.random.normal(np.repeat(np.random.uniform(0, 10, 4), N), 1)
X = np.vstack([X0, X1]).T
y = np.repeat(range(4), N)
colors = ['red', 'blue', 'purple', 'green']
ax = sns.scatterplot(X[:, 0], X[:, 1], hue=y, palette=colors, alpha=0.5, s=7)
means = np.vstack([X[y == i].mean(axis=0) for i in range(4)])
ax = sns.scatterplot(means[:, 0], means[:, 1], hue=range(4), palette=colors, s=20, ec='black', legend=False, ax=ax)
plt.show()
或者,Scikit Learns 的 KMeans
可用于计算 KMeans 标签和均值:
from sklearn.cluster import KMeans
from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns
N = 500
X0 = np.random.normal(np.repeat(np.random.uniform(0, 20, 20), N), 3)
X1 = np.random.normal(np.repeat(np.random.uniform(0, 10, 20), N), 2)
X = np.vstack([X0, X1]).T
num_clusters = 4
kmeans = KMeans(n_clusters=num_clusters).fit(X)
colors = ['red', 'blue', 'purple', 'green']
ax = sns.scatterplot(X[:, 0], X[:, 1], hue=kmeans.labels_, palette=colors, alpha=0.5, s=7)
ax = sns.scatterplot(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
hue=range(num_clusters), palette=colors, s=20, ec='black', legend=False, ax=ax)
plt.show()