Nazoratsiz o'rganish python bilan Gauss aralashmasi modellari


Download 222.49 Kb.
Sana28.12.2022
Hajmi222.49 Kb.
#1017622
Bog'liq
Gauss aralashmasi


NAZORATSIZ O'RGANISH
Python bilan Gauss aralashmasi modellari
Ushbu postda men nazoratsiz o'rganish usuli tushunchasi, Gauss aralashmasi modeli va uni Python-da amalga oshirish haqida qisqacha to'xtalib o'tmoqchiman.
TGauss aralashmasi modeli ( GMM ) klasterlash uchun nazoratsiz o'rganish algoritmi sifatida mashhur . Bu erda " Gauss " o'rtacha va dispersiya bilan tavsiflangan Gauss taqsimotini anglatadi; aralash bir nechta Gauss taqsimotining aralashmasini anglatadi.
Fikr oddiy. Aytaylik, biz ma'lumotlar nuqtalari to'plamini bir nechta Gauss modellaridan (Gauss modeli 1-d ma'lumotlar uchun o'rtacha skaler va dispersiya skayarlari va Nd ma'lumotlari uchun o'rtacha vektor va dispersiya matritsasi bilan tavsiflanadi ) bilamiz va biz har bir ma'lumot nuqtasining ikkita Gauss modelidan biriga tegishli bo'lish ehtimolini bilishi mumkin, agar biz ularning zichlik funktsiyalarini bilsak (quyida ko'rsatilgan misol kabi). Keyin, biz ma'lumotlar nuqtasini Gauss aralashmasi orasida eng yuqori ehtimoli bo'lgan aniq bir modelga belgilashimiz mumkin.

Gauss taqsimotining Gauss aralashmasi zichligi.
Yuqorida tavsiflangan protseduradan menimcha, siz Gauss aralashmasi modelida ikkita eng muhim narsa borligini allaqachon payqadingiz. Ulardan biri Gauss aralashmasidagi har bir Gauss komponenti uchun parametrlarni (yuqoridagi rasmning o'ng tomonida sanab o'tilgan) baholash, ikkinchisi esa ma'lumotlar nuqtasi qaysi Gauss komponentiga tegishli ekanligini aniqlashdir. Shuning uchun klasterlash Gauss aralashmasi modelining eng muhim ilovalaridan biridir, ammo Gauss aralashmasi modelining yadrosi zichlikni baholashdir.
Gauss aralashmasi modelidagi har bir Gauss komponentini tavsiflovchi parametrlarni baholash uchun biz kutish-maksimizatsiya ( EM ) algoritmi deb nomlangan usulni tushunishimiz kerak . Model ba'zi kuzatilmagan yashirin o'zgaruvchilarga bog'liq bo'lsa, EM algoritmi parametrlarni baholash uchun keng qo'llaniladi. Gauss aralashmasi modelidagi yashirin o'zgaruvchi ma'lumotlar nuqtasi qaysi Gauss komponentiga tegishli ekanligini tavsiflaydi. Biz faqat ma'lumotlar nuqtalarini kuzatganimiz sababli, bu o'zgaruvchi kuzatilmagan yashirin o'zgaruvchidir.
Ushbu postda men EM algoritmidan foydalangan holda Gauss aralashmasi modelini yaratish g'oyasini va modelni Python-da qanday amalga oshirishni qisqacha tasvirlab beraman . EMni o'rganayotganimda, mening eng katta muammom tenglamalarni tushunish edi, shuning uchun men ushbu postda algoritmni ko'p tenglamalarsiz tushuntirishga harakat qilaman.
GMMda EM algoritmi aslida nima qiladi?
Qisqacha aytganda, EM algoritmi Gauss parametrlarini baholash uchundir. Kontseptsiyani yaxshiroq tushunish uchun, keling, boshidan boshlaylik.
Shubhasiz, Gauss aralashmasini tushunishdan oldin biz yagona Gauss taqsimotini tushunishimiz kerak. Aytaylik, bizda ma'lumotlar nuqtalari ketma-ketligi bor va har bir ma'lumot nuqtasi faqat bitta xususiyatga ega ( 1-D ma'lumotlar to'plami). Biz ushbu ma'lumotlar nuqtalarining zichligini ushbu xususiyatning o'qi bo'ylab chizishimiz mumkin.
Misol uchun, biz bir chelak Gala olma hajmini diametrlarini o'lchash orqali tasvirlamoqchimiz . Olmalarning faqat o'rtacha diametrlarini bilish o'rniga, biz o'lchamlarning to'liq taqsimlanishini bilishni xohlaymiz. Shunday qilib, biz taqsimotni quyida ko'rib chiqamiz.

Olma o'lchamlarining Gauss taqsimoti
Yuqoridagi zichlik grafigini quyidagi tenglama bilan ham tasvirlash mumkin,

Gauss taqsimot zichligi funktsiyasi
bu yerda m - o'rtacha va s - standart og'ish.
Odatda, biz bitta Gauss taqsimotini tavsiflash uchun o'rtacha va dispersiyadan foydalanamiz. Bu oson, to'g'rimi?
Aytaylik, biz tasodifan bir chelak Gala va bir chelak Fuji olmasini aralashtirib yubordik. Bu erda meva bo'yicha mutaxassisimiz yo'q, shuning uchun atrofdagi hech kim Galasni Fujisdan ajrata olmaydi . Biz qila oladigan yagona narsa hali ham olma o'lchamlarini o'lchashdir.
Biz hali ham ularni ajrata olamizmi? Nazariy jihatdan, ha, agar Galalar Fujisdan o'lchamlari bo'yicha haqiqiy farqlarga ega bo'lsa . Shuni ta'kidlash kerakki, biz hozir faqat o'lchamni o'lchashimiz mumkin bo'lganligi sababli, bu yagona xususiyat olma ajratish uchun etarli bo'lishi uchun ibodat qilishimiz kerak.
Yuqorida tavsiflangan vaziyat Gauss aralashmasi modelini klasterlashda qo'llanilishi mumkin bo'lgan haqiqiy muammodir . Agar olma diametri quyida ko'rsatilganidek, ikkita Gauss taqsimotiga amal qilsa, biz juda xursand bo'lardik,

Ikki xil Gauss taqsimoti.
Bunday holda, biz ikkita olmani ajratish uchun oddiygina qattiq kesishni qo'llashimiz mumkin. Masalan, kattaroq (diametri 2 dyuymdan ortiq) fuji 🍎 va kichikroq (diametri 2 dyuymdan ortiq) gala 🍏 hisoblanadi.
Biroq, aksariyat hollarda biz quyida ko'rsatilganidek, aralash taqsimotni kuzatamiz.

Galas va Fujis olma o'lchamlari aralashmasining taqsimlanishi
Yuqoridagi syujetda tepadagi qora egri chiziq bizning kuzatilgan olma o'lchamlari zichligidir va u biz ko'ra olmaydigan ikkita Gauss taqsimotini ifodalaydi. Keling, muammoni eng intuitiv tarzda qanday hal qilish haqida o'ylab ko'raylik.
(1) Agar biz ikkita taqsimotning zichlik funktsiyasi parametrlarini (o'rtacha va dispersiya) bilsak, har bir olma uchun uning Fujiga tegishli bo'lish ehtimolini va Gala ga tegishli bo'lish ehtimolini osongina olishimiz mumkin . Agar Fudzi bo'lish ehtimoli Gala bo'lish ehtimolidan kattaroq bo'lsa , u Fudzi bo'ladi va aksincha. Biroq, biz zichlik funktsiyasi parametrlarini bilmaymiz.

Stikerli olmalar
(2) Agar biz to'satdan har bir olmada allaqachon stiker borligini aniqlasak, biz Fuji va Gala uchun zichlik funktsiyasi parametrlarini to'g'ridan-to'g'ri taxmin qilishimiz mumkin . Ammo kuting, agar bizda stikerlar mavjud bo'lsa, nega hamma narsani qilishimiz kerak? Biroq, haqiqiy vaziyat shundan iboratki, bizda to'g'ri stikerlar yo'q, chunki meva do'koni egasining o'g'li olma bilan o'ynab, stikerlarni buzgan.
Men nima haqida gapiryapman? Yuqoridagi (1) va (2) nuqtalar aslida aylanali savollar bo'lgani uchun meni aqldan ozgan deb o'ylaysizmi ? Ikkinchisini hal qilish uchun ulardan birini bilishimiz kerak.
Aslida, men faqat EM algoritmining bir iteratsiyasini tasvirlab berdim . Xavotir olmang, iltimos, batafsil tushuntirib beraman.
EM algoritmining g'oyasi
EM algoritmi ikkita asosiy jarayonning iteratsiyalar ketma-ketligiga ega, E-Step va M-Step . E-Step yashirin o'zgaruvchini, ya'ni har bir olma uchun Fuji yoki Gala bo'lish ehtimolini baholaydi . Ushbu yashirin o'zgaruvchi ma'lumotlarga ta'sir qiladi, ammo kuzatilmaydi. M-Step ma'lumotlarning ehtimolini maksimal darajada oshirish orqali taqsimot parametrlarini baholaydi. Ehtimollik parametrlar to'plami berilgan ma'lumotlarga qanchalik mos kelishini tavsiflaydi, buning uchun biz uning maksimal qiymatini olishni xohlaymiz (bu berilgan ma'lumotlarga eng mos keladi, shuningdek, maksimal ehtimollik bahosi deb ham ataladi ).
Shunday qilib, EM algoritmining haqiqiy jarayoni shunday bo'lishi kerak:
EM EM EM EM EM EM EM…
Keling, biz ko'rib chiqayotgan aniq savolga qaytaylik.
Meva do'koni egasining o'g'li bizga ma'lumotlar nuqtalariga (olma) tasodifiy yorliqlar (stikerlar) tayinlaydigan EM algoritmining boshlash bosqichini tugatishga yordam berdi. G'oya shundan iboratki, biz ma'lumotlar nuqtalarini to'g'ridan-to'g'ri ajrata olmasligimiz sababli, biz faqat ishga tushirish uchun taxmin qilamiz. Bundan buyon kichkina bolani olmadan uzoqroq tutishimiz kerak.
OK, endi EM algoritmida E-bosqichni bajaramiz . Biz to'g'ridan-to'g'ri ishga tushirish bosqichidan kelganimiz sababli , bizda har bir olma uchun Fuji yoki Gala bo'lish ehtimoli allaqachon mavjud . “ Fudzi ” stikerli olma uchun uning Fuji bo‘lish ehtimoli 1 ga, Gala bo‘lish ehtimoli esa 0 ga teng.
Ammo, agar biz avvalgi M-qadamidan kelgan bo'lsak, ikkita Gaussning zichlik funktsiyasidan foydalangan holda Fuji yoki Gala bo'lish ehtimolini qayta hisoblashimiz kerak (oldingi M-bosqichidan hisoblangan). Agar ilgari belgilangan Fudzi olmasining Gala bo'lish ehtimoli Fudzi bo'lishdan ko'ra kattaroq bo'lsa , biz joriy stikerni yangi "to'g'ri" Gala stikeriga almashtiramiz. Agar oldingi yorliq va joriy ehtimollik oʻrtasida kelishmovchilik boʻlmasa, biz stikerni oʻzgarishsiz qoldiramiz.

Ehtimollikni hisoblang va agar kerak bo'lsa, yorliqni o'zgartiring.
OK, endi EM algoritmida M-Step ni bajaramiz . Qaysi iteratsiya bo'lishidan qat'iy nazar, bizda allaqachon olma ustida dastlabki/yangilangan teglar (stikerlar) mavjud. Biz berilgan teglar bilan Fuji va Gala taqsimotining Gauss parametrlarini bevosita taxmin qilishimiz mumkin . Asosan, biz Fuji Gauss parametrlarini faqat " Fuji " stikeri bo'lgan olma asosida , so'ngra " Gala " bilan Gala Gauss parametrlari asosida baholaymiz . Nazariy jihatdan, biz olma stikerlari berilgan ehtimollikni maksimal darajada oshiradigan parametrlar to'plamini topamiz.

Joriy yorliqlarni hisobga olgan holda ehtimollikni maksimal darajada oshiring.
Va keyin, biz olma tayinlash boshqa o'zgarmaguncha (qat'iy aytganda, ehtimollik funktsiyasining o'zgarishi juda kichik bo'lgunga qadar ) yuqoridagi ikki bosqichni qayta-qayta takrorlaymiz.
Bu haqiqiy muammoda EM algoritmining to'liq jarayoni. Olmani ajratish vazifasidagi EM algoritmi sizga qanday yoqadi? Bu qiyinmi? Ko'p tenglamalardan foydalandimmi? Haqiqatan ham emas, to'g'rimi?
Yaxshiroq bajarish uchun maslahatlar
Agar siz olma ajratish vazifasini chindan ham o'ylab ko'rsangiz, ichida juda ko'p real muammolar borligini tushunasiz.
Misol uchun, do'kon egasining kichkina o'g'li nima qilganini eslamasdan ham tasodifiy olma stikerlarini boshlaydi. Shunday qilib, mening olma ajratish vazifam olma stikerlarining turli xil dastlabki topshiriqlari bilan juda boshqacha yakunlanadimi? Bundan tashqari, Gala-ni Fuji- dan faqat o'lchamiga qarab farqlash qiyin bo'lishi kerak , shunday emasmi?
Birinchi savolga aniq javob ha. Nazariy jihatdan, har bir tasodifiy boshlash GMM uchun EM algoritmida bir xil yakuniy natijaga olib kelishi kafolatlanmaydi . Buni hal qilish uchun tasodifiy bo'lmagan ba'zi "boshlash" dan boshlash yaxshi tanlov bo'lishi mumkin. Agar kichkina bola barcha olma stikerlarini buzish o'rniga faqat 1/4 olma bilan o'ynagan bo'lsa, hozirgi tashabbus, ehtimol, ancha barqaror ajralishga olib keladi.
Ikkinchi savol uchun, albatta, ko'proq xususiyatlarga ega bo'lish yaxshiroqdir. Masalan, kichkina bola nafaqat olma stikerlari bilan o'ynabgina qolmay, balki har bir olmani tishladi (deylik, u har bir olmaning ta'mini miqdoriy tarzda qayd eta oldi). Keyin, har bir olma uchun bizda ham kattalik, ham lazzat bor, bu, ehtimol, yaxshiroq ajratishga olib keladi.
Ikki o'lchamli ma'lumotlarga ega Gauss taqsimoti xususiyat maydonida ellips sifatida ko'rsatilishi mumkin. Quyidagi GIF uchta Gauss komponentli Gauss aralashmasi modeli uchun EM algoritmi jarayonini ko'rsatadi. Siz buni Fuji , Gala va Honeycrisp olmalarini har bir olmaning ma'lum hajmi va ta'mi bilan ajratish vazifasi sifatida tasavvur qilishingiz mumkin .

