Kümelenmenin veri çıktısı nasıl çizilir?


15

Bir veri kümesini (işaretler kümesi) kümelemeyi denedim ve 2 küme aldım. Grafiksel olarak temsil etmek istiyorum. (X, y) koordinatlarına sahip olmadığım için temsili biraz karıştı.

Ayrıca bunu yapmak için MATLAB / Python işlevi arıyor.

DÜZENLE

Bence veri yayınlamak soruyu daha açık hale getiriyor. Python (scipy kullanarak) kmeans kümeleme kullanarak yaptığım iki kümeleri var. Onlar

class 1: a=[3222403552.0, 3222493472.0, 3222491808.0, 3222489152.0, 3222413632.0, 
3222394528.0, 3222414976.0, 3222522768.0, 3222403552.0, 3222498896.0, 3222541408.0, 
3222403552.0, 3222402816.0, 3222588192.0, 3222403552.0, 3222410272.0, 3222394560.0, 
3222402704.0, 3222298192.0, 3222409264.0, 3222414688.0, 3222522512.0, 3222404096.0, 
3222486720.0, 3222403968.0, 3222486368.0, 3222376320.0, 3222522896.0, 3222403552.0, 
3222374480.0, 3222491648.0, 3222543024.0, 3222376848.0, 3222403552.0, 3222591616.0, 
3222376944.0, 3222325568.0, 3222488864.0, 3222548416.0, 3222424176.0, 3222415024.0, 
3222403552.0, 3222407504.0, 3222489584.0, 3222407872.0, 3222402736.0, 3222402032.0, 
3222410208.0, 3222414816.0, 3222523024.0, 3222552656.0, 3222487168.0, 3222403728.0, 
3222319440.0, 3222375840.0, 3222325136.0, 3222311568.0, 3222491984.0, 3222542032.0, 
3222539984.0, 3222522256.0, 3222588336.0, 3222316784.0, 3222488304.0, 3222351360.0, 
3222545536.0, 3222323728.0, 3222413824.0, 3222415120.0, 3222403552.0, 3222514624.0, 
3222408000.0, 3222413856.0, 3222408640.0, 3222377072.0, 3222324304.0, 3222524016.0, 
3222324000.0, 3222489808.0, 3222403552.0, 3223571920.0, 3222522384.0, 3222319712.0, 
3222374512.0, 3222375456.0, 3222489968.0, 3222492752.0, 3222413920.0, 3222394448.0, 
3222403552.0, 3222403552.0, 3222540576.0, 3222407408.0, 3222415072.0, 3222388272.0, 
3222549264.0, 3222325280.0, 3222548208.0, 3222298608.0, 3222413760.0, 3222409408.0, 
3222542528.0, 3222473296.0, 3222428384.0, 3222413696.0, 3222486224.0, 3222361280.0, 
3222522640.0, 3222492080.0, 3222472144.0, 3222376560.0, 3222378736.0, 3222364544.0, 
3222407776.0, 3222359872.0, 3222492928.0, 3222440496.0, 3222499408.0, 3222450272.0, 
3222351904.0, 3222352480.0, 3222413952.0, 3222556416.0, 3222410304.0, 3222399984.0, 
3222494736.0, 3222388288.0, 3222403552.0, 3222323824.0, 3222523616.0, 3222394656.0, 
3222404672.0, 3222405984.0, 3222490432.0, 3222407296.0, 3222394720.0, 3222596624.0, 
3222597520.0, 3222598048.0, 3222403552.0, 3222403552.0, 3222403552.0, 3222324448.0, 
3222408976.0, 3222448160.0, 3222366320.0, 3222489344.0, 3222403552.0, 3222494480.0, 
3222382032.0, 3222450432.0, 3222352000.0, 3222352528.0, 3222414032.0, 3222728448.0, 
3222299456.0, 3222400016.0, 3222495056.0, 3222388848.0, 3222403552.0, 3222487568.0, 
3222523744.0, 3222394624.0, 3222408112.0, 3222406496.0, 3222405616.0, 3222592160.0, 
3222549360.0, 3222438560.0, 3222597024.0, 3222597616.0, 3222598128.0, 3222403552.0, 
3222403552.0, 3222403552.0, 3222499056.0, 3222408512.0, 3222402064.0, 3222368992.0, 
3222511376.0, 3222414624.0, 3222554816.0, 3222494608.0, 3222449792.0, 3222351952.0, 
3222352272.0, 3222394736.0, 3222311856.0, 3222414288.0, 3222402448.0, 3222401056.0, 
3222413568.0, 3222298848.0, 3222297184.0, 3222488000.0, 3222490528.0, 3222394688.0, 
3222408224.0, 3222406672.0, 3222404896.0, 3222443120.0, 3222403552.0, 3222596400.0, 
3222597120.0, 3222597712.0, 3222400896.0, 3222403552.0, 3222403552.0, 3222403552.0, 
3222299200.0, 3222321296.0, 3222364176.0, 3222602208.0, 3222513040.0, 3222414656.0, 
3222564864.0, 3222407904.0, 3222449984.0, 3222352096.0, 3222352432.0, 3222452832.0, 
3222368560.0, 3222414368.0, 3222399376.0, 3222298352.0, 3222573152.0, 3222438080.0, 
3222409168.0, 3222523488.0, 3222394592.0, 3222405136.0, 3222490624.0, 3222406928.0, 
3222407104.0, 3222442464.0, 3222403552.0, 3222596512.0, 3222597216.0, 3222597968.0, 
3222438208.0, 3222403552.0, 3222403552.0, 3222403552.0]

