Методы кластеризации и оценки нечетких 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-среднее, иерархическая связь агломеративной кластеризации = холост и Уорд. Эти результаты не показывают большой разницы, интересно, если есть какой-либо метод оценки.

0 ответов

Другие вопросы по тегам