1D verilerini kümeleme


16

Ben bir veri kümesi var, ben sadece bir değişkene dayalı veri üzerinde kümeler oluşturmak istiyorum (eksik değer yok). Bu tek değişkene dayalı 3 küme oluşturmak istiyorum.

Hangi kümeleme algoritması kullanılacak, k-araçları, EM, DBSCAN vb.

Benim asıl sorum şu durumlarda EM-k yerine EM-k'yi veya k-ortalamaları yerine EM'yi ne şekilde kullanmalıyım?


1
EM algoritması, eksik verilerle maksimum olabilirlik tahmini yapmak için genel amaçlı bir araçtır - bunun bir "kümeleme algoritması" olduğu konusunda daha spesifik olabilir misiniz?
Makro

Weka'yı bir araç olarak kullanıyorum ve kümeleme algoritması altında EM bir algoritma olarak listeleniyor. Topal soru için özür dilerim, veri madenciliğinde yeniyim.
Ali

EM algoritmasının gizli değişken modelleri ("eksik veri" olarak düşünülebilir) için maksimum olasılık tahmini yapmak için kullanıldığını ve gizli değişkenlerin genellikle kümelenmeyi modellemek için kullanıldığını biliyorum. Belki de kastedilen budur.
Makro

@macro: buraya bir göz atmak isteyebilirsiniz : başlangıç için stat.washington.edu/mclust .
user603

3
Kümelenmenin amacı nedir? Çoğu istatistiksel soruda olduğu gibi, birden fazla cevap vardır ve amacın bilinmesi uygun veya iyi soruları seçmek için önemli bir rehberdir.
whuber

Yanıtlar:


11

K-ortalama algoritması ve EM algoritması 1D kümelemesi için oldukça benzer olacaktır.

K-araçlarında, araçların nerede olduğu tahminiyle başlar ve her noktayı en yakın ortalama ile kümeye atarsınız, daha sonra ortalama nokta atamalarına göre araçları (ve varyansları) yeniden hesaplar, sonra noktaların atanmasını günceller, sonra günceller anlamı ...

EM'de ayrıca araçların nerede olduğunu tahmin edersiniz, o zaman ödevlerin beklenen değerini (esas olarak her bir kümedeki her bir noktanın olma olasılığı) hesaplarsınız, sonra beklenen değerleri kullanarak tahmini araçları (ve varyansları) güncellersiniz ağırlıklar olarak, yeni beklenen değerleri hesaplayın, sonra yeni araçlar hesaplayın, ...

Birincil fark, K-araçlarında kümelere nokta tahsis edilmesinin, EM'nin grup üyeliği oranlarını / olasılığını verdiği bir ya da hiçbir şey olmamasıdır (bir nokta, A grubunda% 80 olma olasılığı,% 18 olasılık olarak görülebilir. B grubunda olma ve% 2 C grubunda olma olasılığı). Gruplar arasında çok fazla ayrılık varsa, 2 yöntem oldukça benzer sonuçlar verecektir. Ancak, makul miktarda çakışma varsa, EM muhtemelen daha anlamlı sonuçlar verecektir (varyans / standart sapma ilgiliyse daha da fazla). Ancak, umursadığınız tek şey parametreleri umursamadan grup üyeliği atamaksa, K-araçları muhtemelen daha basittir.

Neden her ikisini de yapmıyor ve cevapların ne kadar farklı olduğunu görmüyorsunuz? benzer ise, daha basit olanla devam edin, eğer farklılarsa, gruplandırmayı verilerle dış bilgilerle karşılaştırmaya karar verin.


Mesajınız için teşekkürler greg, her ikisini de uyguladım ve EM'nin k-mean'den daha iyi kümeler oluşturduğu anlaşılıyor. (Bence esas olarak elimdeki veriler sürekli ve boşluklar yok). Biraz kafam karıştı, çünkü sadece 1D verilerim var, o zaman muhtemelen verileri kategorilere ayırmak için binning yapmalıyım. Ne düşünüyorsun? Parametrelerle tam olarak ne demek istiyorsun? Bir örneğin niteliklerine atıfta bulunuyor mu? Teşekkürler Ali
Ali

Hm EM tek başına yetersiz görünüyor. Karışımın altında yatan dağılımların dağılımı hakkında bir varsayım gerekir.
tomka

2

EM, sonuç olarak k-araçlarından daha iyidir.

Bununla birlikte, K-araçları daha hızlı çalışma süresine sahiptir.

Standart sapma / kovaryans matrisleri yaklaşık olarak eşitse benzer sonuçlar verecektir. Bunun doğru olduğundan şüpheleniyorsanız, k-means kullanın.

DBSCAN, veriler gauss dışı olduğunda kullanılır. 1 boyutlu veriler kullanıyorsanız, bu genellikle geçerli değildir, çünkü bir gauss yaklaşımı genellikle 1 boyutta geçerlidir.


0

Diğer bir basit yol, temel olarak 1D dizisinin sıralamasını kullanmaktır: yani her nokta üzerinde yineleme yapmak ve hem pozitif hem de negatif yönde minimum mesafede olan değerleri elde etmektir. Örneğin:

data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
   print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}

verecek:

{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}

Hangi nokta, belirli bir noktaya yakın öğeler temelde kendi grubunun altında. Bu teknikte düşünülmesi gereken tek şey, kümenin sabit boyutu olan değişken k'dir :-).


-2

Tek bir değişken varsa kümelemeye gerek yoktur. Gözlemlerinizi değişkenin dağılımına göre kolayca gruplayabilirsiniz.

Yoksa burada bazı noktaları kaçırıyor muyum?


5
Değişkenin dağılımına göre gözlemlerin nasıl gruplandırılacağına dair özel bir örnek verebilir misiniz?
Ali

@ composer314: bir histogramla mı?
nico

1
Üzgünüm, ama hala takip etmiyorum. İlgili gözlemleri gruplandırmak için bir histogramı nasıl kullanabilirim? (Ben soruyor olabilirsiniz soru histogram içinde bir bulmak kümelerini nasıl yaptığını gerçekten sanırım misiniz bu spektral pik toplama benzer?)
Ali

5
@composer Histogramın veya verilerin düzgün bir şekilde çekirdeğinin kullanılması genellikle kümelenmenin "kolay" bir yolu değildir . Bu şekilde gitmek istiyorsanız, sonlu bir karışım modeli takmanız gerekir . Sadece bir histogramın rahat bir görünümünü önermek istiyorsanız, K-araçlarını kullanın ( haritacılar arasında popüler olan Jenks yöntemi olarak da bilinir ).
whuber
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.