class 2: b=[3498543128.0, 3498542920.0, 3498543252.0, 3498543752.0, 3498544872.0, 
3498544528.0, 3498543024.0, 3498542548.0, 3498542232.0]

Onu çizmek istiyorum. Aşağıdakileri denedim ve çizim yaptığımda aşağıdaki sonucu aldım ave b.

pylab.plot(a,'x')
pylab.plot(b,'o')
pylab.show()

resim açıklamasını buraya girin

kümelenmeyi daha iyi görselleştirebilir miyim?


1
Bu gerçekten kümelemeyi yaptığınıza bağlıdır :) Verilerinizin küçük bir örneğini gösterirseniz, bir cevap alacağınızdan eminim
david w

1
Farklı renkler ve işaretçiler kullanmak, okunması en kolay / en kolay olma eğilimindedir. Sahip olduğunuz tek şey 2 küme ise, farklı değerler için 0/1 veya O / X yazdırabilirsiniz.
Marcin

Lütfen ne demek istediğinizi "bir dizi işaret" ile söyleyin. Kümeleri karakterize etmek için kaç değişkeniniz var? Ayrıca, 2'nin kullanmak için en iyi küme sayısı olduğundan emin misiniz? Çoğu zaman küme analiz programlarını tekrar tekrar kullanmak zorundadır; başlangıçta sadece 2 olabilir, ancak bazı ayarlamalar ile daha ilginç ve bilgilendirici daha yüksek bir sayı elde edilebilir.
rolando2

Kümelerin sayısını açıkça vermek zorunda olduğum kmeans kullandım
user2721

@ user2721, kmeans'i nasıl kullandığınızı gösterebilir misiniz?
Sigur

Yanıtlar:


30

Genellikle orijinal değerleri bir dağılım grafiğine (veya çoğunuz varsa dağılım grafikleri matrisine) çizer ve gruplarınızı göstermek için renk kullanırsınız.

Python'da bir cevap istediniz ve aslında tüm kümelenme ve çizmeyi scipy, numpy ve matplotlib ile yapıyorsunuz:

Bazı veriler yaparak başlayın

import numpy as np
from scipy import cluster
from matplotlib import pyplot

