K-araçlarının bir uygulamasını nasıl test edersiniz?


11

Feragatname: Bu soruyu Stackoverflow'a gönderdim, ancak belki de bu platform için daha uygun olduğunu düşündüm.

Çok boyutlu veri kümeleri için kendi k-araç uygulamanızı nasıl test edersiniz?

Veriler üzerinde zaten var olan bir uygulamayı (yani Matlab) çalıştırmayı ve sonuçları algoritmamla karşılaştırmayı düşünüyordum. Ancak bu, her iki algoritmanın da kabaca aynı olandan daha fazla çalışmasını gerektirecektir ve iki sonuç arasındaki eşleme muhtemelen çok kolay değildir.

Daha iyi bir fikrin var mı?

Yanıtlar:


10

K-ortalamaları stokastik bir bileşen içerir, bu nedenle tam olarak aynı uygulamaya sahip değilseniz ve aynı başlangıç ​​yapılandırmasını kullanmazsanız aynı sonucu elde etmeniz pek olası değildir. Bununla birlikte, sonuçlarınızın iyi bilinen uygulamalarla uyumlu olup olmadığını görebilirsiniz (Matlab hakkında bilmiyorum, ancak R'de k-ortalama algoritmasının uygulanması iyi açıklanmıştır, bkz. Hartigan & Wong, 1979 ).

İki sonuç serisini karşılaştırmaya gelince, birden fazla kez çalıştırılacaksa etiket değiştirme ile ilgili bir sorun vardır. Yine, e1071 R paketinde, matchClasses()iki yollu bir sınıflandırma tablosunda iki kategori arasındaki 'en iyi' eşlemeyi bulmak için kullanılabilecek çok kullanışlı bir işlev (; ) vardır. Temel olarak, fikir, sütunlarla olan anlaşmalarını en üst düzeye çıkarmak için satırları yeniden düzenlemek veya açgözlü bir yaklaşım kullanmak ve çapraz (ham anlaşma) toplamı maksimum oluncaya kadar satırlara ve sütunlara izin vermektir. Kappa istatistiği gibi anlaşma katsayısı da sağlanmaktadır.

Son olarak, uygulamanızı nasıl kıyaslayacağınızla ilgili olarak, çok sayıda serbestçe kullanılabilir veri vardır veya özel bir veri kümesi simüle edebilirsiniz (örneğin, sınırlı bir karışım modeli aracılığıyla, MixSim paketine bakın).


merhaba chi, cevap için teşekkürler. İstediğinizde SO'daki aynı soruyu da cevaplayabilirsiniz ve ben de orada kabul ediyorum. => stackoverflow.com/questions/4280371/…
Framester

(+1) İlk paragraf hızla konunun kalbine ulaşır.
whuber

6

İki sonuç kümesi arasındaki eşlemeyi hesaplamak kolaydır, çünkü bir testte elde ettiğiniz bilgiler üç grup halinde temsil edilebilir: ilk bileşen (çok boyutlu) bir nokta, ikincisi (rastgele) bir küme etiketi üçüncüsü, bir referans algoritması tarafından sağlanan (rasgele) bir küme etiketidir. Construct tarafından kkketiket çiftleri için sınıflandırma tablosu: sonuçlar kabul ederse, bir permütasyon matrisinin katı olacaktır. Yani, her satır ve her sütun tam olarak bir sıfır olmayan hücreye sahip olmalıdır. Bu programlamak için basit bir kontrol. Bu idealden bireysel veri noktalarına kadar küçük sapmaları izlemek de kolaydır, böylece iki cevabın farklı olmaları durumunda nasıl farklı olduklarını tam olarak görebilirsiniz. İstatistiksel anlaşma ölçülerini hesaplamak için rahatsız etmem: ya mükemmel bir anlaşma (permütasyona kadar) ya da yoktur ve ikinci durumda, nasıl olduklarını anlamak için tüm anlaşmazlık noktalarını izlemeniz gerekir. Sonuçlar ya kabul eder ya da kabul etmez; herhangi bir anlaşmazlık, sadece bir noktada bile kontrol edilmesi gerekir.

Test için birkaç çeşit veri kümesi kullanmak isteyebilirsiniz: (1) yayınlanan k-ortalama sonuçları olan yayınlanmış veri kümeleri; (2) belirgin güçlü kümeleri olan sentetik veri kümeleri; (3) belirgin kümelenme olmaksızın sentetik veri kümeleri. (1) herhangi bir matematik veya istatistik programı yazarken kullanmak için iyi bir disiplindir . (2) kümelerin merkezi olarak hizmet etmek için bazı rastgele noktalar üretmek ve daha sonra küme merkezlerini nispeten küçük miktarları rastgele yer değiştirerek nokta bulutları oluşturmak gibi birçok yönden yapılması kolaydır. (3) beklenmedik davranışları potansiyel olarak ortaya çıkaran bazı rastgele kontroller sağlar; yine, bu iyi bir genel test disiplini.

Ayrıca, aşırı çözümler arasındaki sınırlarda durarak algoritmayı vurgulayan veri kümeleri oluşturmayı düşünün. Bu, yaratıcılık ve algoritmanızın derinlemesine anlaşılmasını gerektirir (muhtemelen var!). Herhangi bir olayda kontrol etmek istediğim bir örnek , v'nin sıfır bileşeni olmayan bir vektör olduğu ve i , 0 , 1 , 2 , , n - 1 ardışık integral değerlerini alan formunun vektörleri kümesi olacaktır . Ayrıca algoritmayı eşkenar çokgenler oluşturan vektör kümeleri üzerinde kontrol etmek istiyorum. Her iki durumda da, olgular nerede n ise değilivvi0,1,2,,n1nkatları da dahil, özellikle ilginçtir n ise az daha k . Bu durumlar için ortak olan, (a) sorunun tüm boyutlarını kullanmaları, ancak (b) doğru çözümlerin geometrik olarak açık olması ve (c) birden fazla doğru çözümün olmasıdır.knk

d2uv2dxzxz

w=z-(zx)x.

Elde yeniden ölçeklendirme ile ağırlık birimi uzunluğa sahip. İsterseniz, aynı şekilde her iki rescale x veywxyxydnmarul(2πk/n)x+günah(2πk/n)yk0n-1


(+1) Alakalı sentetik veri oluşturmanın olası yolları hakkındaki yorumlarınızı bekliyoruz.
chl

2

Çok basit bir 'saf' yaklaşım basit sentetik veriler kullanmak olacaktır, çünkü her uygulama aynı kümelerle sonuçlanmalıdır.

Python ile örnek import numpy as np:

test_data = np.zeros((40000, 4))
test_data[0:10000, :] = 30.0
test_data[10000:20000, :] = 60.0
test_data[20000:30000, :] = 90.0
test_data[30000:, :] = 120.0

Çünkü n_clusters = 4size bir izin vermeli[30, 60, 90, 120]


0

K-araçları rastgele seçilen kararları içerdiğinden (yalnızca başlatma kısmı), algoritmanızı denemenin en iyi yolunun ilk noktaları seçmek ve önce algoritmanızda sabitlenmesini ve ardından algoritmanın başka bir kaynak kodunu seçmesini sağlamak olduğunu düşünüyorum. noktaları aynı şekilde sabitleyin. Sonra gerçek sonuçları karşılaştırabilirsiniz.

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.