Методы кластеризации и оценки нечетких c-средних
Я пытаюсь использовать кластеризацию Fuzzy c-mean для своих данных. Я хотел бы показать только кластер n = 2. Я пробовал этот код, и он работает, но у меня возникла проблема, если я изменил для печати только кластер 2.
fig1, axes1 = plt.subplots(3, 3, figsize=(20, 10))
alldata = np.vstack((cluDF['Height'], cluDF['time_of_day'],cluDF['resolution']))
fpcs = []
colors = ['b', 'orange', 'g', 'r', 'c', 'm', 'y', 'k', 'Brown', 'ForestGreen']
for ncenters, ax in enumerate(axes1.reshape(-1), 2):
cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(
alldata, ncenters, 3, error=0.005, maxiter=1000, init=None)
fpcs.append(fpc)
# Plot assigned clusters, for each data point in training set
cluster_membership = np.argmax(u, axis=0)
for j in range(ncenters):
ax.plot(cluDF['time_of_day'][cluster_membership == j],
cluDF['Height'][cluster_membership == j],
#rincipalDf['principal component 2'][cluster_membership == j],
'.',
color=colors[j])
ax.set_title('Centers = {0}; FPC = {1:.2f}'.format(ncenters, fpc))
ax.axis('on')
ax.grid()
Это то, что я пытался, и он возвращается пустым.
cluDF
Height time_of_day resolution
272 1.567925 1.375000 0.594089
562 1.807508 1.458333 0.594089
585 2.693542 0.416667 0.594089
658 1.542407 1.458333 0.594089
681 1.930844 0.416667 0.594089
802 1.505548 1.458333 0.594089
axes1 = plt.subplots(1, 1, figsize=(20, 10))
alldata = np.vstack((cluDF['Height'], cluDF['time_of_day'],cluDF['resolution']))
fpcs = []
colors = ['b', 'orange', 'g', 'r', 'c', 'm', 'y', 'k', 'Brown', 'ForestGreen']
ncenters = 2
cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(\
alldata, ncenters, 3, error=0.005, maxiter=1000, init=None)
fpcs.append(fpc)
# Plot assigned clusters, for each data point in training set
cluster_membership = np.argmax(u, axis=0)
for j in range(ncenters):
ax.plot(cluDF['time_of_day'][cluster_membership == j],
cluDF['Height'][cluster_membership == j],'.',
color=colors[j])
ax.set_title('Centers = {0}; FPC = {1:.2f}'.format(ncenters, fpc))
ax.axis('on')
ax.grid()
Кроме того, я хотел бы попросить несколько советов о том, какой метод кластеризации подходит для набора данных с небольшими расстояниями.
Этот набор данных о кластере скачков и неконтролируемых данных. Я пробовал K-среднее, иерархическая связь агломеративной кластеризации = холост и Уорд. Эти результаты не показывают большой разницы, интересно, если есть какой-либо метод оценки.