np.random.seed(123)
tests = np.reshape( np.random.uniform(0,100,60), (30,2) )
#tests[1:4]
#array([[ 22.68514536,  55.13147691],
#       [ 71.94689698,  42.31064601],
#       [ 98.07641984,  68.48297386]])

Kaç küme?

Bu k-araçlarıyla ilgili zor olan şey ve birçok yöntem var. Dirsek yöntemini kullanalım

#plot variance for each value for 'k' between 1,10
initial = [cluster.vq.kmeans(tests,i) for i in range(1,10)]
pyplot.plot([var for (cent,var) in initial])
pyplot.show()

Dirsek çizimi

Gözlemlerinizi sınıflara atayın ve çizin

Ben dizin 3 (yani 4 küme) herhangi biri kadar iyi olduğunu düşünüyorum

cent, var = initial[3]
#use vq() to get as assignment for each obs.
assignment,cdist = cluster.vq.vq(tests,cent)
pyplot.scatter(tests[:,0], tests[:,1], c=assignment)
pyplot.show()

dağılım grafiği

Yaptığınız her şeyi o iş akışına yapıştırabileceğiniz bir yerde çalışın (ve umarım kümeler rastgele olanlardan biraz daha güzelsiniz!)


Cevabınız harika görünüyor. Verilerim için verimli bir şekilde kullanabilir miyim? Denemek için zaman alamadım.
user2721

@david w: Bu gördüğüm en iyi cevaplardan biri! Bağımsız bir örnek gönderdiğiniz için çok teşekkür ederiz. En azından cevabınızın özünü anlıyorum :) Bir kez daha teşekkür ederim!
Efsane

@david w: Sahip olduğum tek soru dirsek yönteminin artan değerleri ve grafiğinizin azaldığını gösteriyor. Bu bozulma değerlerini doğrudan kmeans'ten kullandığınız için mi? Bunu Wikipedia'nın dirsek grafiğine benzeyecek şekilde nasıl dönüştürebilirim? Ve son bir soru olarak, bunu kmeans2 yerine kmeans2 için nasıl yapacağınızı biliyor musunuz?
Efsane

Sadece ilk arsaya bakarak endeks 3'ü keşfettiniz mi?
Sigur

2

Belki de göreli mesafelerini kullanarak işaret kümenizi çizmek için Fastmap gibi bir şey deneyin .

(yine de) hiçbir şey zekice plothon dizeleri çizmek için yazdı ve kendi mesafe metriğinizi yazdıysanız öznitelik listelerini işlemek için kolayca güncellenebilir.

Aşağıda parametre olarak iki öznitelik listesi alan standart bir öklid mesafesi kullanıyorum. Listeleriniz bir sınıf değerine sahipse, mesafe hesaplamasında kullanmayın.

def distance(vecone, vectwo, d=0.0):
    for i in range(len(vecone)):
        if isnumeric(vecone[i]):
            d = d + (vecone[i] - vectwo[i])**2
        elif vecone[i] is not vectwo[i]:
            d += 1.0
    return math.sqrt(d)

def isnumeric(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

0

Ben bir python uzmanı değilim, ama ilk 2 temel bileşenleri x, y eksenleri üzerinde birbirlerine karşı çizmek son derece yararlıdır.

Hangi paketleri kullandığınızdan emin değilsiniz, ancak örnek bir bağlantı:

http://pyrorobotics.org/?page=PyroModuleAnalysis


Ben bir istatistik uzmanı değilim. Çizim fikri hakkında daha fazla bilgi verebilir misiniz?
user2721

Temel fikir, birçok değişkenin birbiriyle ilişkili olması ve her şeyin birbiriyle ilişkisiz olan ve verilerdeki varyasyonun "çoğunu" açıklayan sadece iki değişkene indirgenebilmesidir. Temel bileşenler analizini okumanız ve uygulamanıza izin veren bir paket uygulamanız gerekir. en.wikipedia.org/wiki/Principal_component_analysis
Ralph Winters
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.