GMM-da EM algoritmi jarayonining GIF
Yuqoridagi GIF-dagi X o'qi va Y o'qi mos ravishda normallashtirilgan o'lcham va normallashtirilgan lazzat bo'lishi mumkin. Siz ishga tushirilgan uchta komponent asta-sekin ma'lum olma klasterlariga qanday o'tishini ko'rishingiz mumkin.
Buni Pythonda qanday amalga oshirish mumkin?
GMM-da EM algoritmi kontseptsiyasini tushunish bilan solishtirganda, Python -da amalga oshirish juda oddiy (kuchli paket tufayli, scikit-learn ).
import numpy as np
from sklearn.mixture import GaussianMixture
# Suppose Data X is a 2-D Numpy array (One apple has two features, size and flavor)
GMM = GaussianMixture(n_components=3, random_state=0).fit(X)
GaussianMixture - bu funktsiya, n_components - asosiy Gauss taqsimotlari soni, random_state - ishga tushirish uchun tasodifiy urug' va X - bizning ma'lumotlarimiz. Bu erda X 2 o'lchovli NumPy massivi bo'lib, unda har bir ma'lumot nuqtasi ikkita xususiyatga ega.
Ma'lumotlarni o'rnatgandan so'ng, biz ikkita xususiyatga ega har qanday ma'lumot nuqtasi (olma) uchun taxmin qilingan klasterni tekshirishimiz mumkin.
GMM.predict([[0,5, 3], [1,2, 3,5]])
Ba'zida Gauss komponentlarining soni unchalik aniq emas. Biz uni mezon sifatida AIC yoki BIC dan foydalanib sozlashimiz mumkin (ehtimol keyingi postlarda batafsilroq tushuntiriladi).
aic(X)
bic(X)
Download 222.49 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling