2010-02-20 19 views
11

İşte senaryo'm. Çeşitli yerlerde ve zamanlarda meydana gelen bir dizi olay düşünün - örnek olarak, bir fırtına sırasında bir şehirde yıldırım çarpmalarını kaydetmenin üstünde birisini düşünün. Amacım için, şimşekler anlıkdır ve sadece belirli yerlere çarpabilir (yüksek binalar gibi). Ayrıca, her yıldırım çarpmasının kendine özgü bir id iddiası olduğunu düşünün, böylece daha sonra greve başvurabilirsiniz. Bu şehirde yaklaşık 100.000 civarında konum var (tahmin edeceğiniz gibi, bu benim şu anki işverenimin asıl sorun hakkında duyarlı olması gibi bir benzeşimdir). faz 1 içinBir zaman dizisinde bilinmeyen sayıda kümeyi tespit etmek için hangi veri kümeleme algoritması uygundur?

, benim girişi (strike id, grev zamanında, grev konum) tuples kümesidir. İstenen çıktı, kısa bir süre içinde aynı konuma vuran 1'den fazla etkinliğin kümeleri kümesidir. Kümelenme sayısı önceden bilinmemektedir (bu yüzden k-araçları burada yararlı değildir). Belirli bir kümelenme girişimi için 'kısa' olarak kabul edilen şey önceden tanımlanabilir. Yani, algoritmayı çalıştırmaya 3 dakika kadar ayarlayabilirim; Daha sonra 4 dakika veya 10 dakika ile deneyin. Belki de algoritmanın, kümelenmenin bir “gücünü” belirlemesi ve verilen bir girdi için en kısa kümelenmenin “kısa” için belirli bir değer kullanılarak elde edilmesi tavsiye edilir, ancak bu başlangıçta gerekli değildir.

Faz 2 için ben dikkate grev (yani gerçek sayı) genliğini alıp kısa bir süre içinde ve benzeri genlikli hem kümeler için bakmak istiyorum.

Ben googled ve veri kümeleme hakkında burada cevapları kontrol etti. Bilgi biraz şaşkın (aşağıda bulduğum bağlantıların listesi aşağıdadır). AFAIK, k-araçları ve ilgili algoritmalar, apriori belirtilecek küme sayısını gerektirdiğinden kullanışlı olmayacaktır. Sorunu çözmek için birilerinin sormasını istemiyorum (çözmeyi seviyorum), fakat veri kümelemesi algoritmalarının büyük dünyasındaki bir yönelim, zaman kazanmak için faydalı olacaktır. Spesifik olarak, kümelenme sayılarının bilinmediği durumlarda hangi küme algoritmalarının uygun olduğu.

Düzenleme: Konumun her zaman gerçekleşmesine rağmen, yalnızca konumlarına göre kümesini ayarlamanız gerektiği anlamında, konumun alakasız olduğunu fark ettim. Dolayısıyla, her bir yerin, bağımsız olarak analiz edilebilecek kendi zaman serisi olayları vardır.

Bazı teknik ayrıntılar:
- veri kümesi o kadar büyük değil, tüm belleğe sığabilir.
- Paralel işlemeye sahip olmak çok güzel fakat önemli değil. Sadece 4 çekirdekli bir makinem var ve MapReduce ve Hadoop çok fazla olurdu.
- en çok bildiğim dil Java'dır. Henüz R kullanmamıştım ve bunun için öğrenme eğrisi, ne zaman verildiğim için muhtemelen çok fazla olurdu. Boş zamanlarımda bir göz atacağım.
- Şu an için, analizi çalıştırmak için araçlar kullanmak yeterlidir, sadece kod üretmek zorunda değilim. Bundan bahsediyorum çünkü muhtemelen Weka önerilecektir.
- görselleştirme yararlı olacaktır. Veri kümesi belleğe sığmayacak kadar geniş olduğundan, görselleştirme en azından yakınlaştırmayı ve kaydırmayı desteklemelidir. Ve açıklığa kavuşturmak için: Bir görselleştirme GUI oluşturmama gerek yok, sadece bir araçla üretilen sonuçları kontrol etmek için kullanmak için güzel bir özellik.

