Sabit bir mesafedeki nokta sayısını en üst düzeye çıkaran bilinen sayıda daire merkezi bulma


10

Belirtilen mesafe ( ) içindeki toplam nokta sayısını en üst düzeye çıkaran belirli sayıda daire merkezinin ( ) merkezlerini bulmak istediğim 2-D veri setim var .RNR

örneğin 10.000 veri var ve yarıçapında olabildiğince çok nokta yakalayan dairelerinin merkezlerini bulmak istiyorum . 10'luk 5 merkez ve yarıçap, verilerden türetilmeden önceden verilmiştir.N = 5 R = 10(Xi,Yi)N=5R=10

Bir daire içinde bir veri noktasının varlığı bir ikili ya da öneridir. Eğer , 11 adet uzaklıkta 100 adet genel bir noktaya değerinde bir fark olduğu gibi her ikisi de> 10. Benzer şekilde daire içinde olduğu için, kenara yakın merkezi vs yakın olmak için ekstra bir değer yoktur, uzak var . Bir veri noktası dairelerin birinde veya dışındadır.R=10

Bu sorunu çözmek için kullanılabilecek iyi bir algoritma var mı? Bunlar kümeleme teknikleri ile ilgili gibi gözükmektedir, ancak ortalama mesafeyi en aza indirmek yerine, nokta noktalarından herhangi birinin içinde ise "mesafe" fonksiyonu 0 , aksi takdirde 1'dir.NRN

Benim tercihim, bunu R'de yapmanın bir yolunu bulmak olabilir, ancak herhangi bir yaklaşım takdir edilecektir.


Daire çakışmasına izin veriliyor mu?
curious_cat

1
Bu, temel olarak, raster veri kümesinde bir mahalle (veya odak) işlemidir. Yanıtlanıp yanıtlanmadığını görmek için CBS sitesini kontrol etmek ve Raster analizi yapmak için R paketlerini incelemek iyi olur.
Andy W

1
Çember çakışmasına izin verilir, ancak her iki dairenin kapsadığı veri noktaları iki kez sayılmaz. Raster veri kümelerinde mahalle / odak işlemine işaretçi için teşekkürler. Bu çizgiler boyunca bir şey arayacağım.
colonel.triq

@Andy W Odak operasyonlar doğal olarak bir çözüme dahil edilecek olsa da, bu soru CBS topluluğunun (IMHO) uzmanlığının ötesindedir, çünkü bu gerçekten (oldukça zor) bir optimizasyon problemidir. Bu, bir odak-ortalama-ızgara-basit-bul-bul-değildir. Bir süre burada tutmanızı ve ardından tatmin edici bir çözüm ortaya çıkmazsa, programlama odaklı bir siteye geçmenizi tavsiye ederim.
whuber

... veya math.overflow'a mı geçiyorsunuz? Bu konuda da bazı görüşler olabilir.
curious_cat

Yanıtlar:


1

Bu bir k varyasyon problemidir. Merkezlerin yarıçapı, eşit kabul edildiği sürece önemli değildir.

Bağlantılar:

Dairelerin merkezlerini, noktaların en yüksek olasılıklı yerlere koyacaktır.

Klasik K anlamına gelir Prosedür:

  1. küme sayısını 5 olarak ayarla
  2. her noktayı rastgele bir kümeye koy
  3. her küme için ortalama konumu hesaplayın
  4. her nokta için, her yeni ortalama konuma olan mesafeyi hesaplayın
  5. üyeliği en yakın kümeyle ilişkilendirme
  6. bitene kadar tekrarlayın (yineleme, konum değişikliği veya diğer hata metriği)

Seçenekler:

  • Ortalama konumu yavaşça yeni konuma çevirdiğiniz 3'ten sonra biraz rahatlama kullanabilirsiniz.
  • Bu ayrık bir sistemdir, bu yüzden mükemmel bir şekilde birleşmez. Bazen olur ve puanlar üyeliği değiştirmeyi bıraktığında sona erebilir, ancak bazen sadece biraz kıpır kıpır.
  • Kendi kodunuzu yapıyorsanız (çoğu insanın gerektiği gibi), o zaman yukarıdaki POR k-araçlarını bir başlangıç ​​noktası olarak kullanabilir ve EM'de yalnızca daireler tarafından tamamen ve tamamen kapsanan noktaların yüzdesi tarafından bildirilen bazı varyasyonlar yapabilirsiniz.

K-demektir neden soruna saldırır:

  • Bileşenlerin kovaryanslarının eşit olduğu bir Gauss Karışım Modelinin takılmasına eşdeğerdir. Karışım bileşenlerinin merkezleri, en yüksek puan beklentisi olan konumlara yerleştirilecektir. Sabit olasılık eğrileri daire şeklinde olacaktır. Bu EM algoritmasıdır, bu nedenle asimtotik yakınsamaya sahiptir. Üyelikler zor, yumuşak değil.
  • Eşit varyans bileşenleri karışım modelinin temel varsayımı, ne anlama gelirse gelsin "yakın" olursa, bu yöntemin uygun olacağını düşünüyorum. Noktaları rastgele dağıtırsanız, iyi uyum olasılığı daha düşüktür.

