Sebagai bagian dari penelitian saya, saya tertarik untuk melakukan propagasi label pada grafik. Saya terutama tertarik pada dua metode ini:
- Xiaojin Zhu dan Zoubin Ghahramani. Belajar dari data berlabel dan tidak berlabel dengan propagasi label. Laporan Teknis CMU-CALD-02-107, Universitas Carnegie Mellon, 2002 http://pages.cs.wisc.edu/~jerryzhu/pub/CMU-CALD-02-107.pdf
- Dengyong Zhou, Olivier Bousquet, Thomas Navin Lal, Jason Weston, Bernhard Schoelkopf. Belajar dengan konsistensi lokal dan global (2004) http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.115.3219
Saya melihat bahwa scikit-belajar menawarkan model untuk melakukan itu. Namun, model ini seharusnya diterapkan pada data terstruktur vektor ( yaitu titik data).
Model membangun matriks afinitas dari titik data menggunakan kernel, dan kemudian menjalankan algoritma pada matriks yang dikonstruksi. Saya ingin dapat langsung memasukkan matriks adjacency dari grafik saya di tempat matriks kesamaan.
Adakah gagasan tentang bagaimana mencapainya? Atau apakah Anda tahu pustaka Python yang akan memungkinkan untuk menjalankan propagasi label secara langsung pada data terstruktur grafik untuk dua metode yang disebutkan di atas?
Terima kasih sebelumnya atas bantuan Anda!
sumber
Jawaban:
Menjawab pertanyaan saya sendiri di sini, semoga bermanfaat bagi sebagian pembaca.
Scikit-belajar terutama dirancang untuk menangani data terstruktur vektor. Oleh karena itu, jika Anda ingin melakukan propagasi label / label menyebar pada data terstruktur grafik, Anda mungkin lebih baik menerapkan kembali metode sendiri daripada menggunakan antarmuka Scikit.
Berikut ini adalah implementasi dari Propagasi Label dan Penyebaran Label di PyTorch.
Kedua metode secara keseluruhan mengikuti langkah-langkah algoritmik yang sama, dengan variasi tentang bagaimana matriks adjacency dinormalisasi dan bagaimana label disebarkan pada setiap langkah. Karena itu, mari kita buat kelas dasar untuk dua model kami.
Model mengambil input matriks adjacency dari grafik serta label dari node. Label tersebut dalam bentuk vektor bilangan bulat yang menunjukkan nomor kelas setiap node dengan -1 pada posisi node yang tidak berlabel.
Algoritma Propagasi Label disajikan di bawah ini.
Dari Xiaojin Zhu dan Zoubin Ghahramani. Belajar dari data berlabel dan tidak berlabel dengan propagasi label. Laporan Teknis CMU-CALD-02-107, Universitas Carnegie Mellon, 2002
Kami mendapatkan implementasi berikut.
Algoritma Penyebaran Label adalah:
Dari Dengyong Zhou, Olivier Bousquet, Thomas Navin Lal, Jason Weston, Bernhard Schoelkopf. Belajar dengan konsistensi lokal dan global (2004)
Karena itu, implementasinya adalah sebagai berikut.
Sekarang mari kita menguji model propagasi kita pada data sintetis. Untuk melakukannya, kami memilih untuk menggunakan grafik gua .
Model yang diimplementasikan bekerja dengan benar dan memungkinkan untuk mendeteksi komunitas dalam grafik.
Catatan: Metode propagasi yang disajikan dimaksudkan untuk digunakan pada grafik yang tidak diarahkan.
Kode tersedia sebagai notebook Jupyter interaktif di sini .
sumber