Birisi bana girişte mesafe matrisini alabilecek bir k-araç uygulaması (matlab'da daha iyi olurdu) gösterebilir mi? Standart matlab uygulaması girdi olarak gözlem matrisine ihtiyaç duyar ve benzerlik ölçüsünü özel olarak değiştirmek mümkün değildir.
Birisi bana girişte mesafe matrisini alabilecek bir k-araç uygulaması (matlab'da daha iyi olurdu) gösterebilir mi? Standart matlab uygulaması girdi olarak gözlem matrisine ihtiyaç duyar ve benzerlik ölçüsünü özel olarak değiştirmek mümkün değildir.
Yanıtlar:
K-araçlarının kümelemek istediğiniz noktaların farklı alt kümelerinin araçlarını bulması gerektiğinden , girdi olarak bir mesafe matrisi alan k-araçlarının bir sürümünü istemek gerçekten mantıklı değildir.
Bunun yerine k-medoidleri deneyebilirsiniz . Orada bazı matlab uygulamaları mevcuttur.
Mesafeler matrisinizi ham verilere dönüştürebilir ve bunları K-Ortalama kümelenmesine girebilirsiniz. Adımlar aşağıdaki gibi olacaktır:
1) N noktalarınız arasındaki mesafeler, öklid kare şeklinde olmalıdır. Matrisin " çift merkezleme " işlemini gerçekleştirin : Her elemandan alt özet satır ortalaması; sonuçta, her elemandan alt-özet sütun ortalaması; sonuç olarak, her bir öğeye matris ortalaması ekleyin; Şimdi eksi 2'ye bölün. Kökeni N nokta bulutunun geometrik merkezine yerleştirdiğiniz noktalarınız arasındaki SSCP (karelerin toplamı ve çarpı çarpımı) matrisi. ( Burada çift merkezlemenin açıklamasını okuyun .)
2) Bu matris üzerinde PCA (Ana bileşen analizi) gerçekleştirin ve NxN bileşen yükleme matrisini elde edin . Son sütunlarının bazıları muhtemelen 0 olacaktır - bu yüzden onları kesin. Şimdi kaldığınız şey asıl bileşen puanları, N noktalarınızın koordinatları, bulutunuzdan eksenler olarak geçen ana bileşenlere. Bu veriler K-Ortalamalar girdisi için uygun ham veri olarak değerlendirilebilir.
PS Mesafeleriniz geometrik olarak doğru kareli öklidik değilse sorunla karşılaşabilirsiniz: SSCP matrisi pozitif (yarı) kesin olmayabilir. Bu sorun, çeşitli yollarla ancak hassasiyet kaybı ile başa çıkabilir.
X
yüzden, simetrik olacak (hadi N * N söylemek) colMeans(X) =rowMeans(X)
: ve çıkarma satır veya sütun vasıtası kez Y=X-rowMeans(X)
, mean(Y)
0'dır
You could turn your matrix of distances into raw data
(1 ve 2. noktalar) dediğimde , esasen, çift merkezlemenin ilk adım olduğu Torgerson'ın çok boyutlu ölçeklendirmesine (MDS) atıfta bulunuyorum . Lütfen bu sitede (ve Google'da da) bu prosedür hakkında arama yapın. "Çift merkezleme", (kare) mesafelerin, nokta bulutunun centroidine konan orijin üzerinde tanımlanan karşılık gelen skaler ürün matrisine dönüştürülmesidir.
Lütfen tanıdıklarımdan biri tarafından yazılan bu makaleye bakın;)
http://arxiv.org/abs/1304.6899
Giriş olarak keyfi bir mesafe matrisini alan genelleştirilmiş bir k-ortalama uygulaması ile ilgilidir. Sıfır diyagonal herhangi bir simetrik negatif olmayan matris olabilir. Tuhaf mesafe matrisleri için mantıklı sonuçlar vermeyebileceğini unutmayın. Program C # ile yazılmıştır.
Kaynak kodu, yukarıdaki bağlantıyı ziyaret edip Diğer Biçimler'i ve ardından Kaynağı İndir'i tıklayarak elde edilebilir. Sonra Program.cs içeren bir .tar.gz alırsınız. Alternatif olarak, kaynak kodu PDF'den de kopyalanabilir.
Java Machine Learning Library'yi kullanabilirsiniz. K-Ortalamalar uygulaması var. Biri yapıcıları üç argüman kabul eder
İstenen sonucu elde etmek için DistanceMeasure sınıfını kolayca genişletebilirsiniz. Buradaki fikir, bu sınıfın ölçü (Örnek x, Örnek y) yöntemindeki özel bir mesafe matrisinden değerler döndürmektir.
K-Ortalamaları, mesafe metriğinin belirli özelliklerini varsayarak birleşmek üzere uyarılır. Öklid mesafesi, Manhattan mesafesi veya diğer standart metrikler bu varsayımları karşılar. Özel bir mesafe metriği bu varsayımları karşılayamayabileceğinden, kurucuda kümeyi oluşturmak için çalıştırılacak yineleme sayısını belirten üçüncü bir parametre bulunur.