Garis memisahkan dua set titik

19

Jika ada cara untuk mengidentifikasi apakah dua set poin dapat dipisahkan oleh garis?

Kami memiliki dua set titik dan jika ada garis yang memisahkan dan sehingga semua titik dan hanya di satu sisi garis, dan semua titik dan hanya di sisi lainnya.ABABAABB

Algoritma yang paling naif yang saya buat adalah membangun poligon cembung untuk dan B dan mengujinya untuk persimpangan. Kelihatannya waktu kompleksitas waktu untuk ini harus O ( n log h ) seperti untuk membangun poligon cembung. Sebenarnya saya tidak mengharapkan ada perbaikan dalam kompleksitas waktu, saya tidak yakin itu bisa diperbaiki sama sekali. Tetapi setidaknya harus ada cara yang lebih indah untuk menentukan apakah ada garis seperti itu.ABO(nlogh)

com
sumber

Jawaban:

19

Baik uli dan Dave Clarke benar mengamati bahwa ini adalah masalah pemrograman linier, bahkan dalam dimensi yang lebih tinggi (dapatkah dua set titik ini dipisahkan oleh hyperplane?) Dan sehingga dapat diselesaikan dalam waktu polinomial. Tetapi karena poin Anda terletak di pesawat, masalah Anda sebenarnya dapat diselesaikan dalam waktu O(n) , di mana n adalah jumlah total poin.

Solusi paling sederhana mungkin adalah algoritma acak Seidel. Pilih titik input secara seragam secara acak, dan hitung secara terpisah garis pemisah untuk semua titik kecuali p .p p

  • Jika tidak ada garis seperti itu, maka titik-titik aslinya tidak dapat dipisahkan.

  • Jika berada di sisi yang benar dari , maka memisahkan titik-titik aslinya.p

  • Jika berada di sisi yang salah dari , maka titik asli dapat dipisahkan oleh garis melalui p , atau titik asli tidak dapat dipisahkan sama sekali. Kondisi ini mudah dicek pada O ( n ) waktu [latihan].ppO(n)

Algoritma ini berjalan dalam waktu dengan probabilitas tinggi (sehubungan dengan pilihan acak algoritma). Untuk lebih jelasnya, lihat kertas asli atau sejumlah catatan kuliah online.O(n)

JeffE
sumber
Terima kasih banyak, saya akan mempelajari makalah ini.
com
Dalam kasus ketiga Anda, Anda menyatakan bahwa itu mungkin sehingga garis melewati , bagaimana hal itu membantu untuk mengetahui hal itu? p
Tarrasch
10

Properti dari dua set data Anda adalah keterpisahan linear , sederhananya, bahwa ada garis yang memisahkannya. Banyak pembelajaran mesin dikhususkan untuk menemukan pengklasifikasi linier , yang merupakan garis yang melakukan pemisahan yang Anda minati.

Ketika Anda berbicara tentang garis, saya akan berasumsi bahwa poin Anda ada di pesawat. Apa yang ingin Anda lakukan adalah menemukan nilai , w 2 dan w 3 , sehingga untuk semua titik ( a 1 , a 2 ) di set A , w 1 a 1 + w 2 a 2w 3 dan untuk semua poin ( b 1 , b 2 ) dalam B , w 1 b 1 +w1w2w3(a1,a2)Aw1a1+w2a2w3(b1,b2)B . Dengan demikian, ketimpangan w 1 x + w 2 y w 3 dapat dilihat sebagai classifier untuk set A .w1b1+w2b2<w3w1x+w2yw3A

Ada banyak algoritma pembelajaran mesin untuk menentukan garis yang optimal (regresi linier, regresi logistik, dan sebagainya). Ini akan menemukan nilai untuk berdasarkan beberapa metrik kesalahan. Kemudian Anda dapat menguji apakah semua poin diklasifikasikan dengan benar. Artinya, apakah semua nilai-nilai di A memuaskan persamaan di atas dan juga untuk B .w1,w2,w3AB

Karena Anda hanya tertarik pada apakah garis tersebut ada, Anda perlu menggunakan teknik yang ada (meskipun itu mungkin akan lebih sederhana). Cukup setel kumpulan persamaan berikut dalam hal variabel bebas .w1,w2,w3

untuk setiap i = 1 , . . , | A | , di mana A = { ( a 1 1 , a 1 2 ) , ... , ( a | A | 1 , a | A | 2 ) } .w1a1i+w2a2iw3i=1,..,|A|A={(a11,a21),,(a1|A|,a2|A|)}

untuk setiap j = 1 , . . , | B | , di mana B = { ( b 1 1 , b 1 2 ) , ... , ( b | B | 1 , b | B | 2 ) } .w1b1j+w2b2j<w3j=1,..,|B|B={(b11,b21),,(b1|B|,b2|B|)}

Jika kendala ini konsisten, maka ada garis.

Dave Clarke
sumber
5

Jika saya ingat benar mendukung mesin vektor membangun memisahkan pesawat terbang. Jika Anda memilih dimensi hyperplane tentu saja menjadi garis. Anda mungkin harus memeriksa apakah ada asumsi tambahan yang harus dipenuhi. Dalam dua dimensi seluruh pendekatan mungkin sangat disederhanakan sehingga runtime mungkin lebih baik daripada pendekatan umum.2

uli
sumber