Mengelompokkan rumus inersia dalam scikit belajar

9

Saya ingin kode kmeans pengelompokan dalam python menggunakan panda dan scikit belajar. Untuk memilih k yang baik, saya ingin mengkodekan Statistik Gap dari Tibshirani dan al 2001 ( pdf ).

Saya ingin tahu apakah saya dapat menggunakan hasil inersia_ dari scikit dan mengadaptasi formula statistik gap tanpa harus mengkode ulang semua perhitungan jarak.

Adakah yang tahu rumus inersia yang digunakan dalam scikit / tahu cara mudah untuk mengode ulang statistik gap menggunakan fungsi jarak level tinggi?

Menggaruk
sumber
Saya pikir pertanyaan ini memiliki konten statistik yang cukup untuk menjadi topik untuk CV, tetapi perhatikan bahwa ini membutuhkan pemrograman yang cukup canggih & pengetahuan Python juga. Mungkin sulit mendapatkan jawaban yang bagus. Anda mungkin ingin meminta / bersedia menerima pseudocode juga, & / atau Anda mungkin perlu membagi pertanyaan ini menjadi 2 bagian, 1 di sini tentang aspek statistik & 1 bagian tentang Stack Overflow tentang aspek pemrograman Python. (Atau mungkin tidak, saya tidak tahu pasti, tetapi saya hanya ingin memberi Anda peringatan yang adil; kita akan lihat bagaimana kelanjutannya.)
gung - Reinstate Monica
1
Pertanyaan ini membutuhkan istilah "inersia" untuk didefinisikan. Sepertinya diciptakan di dalam python.
ttnphns

Jawaban:

6

Saya kira saya menemukan jawaban saya untuk pengelompokan kmeans:

Dengan melihat kode sumber git, saya menemukan bahwa untuk scikit belajar, inersia dihitung sebagai jumlah jarak kuadrat untuk setiap titik ke pusat massa terdekat, yaitu, cluster yang ditugaskan. Jadi mana c r adalah centroid dari cluster yang ditugaskan dan d adalah jarak kuadrat. I=i(d(i,cr))crd

Sekarang formula gap statistic melibatkan manaDradalah jumlah dari jarak kuadrat antara semua titik dalam klasterr.

Wk=r=1k1(2nr)Dr
Drr

Dengan memperkenalkan , - c dalam rumus jarak kuadrat ( c menjadi pusat koordinat cluster r ), saya memiliki istilah yang sesuai dengan Inersia (seperti dalam scikit) + istilah yang hilang jika setiap c adalah barycentre dari setiap cluster (yang seharusnya dalam kmeans). Jadi saya kira W k sebenarnya scikit Inersia.+cccrcWk

Saya masih punya dua pertanyaan:

  1. Apakah Anda pikir kalkulus saya benar? (Misalnya, saya tidak tahu apakah itu berlaku untuk pengelompokan hierarkis.)
  2. Jika saya benar di atas, saya telah mengode statistik gap (sebagai perbedaan inertias log antara estimasi dan clustering) dan kinerjanya buruk terutama pada set data iris, apakah ada yang mencobanya?
Menggaruk
sumber
2
Yang terbaik adalah tidak mengajukan pertanyaan dalam jawaban Anda. Jika ini bukan jawaban untuk pertanyaan Anda, tetapi hanya solusi parsial untuk memperjelas pertanyaan yang sebenarnya, akan lebih baik untuk mengedit pertanyaan Anda & rekatkan informasi ini di.
gung - Reinstate Monica
1
@ Gores apakah Anda pernah mendapatkan implementasi python dari statistik gap untuk bekerja pada set data Iris? Saya berjuang dengan masalah yang sama.
Zelazny7
Ya saya kode satu bulan yang lalu. Bagaimana saya bisa mengirimkan itu kepada Anda?
Gores
1
Wk=r=1kDr(2nr)