Tekdüze dağılımı alan gauss olmayan bir bileşenin olduğu bir "Sıfır Şişirilmiş Poisson" analogu olmalıdır .

Modelinizi "ayarlamak" istiyorsanız ve yeterli örnek nokta olduğundan eminseniz, k-araçlarıyla başlayabilir ve daha sonra dairelerin yarıçaplarının dışındaki noktaları rekabetten kaldıran artırılmış bir k-araç ayarlayıcı yapabilirsiniz. Sahip olduğunuz çevreleri biraz bozar, ancak veriler göz önüne alındığında performansı biraz iyileşmiş olabilir.


K-araçlarının bu sorunu nasıl çözdüğü konusunda biraz daha açık olabilir misiniz?
whuber

Önerin için teşekkürler. K-ortalamaları yaklaşımının sorunu çözdüğü hala net değil mi? Merkezlerin 5 birim kadar dengelendiği üç normal (0,1) veri kümesi kümesini ele alalım. K-ortalamaları merkezleri maksimum yoğunluğu verecektir. Şimdi merkezlere 0,5'ten daha yakın olan verilerin kaldırılması için bazı noktaları "delikler" ile kesin. K-araçları hala aynı merkezler hakkında gösterecektir, ancak N = 3 için maksimum kapsama alanı almaya çalışıyorsanız, R = 0.5 bu doğru cevap değildir (çörek delikleri veri içermediğinden). Bir şeyi yanlış mı anlıyorum?
colonel.triq

Zamanım olduğunda daha iyi bir cevap için sorunuza daha fazla bakacağım. Negatif ağırlıklara izin vermeyi seviyorum. Bazen veri çöreklerinin yanı sıra radyal rasyonel polinomları da ele alabilir.
EngrStudent

0

Birisi muhtemelen daha iyi bir resmi algoritmaya sahiptir, ancak işte bir kaba kuvvet yaklaşımı (hack?). Bir 2D histogramı hesaplamak için altıgen binning algoritmalarından birini kullanırdım. Gibi hexbiniçinde R.

R yarıçapı çemberinizi kabaca kuşatan bir altıgen boyutu kullanır ve daha sonra üst N bölmelerine sıralarım. Eğer Nuzak ayrı kutuları var, harika. Şimdi bir yol, üst yoğunluk altıgenlerinin merkezinden 2 x R ölçeğinde (x ve y yönlerinde) daire etrafında yerel olarak hareket etmektir. Hesaplama yoğunlukları, konumu kabaca yerel olarak optimize edebilir. Bu, altıgenlerin sabit bir kökene göre hareketli bir pencere olmadığı gerçeğini açıklayacaktır.

Tüm üst bölmeler yakınsa, çevrelerinizi o bölgede hareket ettirmek için daha akıllı bir yolunuz olmalıdır.

Böyle naif bir stratejinin muhteşem bir şekilde başarısız olacağı birkaç köşe vakasını düşünebileceğimi unutmayın. Ancak, sadece bir başlangıç ​​noktası.

Bu arada, umarım birisi daha iyi bir algoritmaya sahiptir.


1
Böyle bir şey, sorunu en azından yaklaşık olarak bir daire için çözebilir . (Bu, bir CBS ile odak sayımları kullanılarak kolayca yapılabilir.) Ancak çok daireli sorunu çözmez.
whuber

@whuber: Bir çemberi çözmek ve o çemberin içindeki tüm noktaları düşürüp orijinal algoritmayı tekrarlamak ne olacak? Bunun başarısız olacağı durumları görebiliyor musunuz?
curious_cat

Evet, kolayca. (Sizinki "açgözlü bir algoritmadır.") Bir boyutta olan . Kişisel algoritma koyar kapsayan birinci çember ve ikinci örtme : sekiz puan toto . Daha iyi bir çözüm kapsar bir daire ile dokuz nokta: diğeriyle. 0 , 1 , 2 , 20 , 21 , 28 , 29 , 30 , 31 , 32 , 39 , 40 28 , 29 , 30 , 31 , 32 0 , 1 , 2 20 , 21 , 28 , 29 , 30 30 , 31 , 32 ,R=10,N=20,1,2,20,21,28,29,30,31,32,39,4028,29,30,31,320,1,220,21,28,29,3030,31,32,39,40
whuber

@whuber: Doğru. Haklısın. Bazı (birçok?) Vakalarda giriş noktalarının yapısına bağlı olarak, açgözlü ve açgözlü olmayan çözümler aynı veya yakın olabilir mi? Bilmiyorum.
curious_cat

@whuber: Sorun çoğunlukla sınırlarda görünüyor. Ne bir hamle pencere (benim cevapta belirtildiği biraz gibi) eğer +Rve -Rsonra ve aralarında bir yığın ve seçer tüm uygulanabilir çözümler koyar. senin içinde örneğin 1Disabet örneğin 28,29,30,31,32o kadar pencereyi kaydırın ediyorum 18-28ve 38-48tüm yapılamadı çözüm arıyor. Daha sonra bunlar içinde maksimum nokta verim kombinasyonları aranabilir. Bunun yardımcı olup olmayacağından emin değil misiniz? Saf algoritmamın kurtarılıp kurtarılamayacağını görmeye çalışıyorum? :)
curious_cat
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.