Teşekkür ederiz. Ben yararlı buldum Sorular şunlardır: How to find center of clusters of numbers? statistics problem?, Clustering Algorithm for Paper Boys, Java Clustering Library, How to cluster objects (without coordinates), Algorithm for detecting "clusters" of dots

+0

Sadece kesin olmak gerekirse: noktaları içeren mahallenin boyutu (veri noktaları arasındaki maksimum mesafenin aksine) kümeleme parametresi mi? Bir veri noktası birden fazla kümenin üyesi olabilir mi? Örneğin, 3 dakikalık bir küme parametresiyle, yıldırım çarpışmalar arasında iki dakika ile Empire State'e üç kez çarptıysa, kümeler nelerdir? – outis

+0

Kümeleme parametresi, bitişik olaylar arasındaki maksimum mesafedir. Bir kümede kaç kişi olması gerektiği; Aslında bu analizin temel amacı, hangi olayların birlikte gerçekleşen olayları tanımlamaktır (gerçek dünyada, diğerlerinden daha yakın olan grevlerin daha fazla analiz edilmesi gerekmektedir). Bir veri noktası yalnızca 1 kümenin parçası olabilir (bu yüzden bulanık kümeleme yapılamaz). Yukarıdaki açıklamayla, bir kümenin parametresi bitişik noktalar arasındaki maksimum mesafe, 3 dakikalık bir değer, tüm bu grevleri 1 kümeye yerleştirir. – wishihadabettername

+0

Daha fazla googling yaptıktan sonra (RapidMiner) [http://www.rapidminer.com] hakkında bir dizi kümeleme algoritmasına sahip olduğunu öğrendim (merak ettikleri için: k-Means, k-Means (Kernel), k -Medoids, DBSCAN, Beklenti Maksimizasyonu Kümeleme, Destek Vektör Kümeleme, Rastgele Kümeleme, Toplama Kümeleme, Top Down Kümeleme, Düz Kümeleme, Extract Küme Prototipleri) ve Weka eklentisi (Weka: W-CLOPE, W-Cobweb, W -EM, W-FarthestFirst, W-HierarchicalClusterer, W-SimpleKMeans, W-XMeans, W-sIB). Pek aşina değilim, bir kahve almam ve öğrenmem gerekiyor. – wishihadabettername

cevap

1

hierarchical clustering, mesafe metriğinin bir parçası olarak grev zamanlarındaki farkla birlikte kullanamaz mısınız?

+1

Bu mükemmel bir öneridir ve cevap olmak için çok şey gözükmektedir. Birkaç dakika içinde okuduğumdan, bu algoritmanın tek linkli varyantı en uygun olanıdır. Bu algoritma hakkında bir ton bilgi var (ben de [video dersi] buldum (http://videolectures.net/epsrcws08_teh_hc)) bu yüzden gidip okuyup yarın döneceğim. Teşekkür ederim! – wishihadabettername

2

Sana Mean Shift Clustering içine bakmak öneririz.Ortalama vardiya kümelenmesinin ardındaki temel fikir, verileri almak ve bir kernel density estimation gerçekleştirmek, daha sonra yoğunluk tahminindeki modları bulmak, veri noktalarının küme yönlerini kestirmek için kümeleri tanımlar.

Ortalama kaydırma kümeleme hakkında güzel olan şey, kümelerin sayısının önceden belirtilmesi gerekmemesidir.

Weka'yı kullanmadım, bu yüzden ortalama kaydırma kümelenmesi olup olmadığından emin değilim. Ancak MATLAB kullanıyorsanız, bunu yapmak için bir araç kutusu (KDE toolbox). Umarım yardımcı olur.

+0

Teşekkür ederim, o kağıtları okuyacağım ve düşüneceğim. Başlangıçta MATLAB kullanmayı planlıyorum ama Octave ile çalışmamı engelleyen hiçbir şey yok. – wishihadabettername

0

Çok geç, ama yine de bunu eklemek istiyorum:

R olarak, bir paket fpc vardır ve size kümeleri sağlayan bir yöntem pamk() sahiptir. pamk()'u kullanarak, küme sayısını özellikle belirtmeniz gerekmez. Giriş verilerindeki kümelerin sayısını kendisi hesaplar.

İlgili konular