{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Baholar\n", "\n", "## Sinflash masalalari\n", "\n", "Biz *Mashinali o'rganish (MO)*ning boshlang'ich qismlarini o'rganib chiqdik. Zarur bo'lgan ushbu tushunchalar keyingi qimslarni o'rganish uchun bizga yo'l ochadi. Chunki biror algortimni qanday tarzda natija berayotgani yoki uni qanday qilib tuzish zarurligini bilish ham ma'lum bir boshlang'ich bilimlarni talab qiladi. Xususan, biz Mashinali o'rganish qismida algoritmlarning turini va aynan nima maqsada ushbu algoritmlar kerakligini to'lamlar, algoritmga kiruvchi va chiqivchi namunalar haqida ma'lumotga ega bo'ldik. Bundan keyingi MOga bag'ishlangan qismlarda biz to'g'iridan-to'g'iri ushbu mavjud algoritmlarni o'tganib ketamiz. Albatta, keyinchalik biz *o'rgatuvchili o'rganish* turiga yana bir qancha turlarni qo'shib ketamiz. Ularni esa o'rni kelganda ta'riflaymiz.\n", "\n", "Hozir bu qismda qarab o'tishimiz zarur bo'lgan navbatdagi tushuncha **Baholar**dir. Biz ikki turdagi MO masalasini ta'rifladik, hamda *sinflash* uchun esa ikkita namuniviy masalani qarab o'tdik. Bu masalalarda tuzilgan algoritmlarni xato(Aniqiq)ligi bilan baho berdik. Endi bu qismda shu baholarni batafsil ko'rib o'tamiz hamda regressiya va sinflash algoritmlari uchun bir qancha baholarni berib, ularning qo'llanish sohasi, yutuqlar va kamchiliklarini umumiy holda berib o'tamiz. Keyinchalik bu baholar asosida biz qolgan algoritmlarni ham tekshirib chiqamiz. Albatta biz bu bo'limda hamma narsalarni qamrab olalmaymiz, chunki biz endi ikki turdagi masalalarga ta'rif berdik. Bu kabi baholar masalalar berilish davomida har xil bo'ladi, lekin ko'pincha bir nechta baho bir algoritmning ishlashni baholash uchun ishlatiladi. Ba'zida bir algoritm aynan bitta masalada ma'lum baho asosida yaxshi natija bersa, yana bir boshqasi bo'yicha umuman yaxshi natija bermaydi.\n", "\n", "Bu holni ko'rish uchun keling bizda quyidagicha haqiqiy va algoritm tomonidan aniqlangan natijalarni ko'raylik. Ushbu masalada biz ikkita sinf bor deb tassavur qilamiz, hamda $\\mathbf{y}\\in \\{0, 1\\}$ va $\\mathbf{\\hat{y}}\\in \\{0, 1\\}$ orqali mos ravishda haqiqiy qiymatlarni va algoritm topgan qiymatlarni belgilaylik. Ushbi ikki vektorning mos ravishdagi natijalari quyidagi jadvalda berilgan:\n", "\n", "|#|$\\mathbf{y}$|$\\mathbf{\\hat{y}}$|\n", "|------------|--------------|-----------|\n", "|1|0|0|\n", "|2|0|0|\n", "|3|1|0|\n", "|4|0|0|\n", "|5|0|0|\n", "|6|0|0|\n", "|7|1|0|\n", "|8|1|0|\n", "|9|0|0|\n", "|10|0|0|\n", "|11|0|0|\n", "|12|0|0|\n", "|13|0|0|\n", "|14|1|0|\n", "|15|0|0|\n", "|16|0|0|\n", "|17|0|0|\n", "|18|0|0|\n", "|19|1|0|\n", "|20|0|0|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yuqoridagi jadval 20 ta obyektning $\\mathbf{y}\\in \\{0, 1\\}$ haqiqiy va algoritmning $\\mathbf{\\hat{y}}\\in \\{0, 1\\}$ taqribiy qiymatlarini tasvirlaydi. Ushbu qiymatlardan agar biz algoritm to'g'ri topganlarini hisoblasak, bu 15 tasi to'g'iri bo'ladi. Bu soni jami obyektlar soniga bo'lsak u holda biz $\\frac{15}{20}=0.75$, ya'ni 75\\% obyektni to'g'iri topayabdi. Lekin yaxshilab e'tibor bilan qarasak algoritm faqat hamma obyekt uchun *0* qiymatini chiqarmoqda. Boshqa so'z bilan aytganda hamma namunalarni bitta sinfga tegishli deb qaror chiqarayabdi. Bu esa umuman noto'g'iri. Demak, birinchi ikkita masalada qo'llagan baholash har doim ham o'rinli bo'lmas ekan. Yuqoridagi muammo **Sinflar nomutonosibligi** deb ataladi, chunki bizda ikkita sinf bor va ular $0$ va $1$ orqali belgilangan hamda ulardagi har bir sinfga tegishli namunalarning soni bir yoki bir-biriga yaqin emas. Ushbu masala uchun yillar davomida ko'plab usullar taklif qilingan, lekin hozirgi kunda ham umumiy holda ochiq savollardan biri hisoblanadi. Biz bu muommoni yechish haqida qayg'urmasdan, o'rniga uni aniqlovchi boshqa turdagi baholashni keltirmoqchimiz.\n", "\n", "Ushbu baholash usulini *muvozanatlashgan aniqlik* deb nomlaymiz, ingliz tilida esa *balanced accuracy* deb ataladi. Bu baholashning mazmuni quyidagicha: har bir sinfdagi algoritm to'g'iri deb topgan natijalar sonini shu sinfdagi namumanalar soniga bo'lamiz; keyin esa hamma natijalarni yig'ib chiqib; oxirida ularni sinflarning umumiy soniga bo'lamiz. Quyida umumiy formulasi:\n", "\n", "\\begin{equation}\n", "M_{aniqlik}=\\frac{\\sum_{i=1}^{c}\\frac{d_i}{\\vert \\mathbf{K}_i \\vert}}{c}\n", "\\end{equation}\n", "\n", "bu yerda $c$ sinflar soni(hozir $c=2$), $d_i$ $i$-sinfdan algoritm to'g'iri topganlar soni (hozir $d_0=15$ va $d_1=0$) va $\\vert \\mathbf{K}_i \\vert$ har bir sinfdagi umumiy namunalar soni (hozir $\\vert \\mathbf{K}_0 \\vert=15$ va $\\vert \\mathbf{K}_1 \\vert=5$). Odatda sinflash masalari uchun baholash usullari faqat $[0, 1]$ oraliqda qiymat chiqaradi, shunga ko'ra yuqoridagi forumulaning qiymati ham shu oraliqdadir. Keling avval bu baholashni yuqoridagi jadval uchun qo'llasakda keyin ikki baholashining natijalarini muhokama qilsak.\n", "\n", "\\begin{equation*}\n", "M_{aniqlik}=\\frac{\\sum_{i=1}^{c}\\frac{d_i}{\\vert \\mathbf{K}_i \\vert}}{c}=\\frac{\\sum_{i=1}^{2}\\frac{d_i}{\\vert \\mathbf{K}_i \\vert}}{2}=\\frac{\\frac{15}{15}+\\frac{0}{5}}{2}=0.5\n", "\\end{equation*}\n", "\n", "Ko'rib turganimizdek bu baholash natijasi juda ham kichik, yuqoridagi esa juda yaxshi. Ba'zida yuqoridagi natija bundan ham yaxshi bo'ladi, lekin oxirigi baholash esa juda past bo'ladi. Bu esa ushbu baholashining qanchalik zarur ekanligini bizga tasdiqlaydi.\n", "\n", "Bundan tashqari boshqa baholash usullari ham mavjud bo'lib, ulardan ba'zilarini statistika va ehtimollar nazariyasi qismlariga qoldiramiz, chunki ular shu sohalarda yuqori darajada tadqiq etilgan. Biz keyinchalik masalalarimizni ikki baholash usulidan ham doimiy foydalanamiz. Lekin ko'pinchi birinchisi yetarli bo'ladi, chunki biz ko'pchilik holatlarda sinflardagi obyektlarni sonini oldindan bilamiz." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## To'plamlar uchun baholar\n", "\n", "Biz oldingi ko'rilgan masalalarda bizga berilgan to'plamni ikki qismga ajratdik yoki ikki qims ko'rnishida berilgan. Bu qimslarni esa mos ravishda **o'rgatuvchi** va **sinov** to'plamlar deb nomladik. Hozir ushbu ikki to'plam uchun baholarning ma'nolari ustida qisqacha mulohaza yuritamiz. Birinchidan, ikki to'plamning nomlaridan kelib chiqqan holda biz ikkita aniqlik bahosini sinflash muammolari uchun kiritamiz, bular: **o'rganish aniqligi** va **sinov aniqligi**. Bu atamalarning ingliz tilidagi nomlari esa **training accuracy** and **test accuracy**. Ushbu ikki qiymatning birining ikkinchisidan kattaligiga ko'ra algoritmning **o'rganish darajasi**ni belgilaymiz, ular: **kam**, **yetarli** hamda **ortiqcha** o'rgangan. Bu atamalar ingliz tilida mos ravishda **underfitting**, **just fitting** va **overfitting** deb nomlanadi.\n", "\n", "**Kam** o'rganish muammosi bu bir qancha omillarga bog'liq bo'lib, ulardan ba'zilari: modelning *kuchsizligi*, modelning yetarlicha o'rgatilmagani yoki to'g'iri alomatlar tanlanmaganligidir. Agar algoritmning *o'rganish aniqligi* uning *sinov aniqligidan* kichik bo'lsa, ushbu muammo yuzaga chiqadi. Biz *yaqin qo'shni* algoritmidan MNIST rasmlar ustida olgan natijamizda ushbu holatni uchratmagan edik.\n", "\n", "Navbatdagi holat esa odatda shu ikki aniqliklar bir-birga juda *yaqin* bo'lganda yuz beradi va ushbu holatdni biz *kutilgan* hol deb nomlaymiz. MNIST rasmlari uchun ushbu holatni to'g'iri deyish mumkin. Lekin umumiy holda *yaqin* atamasi baholarning turlariga va modelni ishlab chiqayotgan izlanuvchiga bog'liq bo'ladi. Shuning uchun ham biz bu yerda nibiylikka etibor beramiz va aniq biror sonni ayta olmaymiz.\n", "\n", "Shunday bo'lsada, odatda biz oxirgi holtaga ko'proq duch kelamiz chunki modellarni hozirgi kunda yetarlicha ko'p parameterli qilishimiz mumkin. Bu kabi holatlarni bitta yoki ikkita algoritmlar bilan umumiy holda yechib bo'lmaydi, ya'ni o'rtadagi holatni yuzaga chiqarish uchun umumiy xulosa ayta olmaymiz. Ushbu bobda aytmoqchi bo'lganimiz esa ushbu holatlarni biz kelajakda uchratamiz va har bir muammoga alohida yondashamiz. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regressiya masalari\n", "\n", "Mashinali o'rganishining birinchi qismida tariflaganimizdek regressiya masalasi sinflash masalasidan keskin farq qiladi hamda biz bunday muammolar uchun baholashni *aniqlik* deb kiritishimiz ham umumiylikda o'rinli bo'lmaydi. Chunki biz sinflash muammolarirda algoritm to'g'iri topgan javoblar sonini bilish orqali aniqlik bahosini kiritayotgan edik. Bu yerda esa ushbu natijalar diskret sonlar yoki nomlar (guruhning nomlari) bo'lmasdan, odatda haqiqiy son bo'ladi va natijalarni sinflash masalasidagi *aniqlik* asosida solishtirish bahoning $0$ qiymat chiqishiga olib keladi. Buning asosiy sababi esa biror $[a, b]$, $a