logo

MASHINALI O’QITISHDA GRADIENTLI TUSHISH ALGORITMINI CHIZIQLI REGRESSIYA YORDAMIDA TADQIQ QILISH

Yuklangan vaqt:

20.11.2024

Ko'chirishlar soni:

0

Hajmi:

1751.486328125 KB
MAVZU:  MASHINALI O’QITISHDA GRADIENTLI TUSHISH
ALGORITMINI CHIZIQLI REGRESSIYA YORDAMIDA TADQIQ QILISH
MUNDARIJA
KIRISH 3
BOB I GRADIENT TUSHISH USULIGA MATEMATIK NAZAR
1.1 Gradient tushish usuli: asosiy tushunchalar  7
1.2 Gradient tushish usuli algoritmi, misollar 13
1.3 Gradient tushish usuli uchun dasturiy vosita 19
BOB II CHIZIQLI REGRESSIA MODELIDA GRADIENT TUSHISH 
USULI 
2.1 Mashinali o’qitishda chiziqli regressia 23
2.1.1 Bir o’zgaruvchili chiziqli regressia 24
2.1.2 Ko’p o’zgaruvchili chiziqli regressia 27
2.2 Gradient tushish usulining chiziqli regressiada qo’llanilishi: 
maqsad funksiya 28
2.3 Chiziqli regressia modeli yordamida uy-joy narxlarini 
o’rganish 31
2.3.1 Ma’lumot yig’ish va qayta ishlash 32
2.3.2 Ma’lumotlarni o’qitish, model parametrlarini 
aniqlash 34
2.4 Chiziqli regressiya modeli uchundasturiy vosita 36
Adabiyotlar ro’yxati 38
Ilovalar 39
1 Kirish
Masalaning   qo‘yilishi.   Gradient   tushush   usuli   va   uning   mashinali   o’qitish
algoritmlaridan   biri   bo’lgan   chiziqli   regressiyada   qo’llanilishini   o’rganish,   bu
algoritmlarni amaliy qo’llash uchun uy-joy narxlarini regression tahlil qilish hamda
ushbu usul va algoritmlarga asoslangan dasturiy vositalar ishlab chiqish.
Mavzuning   dolzarbligi.   Bugunguni   kunda   juda   ko’plab   sohalar   (tavsiya
tizimlari,   tasvirlarni   aniqlash,   tabiiy   tilni   qayta   ishlash   va   moliyaviy   bashoratlar)
dagi   turli   xil   hayotiy   masalalarni   yechishda   ularga   oid   tarixiy   ma’lumotlar,
mashinali   o’qitish   algoritmlari,   jumladan   chiziqli   regressia   algoritmi   orqali   tahlil
qilinib,   eng   yaxshi   yechim,   tavsiya,   bashorat   yoki   qarorlar   qabul   qilinmoqda.
Chiziqli   regressiya   algoritmi   bu   nazoratli   o’qitish   algoritmi   bo’lib,   u   kirish
xususiyatlari   va   maqsadli   o'zgaruvchi   o'rtasidagi   chiziqli   munosabatni   aniqlashdan
iborat.   Chiziqli   resgressiya   natijalarining   aniqligi,   chiziqli   munosabat
koeffisentlarining aniqligiga bo’gliq bo’lib, u odatda gradient tushish usullari orqali
aniqlanadi.   Shu   nuqtai   nazardan   chiziqli   regressiya   modelini   qurishda   gradient
tushish usulini tadqiq qilish va bu usulga asoslangan  dasturiy vosita ishlab chiqish
muhim hisoblanadi. 
Ishning maqsad va vazifalari.   Bitiruv malakaviy ishning asosiy   maqsad va
vazifasi   bu   chiziqli   regressiya   modelini   qurish   jarayonida   gradient   tushish
usumining o’rnini anglash va bu usulga asoslangan dasturiy vosita ishlab chiqishdan
iborat.
Ilmiy-tatqiqot   usullari.   Ushbu   bitiruv   malakaviy   ishida,   chiziqli   regressiya
modelini   qurishda   gradient   tushish   usulining   qo’llanilishini   tadqiq   qilish   uchun
matematik analiz, ehtimollar nazaryasi va matematik statistika, mashinaviy o’qitish
hamda python dasturlash tili kurslarining ba’zi tushuncha, usul va yondoshuvlaridan
foydalanilgan.
Mavzuning o‘rganilish darajasi. 
2 Chiziqli   regressiya   19-asr   oxiri   va   20-asr   boshlarida   Frensis   Galton   va   Karl
Pirson   ishlariga   borib   taqaladigan   boy   tarixga   ega.   Uning   uzoq   vaqtdan   beri
qo'llanilishi va rivojlanishi uni to'liq tushunishga yordam berdi. Chiziqli  regressiya
modellari   mashinali   o'qitish   va   statistikada   eng   yaxshi   o'rganilgan   va   fundamental
usullardan   biridir.   Ularning   keng   qamrovli   o'rganilishi   va   qo'llanilishi   bir   necha
omillarga bog'liq:
Oddiylik va tushunarlilik:
Chiziqli   regressiya   modellarini   tushunish   va   izohlash   oson.   Bog'liq   va
mustaqil   o'zgaruvchilar   o'rtasidagi   bog'liqlik   aniq   bo'lib,   model   bashoratlarini
tushuntirishni osonlashtiradi.
Nazariy asos:
Chiziqli   regressiya   mustahkam   nazariy   asosga   ega.   Eng   kichik   kvadratlarni
baholash   tamoyillari,   chiziqli   modelning   taxminlari   va   baholovchilarning
xususiyatlari yaxshi tasdiqlangan. Ushbu nazariy asoslash  modelning xatti-harakati
va cheklovlarini tushunishga yordam beradi.
Keng qo'llanilishi:
Chiziqli regressiya iqtisodiyot, biologiya, muhandislik va ijtimoiy fanlar kabi
turli   sohalarda   qo'llanilishi   mumkin.   Uning   ko'p   qirraliligi   uni   turli   sohalarda
qimmatli vositaga aylantiradi.
Kengaytmalar va variantlar:
Chiziqli   regressiya   muayyan   ehtiyojlarni   qondiradigan   ko'plab   kengaytmalar
va variantlarga ega:
Bir   va   ko’p   o’zgaruvchili   chiziqli   regressiya:   oddiy   chiziqli   regressiyani   bir
nechta bashorat qiluvchilarga kengaytiradi.
Ko’pxadli   regressiya:   Polinom   atamalarini   kiritish   orqali   chiziqli   bo'lmagan
munosabatlarni modellashtiradi.
Ridge   va   Lasso   regressiyasi:   haddan   tashqari   moslashishning   oldini   olish
uchun tartibga solishni joriy qiling.
Dasturiy ta'minot va asboblarni qo'llab-quvvatlash:
3 Chiziqli   regressiya   R,   Python   (scikit-learn,   statsmodels),   MATLAB   va   SAS
kabi   ko'plab   dasturiy   vositalar   va   kutubxonalar   tomonidan   qo'llab-quvvatlanadi.
Ushbu vositalar foydalanish uchun qulay dasturlarni taqdim etadi va model yaratish,
baholash va diagnostika qilishni osonlashtiradi.
Ta'lim maqsadlarida foydalanish:
Chiziqli   regressiya   ko'pincha   statistika   va   mashinali   o'qitish   kurslarida
o'qitiladigan   birinchi   modellardan   biridir.   Uning   soddaligi   uni   yanada   murakkab
modellar va texnikalarni o'rganish uchun ajoyib boshlanish nuqtasiga aylantiradi.
Tadqiqotning   ilmiy   yangiligi.   Bitiruv   malakaviy   ishida   olingan   natijalar
amaliy-uslubiy   xarakterga   ega   bo‘lib,   ishda   ko’p   o’zgaruvchili   qavariq
funksiyalarning ekstremumlari (maksimum yoki minimum) ni topish uchun gradient
tushish usuliga asoslangan dasturiy ta’minot yaratligan. Bu dasturiy ta’minot Python
dasturlash tilida yaratilgan bo’lib u vizuallashgan qulay interfeysga ega.
Tadqiqot   predmeti   va   ob’ekti.   Tadqiqotning   predmeti   “Mashinaviy
o’qitish”, “Mashinaviy o’qitishda optimallashtirish usullari”, “Kompyuter ilmlarida
statistik   modellar”,   “Ehtimollar   nazaryasi   va   matematik   statistika”   ,   “Matematik
analiz”,   “Python   dasturlash   tili”   va   shu   kabi   fan   sohalari   bo‘lib,   ob’ekti   chiziqli
regressiya modeli va gradient tushish usulidan iborat.
Tatqiqotnig   ilmiy   va   amaliy   ahamiyati.   Ishda   olingan   natijalar   va   unda
qo‘llanilgan   usullardan   turli   iqtisodiy,   ijtimoiy   sohalarning   ko‘pgina   amaliy
masalalarini   tadqiq   qilishda,   “Ehtimollar   nazaryasi   va   matematik   statistika”,
“Matematik   analiz”,   “Kompyuter   ilmlarida   statistik   modellar”   va   shu   kabi
fanlarning   amaliy   mashg‘ulotlari   o‘quv   jarayonlarida   dasturiy   vosita   sifatida
foydalanish mumkin.
Ishning   tuzilishi.   Ushbu   ish   kirish,   ikki   bob,   xulosa,   foydalanilgan
adabiyotlar ro‘yxati va ilovalardan iborat.
I bob uchta paragrafdan iborat bo‘lib, uning birinchi va ikkinchi  paragrafida
adabyotlardan   foydalanilgan   holda,   gradient   tushish   usuli   haqida   umumiy
tushunchalar,   usul   algoritmi   keltirilgan   va   bu   usul   yordamida   misollar   yechilgan.
4 Uchinchi   paragrafda   gradient   tushish   usuliga   asoslanib   ishlab   chiqilgan   dasturiy
vosita haqida ma’lumotlar keltirilgan.
II   bob   uchta   paragrafdan   iborat   bo’lib   birinchi   paragraph   ikkita   qism
paragrafdan   iborat   bo’lib,   mos   ravishda,   bir   o’zgaruvchili   va   ko’p   o’zgaruvchili
chiziqli   regressiyalar   haqida   ma’lumotlar   keltirilgan.   Ikkinchi   paragraf   gradient
tushish   usilining   chiziqli   regressia   modelida   qo’llanilishiga   bag’ishlangan   bo’lib,
maqsad funksiyani tanlash va uning parametrlarini aniqlashga e’tibor qaratilgan. Bu
bobning uchinchi  paragrafida mavzuda  doir  amaliy masala  qaralgan, ya’ni  chiziqli
regressiya   algoritmiga   asoslanib   uy-joy   narxlarini   bashorat   qilish   modelini   ishlab
chiqishga   qaratilgan   bo’lib   u   ikkita   ta   qism   paragrafdan   iborat.   Birinchi   qism
paragrafda   uy-joy   narxlariga   tegishli   ma’lumotlarni   to’lash   va   qayta   ishlash
qaralgan,   ikkinchi   qism   paragrafda   model   parametrlarini   aniqlash   va   model
natijasining aniqligini baholashga qaratilgan.
Olingan natijalarning qisqacha mazmuni.  Bitiruv malakaviy ishida chiziqli
regressiya modelini qurish jarayonida, gradient tushish usulining o’rni, qo’llanilishi
o’rganildi   va   gradient   tushish   usuliga   asoslangan   dasturiy   vosita   ishlab   chiqilgan.
Chiziqli regrsssiya modelida gradient tshish usulini yanada yaxshiroq anglsh uchun
amaliy   masala   yechilgan   ya’ni   uy-joy   narxlari   chiziqli   regressiya   algoritmi
yordamida tahlil qililinib bashorat qilivchi model ishlab chiqilgan.  
5 BOB I
GRADIENT TUSHISH USULIGA MATEMATIK NAZAR
1.1 Gradient tushish usuli: asosiy tushunchalar
Gradient  tushish usuli  bu iterativ birinchi  darajali optimallashtirish algoritmi
bo'lib,   berilgan   funksiyaning   lokal   minimum   va   maksimumlani   topish   uchun
ishlatiladi.   Ushbu   usul   odatda   mashinali   o'qitishda   va   chuqur   o'qitishda
maqsad/yo'qotish  (loss  function) funktsiyasini  minimallashtirish uchun qo'llaniladi.
Muhimligi va amalga oshirish qulayligi tufayli ushbu algoritm odatda deyarli barcha
mashinali  o'qitiish kurslarining boshida o'rganiladi. Biroq, undan foydalanish faqat
mashimali   o’qitish   yoki   chuqur   o’qitish   bilan   cheklanmaydi,   u   quyidagi   sohalarda
ham   keng   qo'llaniladi:   boshqaruv   muhandisligi   (robotexnika,   kimyo   va   boshqalar)
kompyuter   o'yinlari,   mashinasozlik   va   h.k..   Shuning   uchun   bu   ishda   biz   birinchi
darajali   gradient   tushish   algoritmining   matematikasi,   amalga   oshirilishi   va   xatti-
harakati bilan chuqur tanishamiz. Biz to'g'ridan-to'g'ri maxsus maqsad funktsiyasini
ko'rib   chiqamiz   va   uning   minimalini   topamiz.   Bu   shuni   anglatadiki,   odatiy
mashinali   o’qitish   darslarida   bo'lgani   kabi   asosiy   ma'lumotlar   bo'lmaydi   -   biz
funktsiya   shakliga   nisbatan   moslashuvchanroq   bo'lamiz.   Bu   usul   zamonaviy
kompyuterlar davridan ancha oldin 1847 yilda Avgustin-Lui Koshi tomonidan taklif
qilingan.   O'sha   vaqtdan   boshlab   informatika   va   raqamli   usullarda   sezilarli
rivojlanish   bo'ldi.   Bu   esa   gradient   tushish   usulining   ko'plab   takomillashtirilgan
variantlari   paydo   bo’lishiga   olib   keldi.   Biroq,   ushbu   ishda   biz   klassik   gradient
tushish   usuli   va   unig   chiziqli   regressiyadagi   tadbiqini   o’rganish   bilan
chegaralanamiz.
6 Funksiyaga   qo’yilgan   talablar .   Gradient   tushish   algoritmi   barcha
funktsiyalar   uchun   ishlamaydi.   Ikkita   asosiy   maxsus   talab   mavjud.   Funktsiya
quyidagicha   bo'lishi   kerak:   differensiallanuvchi   va   qavariq.   Bu   talablarni   alohida-
alohida   ko’rib   chiqamiz.   Differensiallanuvchilik   talabi,   agar   funktsiya   differentsial
bo'lsa,   u   o'z   aniqlanish   sohasidagi   har   bir   nuqta   uchun   hosilaga   ega   -   barcha
funktsiyalar   bu   mezonlarga   javob   bermaydi.   Birinchidan,   ushbu   mezonga   javob
beradigan ba'zi funktsiyalar misollarini ko'rib chiqaylik
Rasm 1. Uzluksiz differensiallanuvchi funksiyalar
Rasm 2. Differensiallanuvchi bo’lmagan funksiyalar
7 Keyingi   talab   -   funktsiya   qavariq   bo'lishi   talabi.   Bir   o'zgaruvchan   funktsiya
uchun   bu   ikkita   funktsiya   nuqtasini   bog'laydigan   chiziq   segmenti   uning   egri
chizig'ida   yoki   uning   ustida   joylashganligini   anglatadi   (uni   kesib   o'tmaydi).   Agar
shunday bo'lsa, bu global bo'lmagan mahalliy minimumga ega ekanligini anglatadi.
Matematik jihatdan funktsiya egri chizig'ida joylashgan ikkita x ₁ , x ₂  nuqtalar uchun
bu shart quyidagicha ifodalanadi:
f( λ x
1 +	( 1 − λ	) x
2	) ≤ λf	( x
1	) + ( 1 − λ ) f ( x
2 )
Bu   erda   l   nuqtaning   kesma   chizig'idagi   joylashishini   bildiradi   va   uning   qiymati   0
(chap nuqta) va 1 (o'ng nuqta) orasida bo'lishi kerak, masalan. l=0,5 o‘rtadagi joyni
bildiradi. Quyida namunali bo'lim chiziqlari bilan ikkita funksiya mavjud.
Rasm 3. Qavariq va qavariq bo’lmagan funksiyalar
Bir o'zgaruvchan funksiya qavariq ekanligini matematik tarzda tekshirishning
yana   bir   usuli   ikkinchi   hosilani   hisoblash   va   uning   qiymati   noldan   katta   yoki
yo'qligini tekshirishdir.	
d2f(x)	
dx	2	>0
Keling, oddiy kvadrat funksiyani tekshirib ko raylik:
ʻ	
f(x)=	x2−	x+3
Uning birinchi va ikkinchi hosilalari quyidagilarga teng:
8 df	(x)	
dx	=	2x−1,d2f(x)	
dx	2	=2Ikkinchi   hosila   har   doim   0   dan   katta   bo'lgani   uchun   bizning   funksiyamiz   qat'iy
ravishda   qavariqdir.   Shuningdek,   gradientli   algoritm   bilan   kvasi-konvex
funksiyalardan   foydalanish   mumkin.   Biroq,   ko'pincha   ular   algoritm   to'xtab   qolishi
mumkin bo'lgan taxminiy joylarga ega bo'ladi. Quasi-konveks funksiyaga misol.
f	
( x	) = x 4
− 2 x 3
+ 2
df ( x )
dx = 4 x 3
− 6 x 2
= x 2
( 4 x − 6 )
Ko'rinib   turibdiki,   birinchi   hosila   x=0   va   x=1.5   da   nolga   teng.   Bu   joylar   funksiya
uchun nomzodlar hisoblanadi (minimal yoki maksimal) burchak burchagi nol. Lekin
avval ikkinchi hosilani tekshirib ko'rishimiz kerak.	
d2f(x)	
dx	2	=12	x2+12	x=12	x(x−1)
Ushbu ifodaning qiymati   x=0   va   x=1   uchun nolga teng. Ushbu joylar egrilik
nuqtasi deb ataladi, egrilik belgisi o'zgarib turadigan joy bu qavariqlikdan botiqlikga
yoki   aksinchaga   o'zgarishini   anglatadi.   Ushbu   tenglamani   tahlil   qilish   orqali
quyidagi   xulosaga   kelamiz:   x<0   bo’lganda   funksiya   qavariq   bo’ladi, 0<x<1
bo’lganda funksiya botiq bo’ladi  x>1  bo’lganda funksiya yana qavariq bo’ladi. Endi
biz   x=0   nuqtada   funksiyaning   birinchi   va   ikkinchi   hosilalari   ham   nolga   teng
ekanligini   ko'ramiz,   ya'ni   bu   egar   nuqta   bo’ladi   va   x=1.5   nuqtada   funksiyaning
birinchi   hosilasi   nolga   teng   va   ikkinchi   hosilasi   musbat   shuning   uchun   bu   global
minimum   nuqta,   bu   nuqtada   funksiya   global   minimumga   erishadi.   Keling,   ushbu
funksiyaning   grafigiga   qaraylik.   Egar   nuqta   x=0   va   minimum   nuqta   x=1,5
ekanligini grafikdan ko’rishimiz mumkin.
9 Rasm 4. Egar va minimum nuqta
Ko'p   o'zgaruvchili   funksiyalar   uchun   nuqta   egar   nuqtasi   bo'ladimi   yoki
yo'qligini tekshirishning eng mos yo'li bu biroz murakkab hisob-kitoblarni o'z ichiga
oldi   va   bu   Hessa   matritsasini   hisoblashni   o’z   ichiga   oladi.   Ikki   o’zgaruvchili
funksiya uchun egar nuqta misoli quyidagi ko rinishda bo’ladi.ʻ
Rasm 5. Ikki o’zgaruvchili funksiyaning egar nuqtasi
Gradient.   Algoritmga     o'tishdan   oldin   yana   bir   narsani   tushuntirish   kerak   -
gradient   nima.   Intuitiv   ravishda   bu   ma'lum   bir   yo'nalishdagi   ma'lum   nuqtada   egri
chiziqning qiyaligi (kamayib borishi).   Bir o'zgaruvchili funksiya bo'lsa, u tanlangan
nuqtadagi   birinchi   hosiladir.   Ko'p   o'zgaruvchan   funktsiya   bo'lsa,   u   har   bir   asosiy
yo'nalishdagi (o'zgaruvchan o'qlar bo'ylab) hosilalar vektoridir. Bizni faqat bitta o'q
bo'ylab qiyalik qiziqtiradi va boshqalarga ahamiyat bermaymiz, bu hosilalar qisman
10 hosilalar deb ataladi. Berilgan   p  nuqtadagi   n  o‘lchamli   f(x)  funksiya uchun gradient
quyidagicha aniqlanadi:
∇ f( p	) =	
[ ∂ f
∂ x
1 ( p )
:
∂ f
∂ x
n ( P )	]
Teskari uchburchak nabla deb ataladigan belgidir va siz uni "del" deb o'qiysiz. Uni
qanday hisoblashni yaxshiroq tushunish uchun quyidagi ikki o'zgaruvchili funksiya
uchun qo'lda hisob-kitob qilaylik.	
f(x)=0.5	x2+y2
Rasm 6. 	
f(x)=0.5	x2+y2  funksiyaning 3D grafigi
Faraz qilaylik, bizni p(10,10) nuqtadagi gradient qiziqtiradi:
∂ f ( x , y )
∂
x = x , ∂ f ( x , y )
∂
y = 2 y
shuning uchun	
∇	f(x,y)=[
x
2y],∇	f(10,10	)=[
10
20	]
11 Ushbu   qiymatlarga   qarab,   biz   qiyalik   y   o'qi   bo'ylab   ikki   baravar   tikroq   degan
xulosaga kelamiz.
1.2 Gradient tushish usuli algoritmi, misollar
Ushbu   paragrafda   dastlab   gradient   tushish   usulining   umumiy   goyasi
keltirilgan   va   keyin   aniq   algoritmi   hamda   bu   algoritmdan   foydalanib   misol
yechilgan. Gradient tushish algoritmi joriy pozitsiyadagi gradient yordamida keyingi
nuqtani iterativ tarzda hisoblab chiqiladi, uni o'lchaydi (o'rganish tezligi bo'yicha) va
olingan qiymatni joriy pozitsiyadan olib tashlaydi (qadam qiladi). Bu qiymatni olib
tashlaydi,   chunki   biz   funktsiyani   minimallashtirishni   xohlaymiz   (uni   maksimal
darajaga ko'tarish uchun qo'shiladi). Bu jarayonni quyidagicha yozish mumkin:pn+1=	pn−	η∇	f(pn)
Gradientni   o'lchaydigan   va   shu   bilan   qadam   o'lchamini   boshqaradigan   muhim
parametr   mavjud.   Mashinali   o'qitishda   u   o'qitish   tezligi   deb   ataladi   va   ishlashga
kuchli   ta'sir   qiladi.O'qitish   tezligi   qanchalik   kichik   bo'lsa,   gradient   tushish
shunchalik uzoq davom etadi yoki optimal nuqtaga yetguncha maksimal iteratsiyaga
erishishi mumkin. Agar o'rganish tezligi juda katta bo'lsa, algoritm optimal nuqtaga
yaqinlashmasligi (atrofga sakrash) yoki hatto butunlay ajralib chiqmasligi mumkin.
Xulosa qilib aytganda, gradient tushish usulining bosqichlari quyidagicha:
 boshlang'ich nuqta tanlanadi (boshlang'ichlashtirish)
 ushbu nuqtada gradient hisoblanadi
 gradientga qarama-qarshi yo'nalishda qadam tanlanadi 
 mezonlardan biri bajarilmaguncha yuqoridagi 2 va 3 bandlar takrorlanadi.
12 Qadam   o'lchamining   kattaligi   o’zgarmagan   holat   o’zgarmas   qadamli   gradient
tushish usuli hisoblanadi. 
Quyida   ko’p   o’zgaruchili   funksiyalar   uchun   o’zgarmas   qadamli   gradient
tushish usuli algoritmini aniq keltiramiz.
R n  
  to’plamda   quyidan   chegaralangan   va   uning   barcha   nuqtalarda   uzluksiz
xususiy xosilalarga ega bo’lgan  f(x)  funksiya berilgan bo’lsin.
X   =   R n    
joiz   nuqtalar   to’plamida   funksiyaning   lokal   minimumini,   ya’ni
shunday x * 
∊ R n 
nuqtani topish talab qilinadiki, unda
f ¿
shart bajarilsin.
Izlash strategiyasi
Masalani   yechish   strategiyasi,   shunday   {xk },   k=0,1,…,   nuqtalar   ketma-
ketligini qurishdan iboratki, bu ketma-ketlikning nuqtalari uchun,
f ( x k + 1
) < f ( x k
) , k=0,1…,
munosabatlar bajarilsin. {	
xk } ketma-ketlikning nuqtalari quyidagi
xk+1=	xk−	tk∇	f(xk)
, k=0,1,…,
qoida bo’yicha hisoblanadi, bunda 	
xk nuqta foydalanuvchi tomonidan beriladi; f ( x k
)
-
funksiyaning  
x k
nuqtada   hisoblangan   gradiyenti;  	
tk qadam   kattaligi   foydalanuvchi
tomonidan   beriladi   va   ketma-ketlikning   nuqtalarida   funksiya   kamayuvchi
bo’lganiga qadar o’zgarmasdan qoladi, bu esa ,	
f(xk+1)−	f(xk)<0
yoki 	f(xk+1)−	f(xk)←	ε∥∇	f(xk)∥2,0<ε<1
shartning   bajarilishini   tekshirish   yo’li   bilan   nazorat   qilinadi,   {	
xk }   ketma-ketlikni
qurish, ||	
∇	f(xk)<ε1 || tengsizlik o’rinli bo’ladigan 	xk nuqtada tugaydi, bunda  ε
1 berilgan
kichik musbat son, yoki  k ≥ M
, bunda M – bir vaqtning o’zida ikkita,
||
x k + 1
− x k
||<	
ε2 , | f ( x k + 1
) − f ( x k
) < ε
2
tengsizliklar bajariladigan iteratsiyalarning eng ko’p soni  	
ε2 - kichik musbat  son.  
x k
nuqtaning   izlanyotgan   minimum   nuqtasiga   yaqinlashish   sifatida   olinishi   masalasi
quyida bayon etilgan qo’shimcha tekshirishlar yo’li bilan hal etiladi.
Algoritm
13 1- qadam .   x
0 ,   0<ε<1,   ε
1 >0,   ε
2 >0,   M   –   iteratsiyalarning   eng   ko’p   (mumkin
bo’lgan) sonni berish. Funksiyaning ixtiyoriy nuqtadagi gradiyentini topish:∇
f(x)=	〖 ((∂f(x))/(∂x_1 ),...,(∂f(x))/(∂x_n ))	〗 ^T
2- qadam . K = 0 deb olish.
3- qadam .  ∇ f(x^k)hisoblash.
4- qadam . || ∇ f(x^k)|| < ε_1yakunlash kriteriyasini tekshirish:
a) agar kriteriya bajarilsa, hisoblashlar tugaydi: x* = xk;
b) agar tengsizlik bajarilmasa, 5-qadamga o’tish.
5- qadam . k≥Mtengsizlikning bajarilishini tekshirish:
a) agar tengsizlik bajarilsa, hisoblashlar tugaydi: x* = xk;
b) agar tengsizliklar bajarilmasa, 6-qadamga o’tish.
6- qadam . t_kqadam kattaligini berish.
7- qadam . x^(k+1)=x^k-t_k  ∇ f(x^k)ni hisoblash.
8- qadam .   f(x^(k+1))-f(x^k)<0(yoki   f(x^(k+1))-f(x^k)<-ε ∥∇ f(x^k)||2)   shartni
tekshirish
a) agar shart bajarilsa, u holda, 9-qadamga o’tish;
b agar shart bajarilmasa, t_k=t_k/2 deb olishva 7-qadamga o’tish
9- qadam .   ||x^(k+1)-x^k||<ε_2,   |f(x^(k+1)-f(x^k))|ε_2   tengsizlikning
bajarilishini tekshirish:
a) agar k va k=k-1 larning joriy qiymatlarida  tengsizliklarning   har
ikkisi ham bajarilsa, hisoblashlar tugaydi,  x*=xk+1;
b) agar tengsizliklardan birortasi bajarilmasa, u holda, k=k+1  deb
olish va 3-qadamga o’tish.
n=2 uchun usulning geometrik talqini 1-chizmada keltirilgan.
14 Rasm 7. Gardient tushish usulining 2D tasviri
Yaqinlashish
Tasdiq.   f(x)   funksiya   R n  
da   quyidan   chegaralangan   va   differensiallanuvchi
bo’lib, uning gradiyenti esa,
|| f ( x ) − f ( y )
|| < L||x-y||, Ax, 
y ∈ R n
,
Lipshits   shartini   qanoatlantirsin,   bunda   L>0.   U   holda,   ixtiyoriy  x0∈Rn boshlang’ich
nuqtada o’zgarmas qadamli tushish usuli uchun.
lim
x → 0 ∇ f	
( x k	)
= 0
munosabat o’rinli.
I zohlar .
1. 10.1   tasdiq   {	
xk }   ketma-ketlikning   ∇ f(x *
)   =   0   shart   bajariladigan   x *
statsianar nuqtaga yaqinlashishini kafolatlaydi. Demak usul qo’llanilganda
topilgan nuqta, uni sinflash uchun, qo’shimcha tadqiqotlarni talab qiladi.
2. Gradiyentli   tushish   usuli   {x k
}   ketma-ketlikning   kuchli   qavariq
funksiyalarning minimum buqtasiga yaqinlashishini kafolatlaydi.
3.  Misollar yechishda yaxshiroq 	
tk  miqdorni tanlashning iteratsion jarayoni 
15 7   va   8   qadamlarning   indekslarida   namoyon   bo’ladi.   Bunda   birinchi   indeks
raqam   bilan,   ikkinchisi   esa,   joriy   t
k miqdorning   teng   ikkiga   bo’linishi   bilan
ustma-ust tushadi.
Yaqinlashishning tezligi
Yaqinlashish tezligini baholashlar, faqat kuchli qavariq funksiyalar uchun, {xk
}   ketma-ketlik   f(x)   funksiyaning   minimum   nuqtasiga   geometrik   progressiya
tezligida yaqinlashganda, olingan:
f(x k
)-f(x *
)=<q k
(f(x 0
)-f(x *
)), ||x k
-x *
|| =<  C (	
√ q ) k
,
bunda 	
q∈(0.1	) , C>0 – o’zgarmas sonlar.
Izoh .   Agar f(x) funksiyaning global minimumini topish talab qilingan bo’lsa,
qat’iy   qavariq   f(x)   funksiya   uchun   bu   masalani   yechish   funksiyaning   lokal
minimumini izlashga o’xshash bo’ladi. f(x) funksiya bir nechta lokal minimumlarga
ega   bo’lsa,   global   minimumni   izlash,   barcha   lokal   minimumlar   ichidan   tanlash
natijasida amalga oshiriladi.’
M isol.  Ushbu
f ( x ) = 2 x 2
1 + x
1 x
2 + x 2
2
funksiyaning lokal minimumini toping.
1. Hisoblashlarni tugatish kriteriyalaridan hech bo’lmaganda bittasi bajarilgan,
x k
 nuqtani aqiqlash.
1.   x 0
,   ε
1 ,   ε
2 ,   M   :   x 0  
=   (0.5;   1) T
,   ε
1 =   0.1;   ε
2 =   0.15;   M   =   10   larni   beramiz.
Funksiyaning ixtiyoriy nuqtadagi  ∇ f ( x ) = ( 4 x
1 + x
2 ; x
1 + 2 x
2 ) T
gradiyentini topamiz.
2.  k = 0 deb olamiz.
3 0
.  ∇ f ( x 0
)
ni hisoblaymiz:  ∇ f ( x 0
) = ( 3,2.5 ) T
4 0
.  || ∇ f ( x 0
)
|| ni hisblaymiz: || ∇ f ( x 0
)
|| = 3.9 > 0.1. 5-qadamga o’tamiz.
5 0
.  k ≥ M
ni tekshiramiz: k = 0 < 10 =M. 6-qadamga o’tamiz.
6 0
.  t
0  = 0.5 miqdorni beramiz.
7 0
.  x 1 
ni hisoblaymiz: x 1 
 = (0.5,1) T –
 0.5(3,2.5) T
 = (-1,0.25);
f(x 1
) = 2.31
16 8 0
.  f(x 1
) va f(x 0
) =2 larni taqqoslaymiz. f(x 1
) > f(x 0
) ekan. Xulosa: k = 0 uchun
f(x k+1
)   <   f(x k
)   shart   bajarilmaydi.   t 0  
=   0.25   miqdorni   beramiz   va   7-,   8-   qadamlarni
takrorlashga o’tamiz.
7 01
.  x 1 
ni hisoblaymiz x 1
 = (0.5,1) T
 – 0.25(3,2.5) T
 = (-0.25;0.374) T
;
f(x 1
) = 0.171
8 01
.  f(x 1
) va f(x 0
) larni taqqoslaymiz: Xulosa f(x 1
) < f(x 0
). 9-qadamga o’tamiz.
9 0
.  ||x 1
-x 0
|| va |f(x 1
)-f(x 0
)| larni hisoblaymiz:
||x 1
-x 0
||=0.976>0.15; |f(x 1
)-f(x 0
)|=1.829>0.15
Xulosa: k=1 deb olamiz va 3-qadamga o’tamiz.
3 1
.  ∇ f(x 1
) ni hisoblaymiz:  ∇ f(x 1
)=(-0.625;0.51) T
.
4 1
.  || ∇ f(x 1
)|| ni hisoblaymiz: || ∇ f(x 1
)||=0.81. 5-qadamga o’tamiz.
5 1
.   k ≥ M
 shartni tekshiramiz: k=1<10=M. 6-qadamga o’tamiz.
6 1
.  t1=0.25 miqdorni beramiz.
7 1
.  x 2 
ni hisoblaymiz.
x 2
=(-0.25;0.375) T
-0.25(-0.25;0.375) T
=(-0.094;0.25) T
; f(x 2
)=0.056
8 1
.  f(x 2
) va f(x 1
) larni taqqoslaymiz. Xulosa f(x 2
)<f(x 1
). 9-qadamga o’tamiz.
9 1
.  ||x 2
-x 1
|| va |f(x 2
)-f(x 1
)| larni hisoblaymiz:
||x 2
-x 1
||=0.2>0.15; |f(x 2
)-f(x 1
)|=0.115<0.15
Xulosa: k=2 deb olamiz va 3-qadamga o’tamiz.
3 2
.  ∇ f(x 2
) ni hisoblaymiz:  ∇ f(x 2
)=(-0.126;0.406) T
4 2
.  || ∇ f(x 2
)|| ni hisoblaymiz. || ∇ f(x 2
)||=0.425>0.1. 5-qadamga o’tamiz.
5 2
.  k ≥ M
shartni tekshiramiz. K=2<10=M. 6-qadamga o’tamiz.
6 2
. 	
t2=0.25 miqdorni beramiz.
7 2
.  x 3 
ni hisoblaymiz:
x 3
=(-0.094;0.25) T
-0.25(-0.126;0.406) T
=(-0.063;0.15) T
; f(x 3
)=0.021.
8 2. 
f(x 3
) va f(x 2
) larni taqqoslaymiz. Xulosa f(x 3
)<f(x 2
). 9-qadamga o’tamiz.
9 2
.  ||x 3
-x 2
|| va |f(x 3
)-f(x 2
)| larni hisoblaymiz:
||x 3
-x 2
||=0.105<0.15; |f(x 3
)-f(x 2
)|=0.035<0.15
Xulosa: k=3 deb olamiz va 3-qadamga o’tamiz.
17 3 3
.  ∇ f(x 3
) ni hisoblaymiz:  ∇ f(x 3
)=(-0.102;0.237) T
4 3
.  || ∇ f(x 3
)|| ni hisoblaymiz: || ∇ f(x 3
)||=0.257>0.1. 5-qadamga o’tamiz.
5 3
. k≥M shartni tekshiramiz: k=3<10=M. 6-qadamga o’tamiz.
6 3
.  t
3 = 0.25
miqdorni beramiz.
7 3
.  x 4
 ni hisoblaymiz:
x 4=
(-0.063;0.15) T
-0.25(-0.102;0.237) T
=(-0.038;0.091) T
; f(x 4
)=0.0076
8 3
.  f(x 4
) va f(x 3
) larni taqqoslaymiz: f(x 4
) < f(x 3
).
9 3
.  ||x 4
-x 3
|| va |f(x 4
)-f(x 3
)| larni hisoblaymiz:
||x 4
-x 3
||=0.064>0.15; |f(x 4
)-f(x 3
)|=0.015<0.15
k=2.3 bo’lganda,
||	
xk+1−	xk || <  ε
2 , |f(x k+1
)–f(x k
)|<ε
2
shartlar   bajariladi.   Hisoblashlar   tugadi.   X 4
=(-0.038;0.091) T  
nuqta   topildi:
f(x 4
)=0.0076
Topilgan nuqtalar 2-chizmada punktir chiziqlar bilan tutashtirilgan.
2.  x 4 
ning tahlili.	
f(x)=	2x2
1+x1x2+x2
2
  funksiya   ikki   marta   differensiallanuvchi,   shu   sababli,   x 4
  nuqta
minimumining yetarli shartlarini tekshirish o’tkazamiz. Buning uchun,  H ( 4 1
1 2 )
Gess
matritsasini tahlil qilamiz. Matritsa o’zgarmas va musbat aniqlangan (ya’ni H > 0),
chunki, uning  ∇
1 =4 va
∇
2 =7 burchak minorlarining ikkisi ham musbat. Shunday qilib
x 4
  =   (-0.038;0.091) T
  nuqta   x *
=(0,0) T
  lokal   minimum   nuqtasi   uchun   topilgan
yaqinlashish bo’lib, f(x 4
)=0.076 esa, f(x *
)=0 qiymat uchun topilgan yaqinlashishdan
iborat.   Shuni   etirof   etish   kerakki,   H>0   shart   bir   vaqtning   o’zida   R 2  
da
f ( x ) = 2 x 2
1 + x
1 x
2 + x 2
2 funksiyaning qat’iy qavariqliqi shartidan iborat.
Demak   x 4
=(-0.038;0.091) T
,   f(x 4
)=0.0076   lar   f(x)   funksiyaning   minimum
nuqtasi va uning eng kichik qiymati uchun topilgan yaqinlashishlardan iborat ekan.
18 1.3 Gradient tushish usuli uchun dasturiy vosita
Ushbu paragrafda gradient tushish usuli uchun ishlab chiqilgan dasturiy
vosita   haqida   foydalanuvchilar   uchun   ma’lumotlar   keltirilgan.   ishda   ko’p
o’zgaruvchili qavariq funksiyalarning ekstremumlari (maksimum yoki minimum) ni
topish   uchun   gradient   tushish   usuliga   asoslangan   dasturiy   ta’minot   yaratligan.   Bu
dasturiy   ta’minot   Python   dasturlash   tilida   yaratilgan   bo’lib   u   vizuallashgan   qulay
interfeysga ega.
Rasm 8. Dasturiy vositaning asosiy oynasi
Dasturiy   vosita   sodda   interfeysga   ega,   birinchi   tekst   maydonchaga   maqsad
funksiya   kiritiladi.   Maqsad   funksiyaga   ekstremum   (maksimum   yoki   minimum)   ga
ega   bo’lishi   uchun   qavariqlik   va   uzluksiz   differensiallanuvchilik   talabi   qo’yilgan.
Ilovadagi   ikkinchi   satrdagi   tekst   maydonchalarga   mos   ravishda   gradient   tushish
usulidagi qadam kattaligi (odatda  t  bilan belgilanadi) va aniqlik koeffisenti (  ε
 bilan
belgilanadi) kiritiladi. Kerakli ma’lumotlar kiritilgandan keyin “Hisoblash” tugmasi
bosilganda   kiritilgan   funksiyaning   minimumi   va   minimumga   erishadigan   nuqtalar
qiymatlari   ilovaning   pastki   qismidagi   katta   tekst   maydonchada   hosil   bo’lai.   Agar
qo’yilgan   talablarga   mos   bo’lmagan   funksiya   kiritilsa   xatolik   haqida   ma’lumot
beriladi.
19 Rasm 9. Ilovaga funksiya, qadam kattaligi va aniqlik koeffisenti kiritilga holat
Ilova yordamida ikki  o’zgaruvchili  funksiya   F( x
1 , x
2	) = x
12
+ x
22
+ 2 x
1 + 5
  ning minimumi
t=0.1   qadam kattaligida va aniqlik koeffisenti   ε
=0.01   bo’lgan hol uchun yechilgan,
yechim quyidagi rasmda keltirilgan.
Rasm 10. Masala yechimi keltirilgan oyna	
F(x1,x2)=	x12+x22+2x1+5
  ushbu funksiyaning minimumini analitik yo’l  ilan topadigan
bo’lsak quyidagilarga ega bo’lamiz:
∂ F
∂ x
1 = 2 x
1 + 2 = 0 , ∂ F
∂ x
2 = 2 x
2 = 0 , x
1 = − 1 , x
2 = 0
20 Demak kritik nuqta (x¿¿1,x2)=(−1,0)¿
∂ 2
F
∂ x
12 = 2 , ∂ 2
F
∂ x
22 = 2 , ∂ 2
F
∂ x
1 x
2 = 0 , ∂ 2
F
∂ x
2 x
1 = 0 , H = ( 2 0
0 2 )
Hessa   matritsasi   musbat   aniqlangani   uchun   ushbu   funksiya   kritik   nuqtada
minimumga erishadi, ya’ni	
(x¿¿1,x2)=(−1,0),F(−1,0	)=	4¿
Ushu funksiyaning 3D grafigi quyidagicha.
Rasm 11. Funksiyaning 3D tasviri  
BOB II
CHIZIQLI REGRESSIA MODELIDA GRADIENT TUSHISH USULI
21 2.1 Mashinali o’qitishda chiziqli regressia
Chiziqli   regressiya   bu   regressiya   muammolarini   hal   qilishda   keng
qo'llaniladigan   mashinali   o'qitishda   nazorat   qilinadigan   o'qitish   algoritmilaridan
biridir,   maqsad   bir   yoki   bir   nechta   kirish   o'zgaruvchilari   asosida   doimiy   chiqish
o'zgaruvchisini   bashorat   qilishdir.Chiziqli   regressiyada   maqsad   kirish
o'zgaruvchilari   (shuningdek,   bashorat   qiluvchilar   yoki   xususiyatlar   deb   ataladi)   va
chiqish   o'zgaruvchisi   (javob   o'zgaruvchisi   sifatida   ham   tanilgan)   o'rtasidagi
munosabatlarni tavsiflash uchun eng mos chiziqli tenglamani topishdir.
Rasm 12. Bir o’zgaruvchili chiziqli regressia
Oddiy chiziqli regressiya modeli uchun tenglamani quyidagicha yozish mumkin:y=	b0+b1∗x
Bu   erda   y   -   bog'liq   o'zgaruvchi   (biz   bashorat   qilmoqchi   bo'lgan   o'zgaruvchi),   x   -
mustaqil o'zgaruvchilar (bashoratchi yoki xususiyat),  b
0  – ozod had termini (x nolga
teng bo'lgan y qiymati),   b
1  - qiyalik koeffitsientlari ( x  ning birlik o'zgarishi uchun  y
ning   o'zgarishi).   Chiziqli   regressiyaning   maqsadi   b
0   va   b
1   uchun   eng   yaxshi
qiymatlarni   topish,   shunda   chiziq   ma'lumotlar   nuqtalariga   eng   mos   keladi,   xatolar
yoki   prognoz   qilingan   qiymatlar   va   haqiqiy   qiymatlar   o'rtasidagi   farqni
minimallashtiradi.   Chiziqli   regressiya   turlari   quyidagilardan   iborat.   Chiziqli
regressiya modellarining ikkita asosiy turi mavjud: oddiy (bir o’zgaruvchili) chiziqli
regressiya   va   ko‘p   o’zgaruvchili   chiziqli   regressiya.   Oddiy   chiziqli   regressiyada
22 faqat   bitta   mustaqil   o'zgaruvchi   (shuningdek,   bashoratchi   yoki   xususiyat   sifatida
ham   tanilgan)   va   bitta   bog’liq   o'zgaruvchi   (javob   o'zgaruvchisi   sifatida   ham
tanilgan)   mavjud.   Oddiy   chiziqli   regressiyaning   maqsadi   mustaqil   va   bog’liq
o'zgaruvchilar   o'rtasidagi   munosabatlarni   tavsiflash   uchun   eng   mos   keladigan
chiziqni topishdir. 
2.1.1 Bir o’zgaruvchili chiziqli regressia
Bir   o’zgaruvchili   chiziqli   regressiya   modeli   uchun   tenglamani   quyidagicha   yozish
mumkin:y=	b0+b1∗x
Mashinali   o'qitishda   regressiya   chizig'i   chiziqli   regressiya   modelidagi   kirish
o'zgaruvchilari   (shuningdek,   bashorat   qiluvchilar   yoki   xususiyatlar   sifatida   ham
tanilgan)   va   chiqish   o'zgaruvchisi   (javob   o'zgaruvchisi   sifatida   ham   tanilgan)
o'rtasidagi munosabatlarning ikki turini ko'rsatishi mumkin.Ijobiy munosabat: kirish
o'zgaruvchilari   va   chiqish   o'zgaruvchisi   o'rtasida   regressiya   chizig'ining   qiyaligi
ijobiy   bo'lganda   ijobiy   munosabat   mavjud.   Boshqacha   qilib   aytadigan   bo'lsak,
kiritilgan   o'zgaruvchilarning   qiymatlari   ortishi   bilan   chiqish   o'zgaruvchisining
qiymati   ham   ortadi.   Bu   ma'lumotlarning   tarqalish   grafigida   yuqoriga   qarab   nishab
sifatida ko'rish mumkin.
Rasm 13. Pozitiv chiziqli regressiya
Teskari   munosabat:   regressiya   chizig'ining   qiyaligi   manfiy   bo'lsa,   kirish
o'zgaruvchilari   va   chiqish   o'zgaruvchilari   o'rtasida   salbiy   munosabat   mavjud.
Boshqacha   qilib   aytadigan   bo'lsak,   kirish   o'zgaruvchilari   qiymatlari   ortishi   bilan
23 chiqish   o'zgaruvchisining   qiymati   kamayadi.   Buni   ma'lumotlarning   tarqalish
grafigida pastga qarab nishab sifatida ko'rish mumkin.
Rasm 14. Negativ chiziqli regressiya
Eng yaxshi mos keladigan chiziqni toppish. Mashinani o'rganishda eng mos chiziqni
topish chiziqli regressiyada hal qiluvchi ahamiyatga ega, chunki u model tomonidan
qilingan   bashoratlarning   to'g'riligini   aniqlaydi.   Eng   mos   keladigan   chiziq   prognoz
qilingan   qiymatlar   va   haqiqiy   qiymatlar   o'rtasidagi   eng   kichik   farqga   ega   bo'lgan
chiziqdir.
Chiziqli   regressiya   modelida   eng   mos   chiziqni   topish   uchun   biz   “oddiy   eng
kichik kvadratlar regressiyasi” deb ataladigan jarayondan foydalanamiz. Bu jarayon
har   bir   ma'lumot   nuqtasi   uchun   bashorat   qilingan   qiymatlar   va   haqiqiy   qiymatlar
o'rtasidagi   kvadratik   farqlar   yig'indisini   hisoblashni   va   keyin   kvadrat   xatolar
yig'indisini minimallashtiradigan chiziqni topishni o'z ichiga oladi.
Rasm 15. Chiziqli regressiya koeffisentlarini topishning geometrik ifodasi  
24 Eng   mos   keladigan   chiziq   kvadratlarning   qoldiq   yig'indisini   (RSS)
minimallashtirish   orqali   topiladi,   bu   bashorat   qilingan   qiymatlar   va   haqiqiy
qiymatlar   o'rtasidagi   kvadratik   farqlarning   yig'indisi.   Bunga   mos   ravishda   c   va   m
deb   ham   ataladigan   kesishma   va   qiyalik   koeffitsientlarining   qiymatlarini
moslashtirish   orqali   erishiladi   c   va   m   qiymatlari   aniqlangandan   so'ng,   yangi
ma'lumotlar nuqtalari uchun bashorat qilish uchun chiziqli regressiya tenglamasidan
foydalanishimiz   mumkin.   Oddiy   chiziqli   regressiya   modeli   uchun   tenglamani
quyidagicha yozish mumkin
y = c + m ∗ x
Bu   erda  y   -   bog'liq   o'zgaruvchi   (biz   bashorat   qilmoqchi   bo'lgan   o'zgaruvchi),   x   -
mustaqil   o'zgaruvchi   (bashoratchi   yoki   xususiyat),   c   -   kesishma   termini   (x   nolga
teng   bo'lgan   y   qiymati),   m   -   nishab.   koeffitsient   (x   ning   birlik   o'zgarishi   uchun   y
ning   o'zgarishi).   Ko'p   chiziqli   regressiyada   tenglama   ko'proq   mustaqil
o'zgaruvchilarga   ega   bo'ladi   va   har   bir   o'zgaruvchi   uchun   nishab   koeffitsientlari
tenglamaga kiritiladi.
Umuman   olganda,   chiziqli   regressiya   modelida   eng   mos   chiziqni   topish   aniq
bashorat qilish uchun juda muhimdir va oddiy eng kichik kvadratlar regressiya usuli
yordamida kvadratlarning qoldiq yig'indisini minimallashtirish orqali erishiladi.
Narx funksiyasi
Xarajat   funktsiyasi,   shuningdek,   yo'qotish   funktsiyasi   yoki   maqsad
funktsiyasi   sifatida   ham   tanilgan,   model   qanchalik   yaxshi   ishlashini   o'lchovidir.
Chiziqli   regressiyada   xarajat   funktsiyasi   bashorat   qilingan   qiymatlar   va   qoldiqlar
yoki xatolar deb ham ataladigan haqiqiy qiymatlar o'rtasidagi farqni hisoblash uchun
ishlatiladi.
Chiziqli   regressiyaning   maqsadi   xarajat   funktsiyasini   minimallashtirishdan
iborat   bo'lib,   unga   bashorat   qilingan   qiymatlar   va   haqiqiy   qiymatlar   o'rtasidagi
kvadratik   farqlar   yig'indisini   minimallashtiradigan   eng   mos   keladigan   chiziqni
topish   orqali   erishiladi.   Chiziqli   regressiyada   eng   ko'p   ishlatiladigan   xarajat
funktsiyasi   o'rtacha   kvadrat   xato   (MSE)   bo'lib,   u   taxmin   qilingan   va   haqiqiy
qiymatlar o'rtasidagi kvadratik farqlarning o'rtacha qiymati sifatida hisoblanadi:
25 MSE = 1
n ∑
i = 1n
( y
i −^ y
i ) 2
Bu erda n - ma'lumotlar nuqtalari soni,  yi
 - haqiqiy qiymat va  ŷi  - bashorat qilingan
qiymat.   Modelning   maqsadi  	
MSE   ni   minimallashtiradigan   kesishma   va   qiyalik
koeffitsientlari,  
b0   va  
b1   qiymatlarini topishdir. Bu odatda optimallashtirish algoritmi
yordamida   amalga   oshiriladi,   masalan,   gradient   tushishi,   bu   xarajat   funktsiyasini
minimallashtirish   uchun   koeffitsientlarning   qiymatlarini   iterativ   ravishda
moslashtiradi.Chiziqli   regressiyada   ishlatilishi   mumkin   bo'lgan   boshqa   xarajat
funktsiyalari   orasida   o'rtacha   mutlaq   xato   (MAE),   ildiz   o'rtacha   kvadrat   xatosi
(RMSE)   va   Huber   yo'qolishi   kiradi,   ularning   har   biri   o'zining   afzalliklari   va
kamchiliklariga   ega.   Xarajat   funktsiyasini   tanlash   muayyan   muammo   va   model
talablariga bog'liq.
2.1.2. Ko’p o’zgaruvchili chiziqli regressia
Ko'p o’zgaruvchili chiziqli regressiyada bir nechta mustaqil o'zgaruvchilar va
bitta   bog'liq   o'zgaruvchilar   mavjud.   Ko'p   o’zgaruvchili   chiziqli   regressiyaning
maqsadi mustaqil o'zgaruvchilar va qaram o'zgaruvchilar o'rtasidagi munosabatlarni
tavsiflash   uchun   eng   mos   keladigan   “chiziqni”   topishdir.   Ko'p   chiziqli   regressiya
modeli uchun tenglamani quyidagicha yozish mumkin
y = b
o + b
1 ∗ x
1 + b
2 ∗ x
2 + ... b
n ∗ x
n
Bu erda  y
 - bog'liq o'zgaruvchi,  x
1 ,  x
2 , …,  x
n  - mustaqil o'zgaruvchilar, 	
bo - kesishish
a'zosi va 	
b1 , 	b2 , …, 	bn - qiyalik koeffitsientlari.
26 Rasm 16. Ko’p (ikki) o’zgaruvchili chiziqli regressia
Chiziqli regressiyaning ikkala turida ham maqsad bashorat qilingan qiymatlar
va   haqiqiy   qiymatlar   orasidagi   farqni   minimallashtiradigan   kesishish   va   qiyalik
koeffitsientlari  uchun eng yaxshi  qiymatlarni  topishdir. Chiziqli  regressiya  moliya,
marketing va sog'liqni saqlash kabi ko'plab real ilovalarda aktsiya bahosi, mijozlar
xatti-harakati   va   bemorning   natijalari   kabi   natijalarni   bashorat   qilish   uchun   keng
qo'llaniladi. Ko’p o’zgaruvchili chiziqli regressiada ham eng yaxshi chiziqni topish
huddi bir o’zgaruvchili chiziqli regressiadagidek amalga oshiriladi
2.2. Gradient tushish usulining chiziqli regressiada qo’llanilishi: maqsad
funksiya
Gradient   tushish   usulining   chiziqli   regressiya   modellarida   maqsad
funksiyasini   minimallashtirish   uchun   ishlatiladigan   optimallashtirish   algoritmi.
Gradient   tushishning   maqsadish   -   bu   koeffitsientlarning   qiymatlarini   iterativ
ravishda   sozlash   orqali   xarajatlar   funktsiyasini   minimallashtiradigan   kesishma   va
qiyalik koeffitsientlari, b0 va b1 qiymatlarini topishdir.Gradient tushishining asosiy
g'oyasi   eng   keskin   pasayish   yo'nalishi   bo'lgan   xarajat   funktsiyasining   gradientini
hisoblash   va   gradientning   teskari   yo'nalishidagi   koeffitsientlar   qiymatlarini
yangilashdir. Qadam hajmi deb ham ataladigan o'rganish tezligi har bir iteratsiyada
qanchalik katta qadam qo'yilganligini aniqlaydi.
y = mx + b
Odatda   o’rtacha   kvadratik   xatolikdan   foydalaniladi,   chunki   boshqa   maqsad
funksiyalarga   nisbatan   bu   funksiyaning   qulaylik   tomoni   shundaki,   birinchidan   bu
funksiya   uzluksiz   differensiallanuvchi   va   qavariq   funksiya   bo’gani   uchun   uning
minimumini topish oson.
27 MSE = 1
n ∑
i = 0n
( y
i − y
i ) 2
Bu   maqsad   funksiyaning   gradientini   nolga   aylantirish   oson   chunki   kvadtatik
funksiya   gradient   chiziqli   tenglamalar   sistemasidan   iborat   bo’ladi.   Bu   funksiyadan
parametrlar bo’yicha hususiy hosilalar olsak quyidagiga ega bo’lamiz
D
m = 1
n ∑
i = 0n
2 ( y
i − ( m x
i + b ) ) ( − x
i )
yoki
D
m = − 2
n ∑
i = 0n
x
i ( y
i − y
i )
Algoritm quyidagicha ishlaydi:
1. b
0  va  b
1  qiymatlarini tasodifiy qiymatlarga boshlang.
2.   b
0   va   b
1   ning joriy qiymatlari yordamida berilgan kirish ma'lumotlari uchun
bashorat qilingan qiymatlarni hisoblang.
3.   Bashorat   qilingan   qiymatlar   va   haqiqiy   qiymatlar   yordamida   xarajat
funktsiyasini hisoblang.
4.   b
0  va  b
1  ga nisbatan xarajat funksiyasining gradientini hisoblang.
5.   b
0   va   b
1   qiymatlarini  gradientning teskari  yo'nalishi  bo'yicha qadam  qo'yish
orqali yangilang, qadam hajmi o'rganish tezligi bilan belgilanadi.
6.   Xarajat   funktsiyasi   minimallashtirilgunga   qadar   yoki   maksimal   takrorlash
soniga erishilgunga qadar 2–5-bosqichlarni takrorlang. 
O'qitish tezligini tanlash gradient tushishida juda muhim, chunki juda katta o'rganish
tezligi algoritmning minimaldan oshib ketishiga olib kelishi mumkin va juda kichik
o'rganish   tezligi   algoritmning   sekin   birlashishiga   olib   kelishi   mumkin.   Gradient
tushishining   turli   xil   variantlari   mavjud,   jumladan,   partiya   gradienti   tushishi,
stokastik   gradient   tushishi   va   mini-partiyali   gradient   tushishi,   ularning   har   biri
o‘zining   afzalliklari   va   kamchiliklariga   ega.   Gradient   tushish   algoritmini   tanlash
aniq muammoga va model talablariga bog'liq.
Chiziqli   regressiyadagi   modelning   ishlashi   modelning   ma'lumotlarga
qanchalik   mos   kelishini   va   yangi   ma'lumotlarga   qanchalik   yaxshi
28 umumlashtirilishini   o'lchaydigan   turli   ko'rsatkichlar   yordamida   baholanishi
mumkin. Lineer regressiyada ishlatiladigan ba'zi umumiy ko'rsatkichlar:
Misol :   Faraz   qilaylik,   bizda   uyning   kattaligiga   qarab   uy-joy   narxini   bashorat
qiluvchi   chiziqli   regressiya   modeli   mavjud.   Bizda   quyidagi   haqiqiy   narxlar   (y)   va
bashorat qilingan narxlar (y_hat) bo'lgan 10 ta ma'lumot nuqtasi mavjud:
y = [100, 150, 200, 250, 300, 350, 400, 450, 500, 550]
y_hat = [110, 140, 180, 240, 290, 320, 380, 420, 480, 520]
y_mean = yig'indi (y) / len (y) = 325
Kvadratlar regressiyasi yig'indisi (SSR): SSR prognoz qilingan qiymatlar va qaram
o'zgaruvchining o'rtacha qiymati o'rtasidagi kvadratik farqlar yig'indisini olish yo'li
bilan   hisoblanadi.   U   mustaqil   o'zgaruvchilar   bilan   izohlanadigan   qaram
o'zgaruvchidagi   o'zgaruvchanlikni   ifodalaydi.   Matematik   jihatdan   uni   quyidagicha
ifodalash mumkin:
SSR = summa ((y_hat — y_mean)²) = 28300
Kvadratlar   yig'indisi   xatosi   (SSE):   SSE   prognoz   qilingan   qiymatlar   va   qaram
o'zgaruvchining   haqiqiy   qiymatlari   o'rtasidagi   kvadratik   farqlar   yig'indisini   olish
yo'li bilan hisoblanadi. Matematik jihatdan uni quyidagicha ifodalash mumkin:
SSE = summa((y — y_hat)²) = 26700
 O'rtacha kvadrat xato (MSE): Bu ko'rsatkich bashorat qilingan va haqiqiy qiymatlar
o'rtasidagi   o'rtacha   kvadrat   farqni   o'lchaydi.   U   ma'lumotlar   nuqtalari   soniga
bo'lingan   kvadrat   qoldiqlar   yig'indisi   sifatida   hisoblanadi.   Pastroq   MSE   yaxshi
ishlashni ko'rsatadi. Matematik jihatdan uni quyidagicha ifodalash mumkin:
MSE = (1/n) * summa((y — y_hat)²) = 2670
Root   Mean   Squared   Error   (RMSE):   Bu   ko'rsatkich   MSE   ning   kvadrat   ildizini
o'lchaydi   va bog'liq  o'zgaruvchi   bilan bir  xil   birliklardagi  xatolarni  izohlash  uchun
foydalidir. Matematik jihatdan uni quyidagicha ifodalash mumkin:
RMSE = sqrt(MSE) = sqrt(2670) = 51,68
O'rtacha mutlaq xato (MAE): Bu ko'rsatkich bashorat qilingan va haqiqiy qiymatlar
o'rtasidagi   o'rtacha   mutlaq   farqni   o'lchaydi.   U   MSE   ga   qaraganda   chetga
29 chiqqanlarga   nisbatan   kamroq   sezgir,   ammo   baribir   modelning   aniqligi   o'lchovini
ta'minlaydi. Matematik jihatdan uni quyidagicha ifodalash mumkin
MAE = (1/n) * summa(abs(y — y_hat)) = 36
2.3 Chiziqli regressia modeli yordamida uy-joy narxlarini o’rganish
Ma’lumot   yig’ish   va   qayta   ishlash .   Biz   uy-joy   narxlarini   o’rganishda   ma’lumotlar
yig’ish  uy joy agentliklari  yordamida amalga oshirilgan.Bular  Samarqand uylar  va
Samarqand uy bozori agentliklari.
Jadval 1 .  Uy-joyga tegishli ma’lumotlarning dastlabki to’plami
Yuqoridagi jadvalda quyidagi xususiyatlar tanlab olingan:
 Maydoni - bu uyning uyning maydoni anglatadi va m 2
   birlikda ma’lumotlar
to’plangan; 
30  Xonalar_soni – bu xususiyat xonalarsonini bildiradi. birligi ( ta );
 Etaji – bu xususiyat ordinal xususiyat bo’lib bu binoning joylashgan qavatini
anglatadi;
 Xolati   -   bu   xususiyantning   tipi   (qualitative)   sifat   tipida   bo’lib,   u   uyning
tamirlanganlik   darajasini   anglatadi   va   uch   hil   darajaga   bo’linadi:   yaxshi,
o’rtacha, yomon;
 Joylashuv   –   bu   xususiyat   qaralayotgan   uy-joyning   joylashgan   manzilini
anglatadi (Samarqand shahri bo’yicha);
 Sotilgan_yili – uyning sotilgan yilini anglatadi;
 Narxi   –   Uy-joyning   sotilgan   narxini   anglatadi,   ma’lumotlar   AQSH   dollari
birligida keltirilgan. 
Yuqorida   to’plangan   mo’lumotlarga   ko’p   o’zgaruvchili   chiziqli
regressia   algoritmini   qo’llab   yangi   uy   joylarning   narxini   bashorat   qilish
modeli   ishlab   chiqilgan.   Bu   modelni   qurishda   Python   dasturlash   tilidagi,
Pandas,   Scikit-learn,   NumPy,   MatplotLib   kutubxonalari   va   Google   Colab
muhitidan foydalanilgan.
 Ma’lumotlarga ishlov betish:
31 Bu qadamda sifat tipidagi o’zgaruvchilar sonli o’zgaruvchilarga almashtirildi,
Xolati   nomli   xususiyatdagi   yaxshi,   o’rtacha,   yomon   qiymatlar   2,   1,   0
qiymatlarga mos ravishda almashtirildi.
Joylashuvdagi   qiymatlar   ikkita   xususiyatga   bo’linib   kenglik   va   uzunlik
qiymatlarga mos qo’yildi.
 
Bu qadamda ma’lumotlarning tiplari va null qiymatlar bor yo’qligi 
tekshirilgan.
32 Bu qadamda mustaqil o’zgaruvchilar ajratib olingan
Bog’liq o’zgaruvchi aniqlash.
33 Bu   qadamda   ma’lumotlar,   o’qitish   va   test   to’plamlarga   ajratilgan,   regressia
modeli tanlangan va ozod had hamda model koeffisentlari aniqlangan.
O’qitish to’plamidagi ma’lumotlarning 2D ko’rinishi
34 Model aniqligi R2 va MSE metrikalar yordamida aniqlangan.
2.4 Chiziqli regressiya modeli uchun dastur
Ushbu   paragrafda   chiziqli   regressiya   mogeli   uchun  ishlab   chiqilgan   dasturiy
vosita  haqida qisqacha ma’lumot keltirilgan.
Rasm 17. Ilovaning interfeysi
Ilova yordamida regression masalani yechish uchun bizga tayyor ma’lumotlar
to’plami kerak bo’ladi va bu ma’lumotlar .csv kengaytmali faylda bo’lishi kerak. 
35 Rasm 18. Fayl tanlangan holat
Fayl   tanlangandan   keyin   dastur   orqali   dastlab   xususiyatlar   orasidagi
korrelatsiya koeffisentlari aniqlanadi
Rasm 19. Yangi ma’lumot kiritilgan holat
Chiziqli   regressiya   bo’yicha   bashorat   qilish   uchun   yangi   ma’lumot
kiritilganda bashorat natijasi chiqarilad.
36 Adabyotlar ro’yxati
1. Seber, G. A. F., & Lee, A. J. (2012).  Linear Regression Analysis  (2nd ed.). Wiley. ISBN: 
978-1-118-28342-5.
2. Draper, N. R., & Smith, H. (1998).  Applied Regression Analysis  (3rd ed.). Wiley. ISBN: 
978-0-471-17082-2.
3. Montgomery, D. C., Peck, E. A., & Vining, G. G. (2012).  Introduction to Linear 
Regression Analysis  (5th ed.). Wiley. ISBN: 978-1-118-38500-5.
4. Hastie, T., Tibshirani, R., & Friedman, J. (2009).  The Elements of Statistical Learning: 
Data Mining, Inference, and Prediction  (2nd ed.). Springer. ISBN: 978-0-387-84858-7.
5. Kutner, M. H., Nachtsheim, C. J., & Neter, J. (2004).  Applied Linear Regression Models  
(4th ed.). McGraw-Hill/Irwin. ISBN: 978-0-07-301344-2.
6. Weisberg, S. (2013).  Applied Linear Regression  (4th ed.). Wiley. ISBN: 978-1-118-38608-
8.
7. Ruder, S. (2017). An Overview of Gradient Descent Optimization Algorithms.  arXiv 
preprint arXiv:1609.04747 .
8.  Bottou, L. (1998). Online Learning and Stochastic Approximations. In D. Saad (Ed.),  On-
line Learning in Neural Networks  (pp. 9-42). Cambridge University Press.
9. Robbins, H., & Monro, S. (1951). A Stochastic Approximation Method.  The Annals of 
Mathematical Statistics, 22 (3), 400-407. doi:10.1214/aoms/1177729586.
10. Kingma, D. P., & Ba, J. (2015). Adam: A Method for Stochastic Optimization. 
International Conference on Learning Representations (ICLR) . Published online. 
Retrieved from  https://arxiv.org/abs/1412.6980 .
11. Boyd, S., & Vandenberghe, L. (2004).  Convex Optimization . Cambridge University Press.
ISBN: 978-0-521-83378-3.
12. Nesterov,   Y.   (1983).   A   Method   of   Solving   a   Convex   Programming   Problem   with
Convergence Rate O(1/k^2).  Soviet Mathematics Doklady, 27 (2), 372-376.
37 Ilovalar
import tkinter as tk
from tkinter import scrolledtext
from time import sleep, time
import threading
import sympy as sp
from math import sqrt
from copy import deepcopy
class NotSolvedException(Exception):
    pass
class WrongParametr(Exception):
    pass
class StopLoopException(Exception):
    pass
def get_gradient(func: str) -> tuple[list[str], int]:
    """ Funksiya gradientini aniqlaydigan funksiya.
    Bunda o'zgaruvchilar x1,x2,x3,x4,x5 ... x100 ko'rinishida bo'lishi shart 
    (ya'ni a,b,c va hokazolar qabul qilinmaydi). 
    Ushbu funksiya grafikda faqat qozon shaklini hosil qilgandagina ishlaydi.
    """
    def _(s: str) -> str:
        return s.replace(' ', '').replace('\n', '').replace('\t', '')
    vars = []
38     var_count = 0
    for i in range(1, 101):
        if f'x{i}' in func:
            vars.append(f'x{i}')
            var_count = 0 + i
    vars = ','.join([f'x{i}' for i in range(1, var_count + 1)])
    if var_count == 1:
        var_list = [sp.symbols(vars)]
    else:
        var_list = list(sp.symbols(vars))
    
    new_func = func + ""
    for i in range(var_list.__len__()):
        new_func = new_func.replace(f'x{var_list.__len__() - i}', '1')
    try:
        eval(new_func)
    except Exception:
        raise WrongParametr("Funksiyada ortiqcha belgilar mavjud.\nFaqat quyidagi 
o'zgaruvchilarni ishlating: x1,x2,x3,x4 ...")
    gradient = [str(sp.diff(func, var)) for var in var_list]
    is_access = False
    for i in range(var_count):
        grad_two = str(sp.diff(gradient[i], var_list[i]))
        if _(grad_two) != '0':
            is_access = is_access or True
        
        grad_three = str(sp.diff(grad_two, var_list[i]))
        if _(grad_three) != '0':
            raise WrongParametr("Funksiya talabga javob bermaydi")
    if not is_access:
        raise WrongParametr("Funksiya talabga javob bermaydi")
    return gradient, var_count
def norm(vc: list[float]):
    """ vektorning normasini hisoblaydi """
    return sqrt(sum(list(map(lambda x: x*x, vc))))
def solve_with_gradient(gradient: list[str], values: list[float]):
    """ gradient va vektorni birgalikda hisoblaydi """
    def _(func: str, _values: list[float]):
        for i in range(len(_values)):
            func = func.replace(f'x{i+1}', str(_values[i]))
        try:
            return eval(func)
        except:
            raise NotSolvedException
    if len(gradient) != len(values):
        raise WrongParametr("Gradient va qiymatlar vektori o'lchovi mos emas")
    return list(map(lambda x: _(x, values), gradient))
def subtract_two_vc(vc1: list[float], vc2: list[float]):
39     if len(vc1) != len(vc2):
        raise WrongParametr("vc1 va vc2 o'lchamlari mos emas")
    return list(map(lambda i: vc1[i]-vc2[i], range(vc2.__len__())))
def multiple_vc_and_num(vc: list[float], num: float):
    return list(map(lambda x: x*num, vc))
def f_solve(func: str, values: list[float]):
    for i in range(len(values)):
        func = func.replace(f'x{i+1}', str(values[i]))
    return eval(func)
class GetCoordinateZero:
    def __init__(self) -> None:
        self.stop_flag = False
    def get_coordinate_zero(self, func: str, *, eps: float = None, 
            x0: list[float] = None, t: float = None):
        """ Matematik funksiyaning boshlang'ich qiymatini aniqlaydigan funksiya """
        eps = eps or 0.01
        t = t or 0.5
        gradient, var_count = get_gradient(func)
        x0 = x0 or [1] * var_count
        xk: list[float] = deepcopy(x0)
        if t == 1.0:
            raise WrongParametr("t`ning qiymati 1.0 bo'lishi mumkin emas")
        
        counter = 0
        last_grad_norm = 0
        last_grad_norm_counter = 0
        while True:
            counter += 1
            if self.stop_flag:
                raise StopLoopException
            grad_vc_solve = solve_with_gradient(gradient, xk)
            norm_dvs = norm(grad_vc_solve)
            if norm_dvs < eps:
                return xk, counter
            xk_p_1: list[float] = subtract_two_vc(xk, multiple_vc_and_num(grad_vc_solve, t))
            xk = deepcopy(xk_p_1)
            if last_grad_norm <= norm_dvs:
                last_grad_norm_counter += 1
            if last_grad_norm_counter == 20:
                raise NotSolvedException
            last_grad_norm = deepcopy(norm_dvs)
class GUI:
    def __init__(self) -> None:
        self.window = tk.Tk(className="Gradient tushish")
        self.window.geometry('800x500+100+100')
40         self.th_func: threading.Thread = None
        self.solve_obj: GetCoordinateZero = GetCoordinateZero()
        self._draw_inputs()
        self._draw_labels()
        self._draw_buttons()
        self.window.bind("<Configure>", self.on_resize)
        self.window.protocol("WM_DELETE_WINDOW", self.close_window_protocol)
        self.window.mainloop()
    def on_resize(self, event: tk.Event):
        self._func_input.configure(width=event.width - 20)
    def _draw_inputs(self):
        self._func_input = tk.Entry(self.window, font=('Arial 12'), )
        self._func_input.pack(fill=tk.X, padx=10, pady=10)
        self._t_input = tk.Entry(self.window, font=('Arial 12'))
        self._t_input.place(x=10, y=80, width=380)
        self._t_input.insert(0, "0.1")
        self._eps_input = tk.Entry(self.window, font=('Arial 12'))
        self._eps_input.place(x=410, y=80, width=380)
        self._eps_input.insert(0, "0.01")
    def _draw_buttons(self):
        self._solve_btn = tk.Button(self.window, text="Hisoblash", font=("Arial 13"), 
command=self.solve)
        self._solve_btn.place(x=10, y=140,width=780, height=30)
    def solve(self):
        if self.th_func is not None:
            self.solve_obj.stop_flag = True
            sleep(0.1)
            self.solve_obj.stop_flag = False
        self.set_text("Iltimos kuting. Hisoblanmoqda ...")
        self.th_func = threading.Thread(target=self.force_thread_func)
        self.th_func.start()
    def close_window_protocol(self):
        self.solve_obj.stop_flag = True
        self.window.destroy()
    def _draw_labels(self):
        self._func_label = tk.Label(self.window, text="Funksiyani kiriting", font=('Arial 10'))
        self._func_label.place(x=10, y=35)
        self._t_label = tk.Label(self.window, text="t`ni kiriting", font=('Arial 10'))
        self._t_label.place(x=10, y=105)
41         self._eps_label = tk.Label(self.window, text="Aniqlik koeffitsentini kiriting",font=('Arial 
10'))
        self._eps_label.place(x=410, y=105)
        self._solve_label = scrolledtext.ScrolledText(self.window, wrap=tk.WORD, font=('Arial 12'),
bd=0, highlightthickness=0)
        self._solve_label.place(x=10, y=180, width=780, height=200)
        self._solve_label.config(state=tk.DISABLED)
    def set_text(self, txt: str):
        self._solve_label.config(state=tk.NORMAL)
        self._solve_label.delete('1.0', tk.END)
        self._solve_label.insert(tk.INSERT, txt)
        self._solve_label.config(state=tk.DISABLED)
    def force_thread_func(self):
        func = self._func_input.get()
        t = self._t_input.get()
        eps = self._eps_input.get()
        func = func.replace('^', '**')
        if func.replace(' ', '').__len__() == 0:
            self.set_text("Funksiyani kiriting !")
            return
        try:
            t = float(t)
        except:
            self.set_text(f"t`ning qiymati haqiqiy son bo'lishi kerak !")
            return
        try:
            eps = float(eps)
        except:
            self.set_text("Aniqlik koeffitsenti haqiqiy son bo'lishi kerak!")
            return
        
        try:
            start = time()
            points, counter = self.solve_obj.get_coordinate_zero(func, t=t,eps=eps)
            finish = time()
        except NotSolvedException:
            self.set_text("Yechimni aniqlab bo'lmadi. \nIltimos parametrlarni qayta ko'rib chiqing.")
            return
        except WrongParametr as wp:
            self.set_text(str(wp.args[0]))
            return
        except StopLoopException:
            self.set_text("To'xtatildi")
            return 
        except Exception as ex:
            self.set_text(f'Nomalum xatolik yuz berdi: {ex}')
            return
        txt = ""
        f_zero = "" + func
42         for i in range(len(points)):
            txt += f'x{i+1} = {points[i]:.12f}\n'
        
            f_zero = f_zero.replace(f'x{len(points) - i}', f'({points[len(points) - i - 1]})')
        
        txt += f'F = {eval(f_zero):.12f}\n'
        txt += f"\n\nIteratsiyalar soni: {counter}\nHisoblash vaqti: {(finish-start):.5f} sekund."
        self.set_text(txt)
if __name__ == '__main__':
     GUI()
import tkinter as tk
import os
from tkinter import filedialog, messagebox
import pandas as pd
from math import fabs
from sklearn import linear_model
import warnings
"""
Ushbu kod ishlashi uchun bir nechta paketlar kerak bo'ladi. 
Ularni yuklab olish uchun terminalga ushbu kodlarni yozasiz
Windows uchun:
    pip install pandas
    pip install scikit-learn
Ubuntu yoki Linux uchun:
    sudo apt install python3-tk
    pip install pandas
    pip install scikit-learn
"""
def get_solve_in_csv(csv_file_path: str, result_key: str, target_values: list[float]):
    """ .csv fayldan ma'lumotni o'qib oladi va ushbu modelga yarasha model tayyorlaydi.
        * csv_file_path: str - bu fayl manzili 
        * result_key: str - bu fayldagi asosiy kelib chiqishi kerak bo'lgan qiymat
        * target_values: list[str] - bu bashorat qilinishi kerak bo'lgan ma'lumot
43         Qaytish: dict[Any]
        * koeffitsentlar
        * korrelyatsiya koefftisenti
        * bashorat qiymati
    """
    data = pd.read_csv(csv_file_path)
    data = data.fillna(0)
    X = data.drop(result_key, axis=1)  
    y = data[result_key]               
    model = linear_model.LinearRegression()
    model.fit(X, y)
    r_squared = model.score(X, y)
    returned_dict = {}
    returned_dict['coef'] = model.coef_
    returned_dict['free'] = model.intercept_
    returned_dict['r'] = r_squared
    returned_dict['target_result'] = model.predict([target_values])[0]
    return returned_dict
class CustomInput:
    def __init__(self,window: tk.Tk, width: int, height: int, position_x: int, position_y: int, *args, 
**kwargs):
        self.input = tk.Entry(window, font=('Arial 10'), *args, **kwargs)
        self.input.place(height=height, width=width, x=position_x, y=position_y)
    
    def get_text(self):
        return self.input.get()
    
    def set_text(self, text: str):
        self.input.delete(0, tk.END)
        self.input.insert(0, text)
    
    def delete(self):
        self.input.destroy()
class CustomButton:
    def __init__(self, window: tk.Tk, text: str, width: int, height: int, position_x: int, position_y: int,
*args, **kwargs):
        self.button = tk.Button(window, text=text, *args, **kwargs)
        self.button.place(height=height, width=width, x=position_x, y=position_y)
    
    def delete(self):
        self.button.destroy()
class GUI:
    def __init__(self, *args, **_) -> None:
        self.filename: str = None
        self.data: pd.DataFrame = None
        self.columns: list[str] = None
        self.value_inside = None
44         self.window = tk.Tk(className=_['window_name'])
        self.window.geometry(f'{_["screen_width"]}x{_["screen_height"]}')
        self.window.configure(bg='#e6e6ff')
        self.keys_info: list[tk.Widget] = []
        self.value_inputs: list[CustomInput] = []
        self.coeffitsents: list[tk.Label] = []
        self.buttons_draw()
        self.labels_draw()
        self.inputs_draw()
        self.others_draw()
        self.window.mainloop()
    def buttons_draw(self):
        """ Barcha boshlang'ich buttonlar shu yerda chiziladi """
        self.button_open_file_dialog = CustomButton(self.window, text='CSV faylni tanlang', 
font=('Arial 10'), width=440, height=30, position_x=10, position_y=0, command=self.select_file)
        self.button_solve = CustomButton(self.window, text='Hisoblash', font=('Arial 10'), 
width=440, height=30, position_x=550, position_y=260, command=self.solve_action)
        self.button_clear = CustomButton(self.window, text='Tozalash', font=('Arial 10'), width=440,
height=30, position_x=550, position_y=290, command=self.clear_action)
    def clear_action(self):
        """ Tozalash tugmasi bosilganda shu funksiya ishlaydi """
        if self.filename:
            self.draw_target_inputs(self.value_inside.get())
            for i in self.value_inputs:
                i.set_text('')
        self.r_input.set_text('0.5')
        self.show_target_res.config(text="Umumiy natija: Mavjud emas")
    def solve_action(self):
        """ Hisoblash tugmasi bosilganda shu funksiya ishlaydi """
        if not self.filename:
            self.error_view("Fayl tanlanmagan", "Iltimos avval kerakli faylni tanlang !")
            return
        
        absolute_error = self.r_input.get_text()
        if not absolute_error:
            self.error_view("Ma'lumot to'liq emas", "Iltimos korrelyatsiya koeffitsientini kiriting")
            return 
        try:
            absolute_error = float(absolute_error)
        except:
            self.error_view("String konvertatsiya xatoligi", "Korrelyatsiya koeffitsienti son bo'lishi 
kerak")            
            return
        
        if fabs(absolute_error) > 1.0:
            self.error_view("Noto'g'ri qiymat", "Korrelyatsiya koeffitsienti moduli 1 dan kichik 
bo'lishi shart")
45             return
        
        target_values: list[float] = []
        for i in range(len(self.value_inputs)):
            text = self.value_inputs[i].get_text()
            if not text:
                self.error_view("Ma'lumotlar to'liq emas", f"Iltimos `{self.keys_info[i]['text']}`ning 
qiymatini kiriting")
                return 
            try:
                target_values.append(float(text))
            except:
                self.error_view("String konvertatsiya xatoligi", f"`{self.keys_info[i]['text']}` maydoniga 
son kiriting!")
                return 
        
        res = get_solve_in_csv(self.filename, self.value_inside.get(), target_values)
        if res['r'] < absolute_error:
            self.error_view("Natijalar yaxshi emas!", "Modeldagi korrelyatsiya koeffitsenti talabga 
javob bermaydi")
            return
        self.show_target_res.config(text="Umumiy natija: " + str(res['target_result']))
    def inputs_draw(self):
        """ Boshlang'ich inputlar shu yerda chiziladi """
        self.r_input = CustomInput(self.window, 440, 30, 10, 290)
        self.r_input.set_text(0.5)
    
    def labels_draw(self):
        """ Boshlang'ich labellar shu yerda chiziladi """
        self.file_name_info = tk.Label(self.window, text='Fayl: Tanlanmagan', font=('Arial 10'), 
relief=tk.FLAT)
        self.file_name_info.place(x=10, y=40, width=440, height=30)
        self.file_cols_info = tk.Label(self.window, text='Ustunlar: Tanlanmagan', font=('Arial 10'), 
relief=tk.FLAT)
        self.file_cols_info.place(x=10, y=70, width=440, height=30)
        self.file_rows_info = tk.Label(self.window, text='Ma\'lumotlar hajmi: Tanlanmagan',  
font=('Arial 10'), relief=tk.FLAT)
        self.file_rows_info.place(x=10, y=100, width=440, height=30)
        self.key_select_info = tk.Label(self.window, text='Asosiy qiymat kalitini tanlang', 
font=('Arial 10'), relief=tk.FLAT)
        self.key_select_info.place(y=0, x=550, width=440, height=30)
        tk.Label(self.window, text='Nomlar:', font=('Arial 10'), relief=tk.RIDGE).place(y=150, x=10,
width=80, height=30)
        tk.Label(self.window, text='Qiymatlar:', font=('Arial 10'), relief=tk.RIDGE).place(y=180, 
x=10, width=80, height=30)
        tk.Label(self.window, text='Koeffitsentlar:', font=('Arial 9'), relief=tk.RIDGE).place(y=210, 
x=10, width=80, height=30)
46         tk.Label(self.window, text='Minimal korrelyatsiya koeffitsientini kiriting', font=('Arial 10'), 
relief=tk.FLAT).place(y=260, x=10, width=440, height=30)
        self.show_r = tk.Label(self.window, text="Korrelyatsiya koeffitsienti: Fayl tanlanmagan", 
relief=tk.FLAT, font=('Arial 10'))
        self.show_r.place(y=330, x=10, width=440, height=30)
        self.show_target_res = tk.Label(self.window, text="Umumiy natija: Mavjud emas", 
relief=tk.FLAT, font=('Arial 10'))
        self.show_target_res.place(y=360, x=10, width=440, height=30)
        self.show_free_coef = tk.Label(self.window, text="Ozod koeffitsent: Fayl tanlanmagan", 
relief=tk.FLAT, font=('Arial 10'))
        self.show_free_coef.place(y=390, x=10, width=440, height=30)
    def others_draw(self):
        """ OptionMenu shu yerda chiziladi """
        self.value_inside = tk.StringVar(self.window)
        self.value_inside.set("Fayl tanlanmagan")
        self.select_main_key = tk.OptionMenu(self.window, self.value_inside, value='')
        self.select_main_key.place(y=40, x=550, width=440, height=30)
        self.select_main_key.config(state=tk.DISABLED, relief=tk.GROOVE)
    def select_file(self):
        """ Open File Dialog ochilishida ishlaydihgan funksiya """
        filename = filedialog.askopenfilename(initialdir=os.getcwd(), title="CSV faylni tanlang", 
filetypes=(('CSV fayllar', '*csv'),))
        if not (not filename or filename == ()):
            self.filename = filename
            data = pd.read_csv(self.filename)
            self.columns = data.columns
            self.file_name_info.config(text='Fayl: ' + self.filename.split('/')[-1])
            self.file_cols_info.config(text='Ustunlar: ' + ','.join(self.columns))
            self.file_rows_info.config(text='Ma\'lumotlar hajmi: ' + str(len(data)))
            self.select_main_key.destroy()
            self.value_inside = tk.StringVar(self.window)
            self.value_inside.set(self.columns[-1])
            self.select_main_key = tk.OptionMenu(self.window, self.value_inside, *self.columns, 
command=self.select_func)
            self.select_main_key.place(y=40, x=550, width=440, height=30)
            self.select_main_key.config(relief=tk.GROOVE)
            self.show_target_res.config(text="Umumiy natija: Mavjud emas")
            self.draw_target_inputs(self.value_inside.get())
    def select_func(self, *args, **kwarg):
47         """ OptionMenu qayta tanlangan vaqtda shu funksiya ishlaydi """
        self.draw_target_inputs(self.value_inside.get())
    def draw_target_inputs(self, ignore: str):
        """ Yangilanish vaqtida inputlarni qayta chizadigan funksiya """
        for i in range(len(self.keys_info)):
            self.keys_info[i].destroy()
            self.value_inputs[i].delete()
            self.coeffitsents[i].destroy()
        self.value_inputs.clear()
        self.keys_info.clear()
        self.coeffitsents.clear()
        res = get_solve_in_csv(self.filename, self.value_inside.get(), list(map(float, 
'0'*(len(self.columns)-1))))
        counter = 0
        for i in range(len(self.columns)):
            if self.columns[i] == ignore:
                continue
            label = tk.Label(self.window, text=self.columns[i], font=('Arial 10'), relief=tk.RIDGE)
            label.place(x=90 + counter*80, y=150, width=80, height=30)
            self.keys_info.append(label)
            self.value_inputs.append(CustomInput(self.window, 80, 30, 90+counter*80, 180))
            label = tk.Label(self.window, text=f"{res['coef'][counter]:.7f}", relief=tk.FLAT, 
font=('Arial 10'))
            label.place(x=90 + counter*80, y=210, width=80, height=30)
            self.coeffitsents.append(label)
            counter += 1
        
        self.show_r.config(text="Korrelyatsiya koeffitsienti: " + str(res['r']))
        self.show_free_coef.config(text="Ozod koeffitsient: " + str(res['free']))
    def error_view(self, error_screen: str, error_text: str):
        """ Xatolik xabarini ekranga chiqaradi """
        messagebox.showerror(error_screen, error_text)
if __name__ == '__main__':
    warnings.filterwarnings('ignore')
    GUI(
        window_name = "Liner prediction problem solver",
         screen_width = 1000,
        screen_height = 450
    )
48

MAVZU: MASHINALI O’QITISHDA GRADIENTLI TUSHISH ALGORITMINI CHIZIQLI REGRESSIYA YORDAMIDA TADQIQ QILISH MUNDARIJA KIRISH 3 BOB I GRADIENT TUSHISH USULIGA MATEMATIK NAZAR 1.1 Gradient tushish usuli: asosiy tushunchalar 7 1.2 Gradient tushish usuli algoritmi, misollar 13 1.3 Gradient tushish usuli uchun dasturiy vosita 19 BOB II CHIZIQLI REGRESSIA MODELIDA GRADIENT TUSHISH USULI 2.1 Mashinali o’qitishda chiziqli regressia 23 2.1.1 Bir o’zgaruvchili chiziqli regressia 24 2.1.2 Ko’p o’zgaruvchili chiziqli regressia 27 2.2 Gradient tushish usulining chiziqli regressiada qo’llanilishi: maqsad funksiya 28 2.3 Chiziqli regressia modeli yordamida uy-joy narxlarini o’rganish 31 2.3.1 Ma’lumot yig’ish va qayta ishlash 32 2.3.2 Ma’lumotlarni o’qitish, model parametrlarini aniqlash 34 2.4 Chiziqli regressiya modeli uchundasturiy vosita 36 Adabiyotlar ro’yxati 38 Ilovalar 39 1

Kirish Masalaning qo‘yilishi. Gradient tushush usuli va uning mashinali o’qitish algoritmlaridan biri bo’lgan chiziqli regressiyada qo’llanilishini o’rganish, bu algoritmlarni amaliy qo’llash uchun uy-joy narxlarini regression tahlil qilish hamda ushbu usul va algoritmlarga asoslangan dasturiy vositalar ishlab chiqish. Mavzuning dolzarbligi. Bugunguni kunda juda ko’plab sohalar (tavsiya tizimlari, tasvirlarni aniqlash, tabiiy tilni qayta ishlash va moliyaviy bashoratlar) dagi turli xil hayotiy masalalarni yechishda ularga oid tarixiy ma’lumotlar, mashinali o’qitish algoritmlari, jumladan chiziqli regressia algoritmi orqali tahlil qilinib, eng yaxshi yechim, tavsiya, bashorat yoki qarorlar qabul qilinmoqda. Chiziqli regressiya algoritmi bu nazoratli o’qitish algoritmi bo’lib, u kirish xususiyatlari va maqsadli o'zgaruvchi o'rtasidagi chiziqli munosabatni aniqlashdan iborat. Chiziqli resgressiya natijalarining aniqligi, chiziqli munosabat koeffisentlarining aniqligiga bo’gliq bo’lib, u odatda gradient tushish usullari orqali aniqlanadi. Shu nuqtai nazardan chiziqli regressiya modelini qurishda gradient tushish usulini tadqiq qilish va bu usulga asoslangan dasturiy vosita ishlab chiqish muhim hisoblanadi. Ishning maqsad va vazifalari. Bitiruv malakaviy ishning asosiy maqsad va vazifasi bu chiziqli regressiya modelini qurish jarayonida gradient tushish usumining o’rnini anglash va bu usulga asoslangan dasturiy vosita ishlab chiqishdan iborat. Ilmiy-tatqiqot usullari. Ushbu bitiruv malakaviy ishida, chiziqli regressiya modelini qurishda gradient tushish usulining qo’llanilishini tadqiq qilish uchun matematik analiz, ehtimollar nazaryasi va matematik statistika, mashinaviy o’qitish hamda python dasturlash tili kurslarining ba’zi tushuncha, usul va yondoshuvlaridan foydalanilgan. Mavzuning o‘rganilish darajasi. 2

Chiziqli regressiya 19-asr oxiri va 20-asr boshlarida Frensis Galton va Karl Pirson ishlariga borib taqaladigan boy tarixga ega. Uning uzoq vaqtdan beri qo'llanilishi va rivojlanishi uni to'liq tushunishga yordam berdi. Chiziqli regressiya modellari mashinali o'qitish va statistikada eng yaxshi o'rganilgan va fundamental usullardan biridir. Ularning keng qamrovli o'rganilishi va qo'llanilishi bir necha omillarga bog'liq: Oddiylik va tushunarlilik: Chiziqli regressiya modellarini tushunish va izohlash oson. Bog'liq va mustaqil o'zgaruvchilar o'rtasidagi bog'liqlik aniq bo'lib, model bashoratlarini tushuntirishni osonlashtiradi. Nazariy asos: Chiziqli regressiya mustahkam nazariy asosga ega. Eng kichik kvadratlarni baholash tamoyillari, chiziqli modelning taxminlari va baholovchilarning xususiyatlari yaxshi tasdiqlangan. Ushbu nazariy asoslash modelning xatti-harakati va cheklovlarini tushunishga yordam beradi. Keng qo'llanilishi: Chiziqli regressiya iqtisodiyot, biologiya, muhandislik va ijtimoiy fanlar kabi turli sohalarda qo'llanilishi mumkin. Uning ko'p qirraliligi uni turli sohalarda qimmatli vositaga aylantiradi. Kengaytmalar va variantlar: Chiziqli regressiya muayyan ehtiyojlarni qondiradigan ko'plab kengaytmalar va variantlarga ega: Bir va ko’p o’zgaruvchili chiziqli regressiya: oddiy chiziqli regressiyani bir nechta bashorat qiluvchilarga kengaytiradi. Ko’pxadli regressiya: Polinom atamalarini kiritish orqali chiziqli bo'lmagan munosabatlarni modellashtiradi. Ridge va Lasso regressiyasi: haddan tashqari moslashishning oldini olish uchun tartibga solishni joriy qiling. Dasturiy ta'minot va asboblarni qo'llab-quvvatlash: 3

Chiziqli regressiya R, Python (scikit-learn, statsmodels), MATLAB va SAS kabi ko'plab dasturiy vositalar va kutubxonalar tomonidan qo'llab-quvvatlanadi. Ushbu vositalar foydalanish uchun qulay dasturlarni taqdim etadi va model yaratish, baholash va diagnostika qilishni osonlashtiradi. Ta'lim maqsadlarida foydalanish: Chiziqli regressiya ko'pincha statistika va mashinali o'qitish kurslarida o'qitiladigan birinchi modellardan biridir. Uning soddaligi uni yanada murakkab modellar va texnikalarni o'rganish uchun ajoyib boshlanish nuqtasiga aylantiradi. Tadqiqotning ilmiy yangiligi. Bitiruv malakaviy ishida olingan natijalar amaliy-uslubiy xarakterga ega bo‘lib, ishda ko’p o’zgaruvchili qavariq funksiyalarning ekstremumlari (maksimum yoki minimum) ni topish uchun gradient tushish usuliga asoslangan dasturiy ta’minot yaratligan. Bu dasturiy ta’minot Python dasturlash tilida yaratilgan bo’lib u vizuallashgan qulay interfeysga ega. Tadqiqot predmeti va ob’ekti. Tadqiqotning predmeti “Mashinaviy o’qitish”, “Mashinaviy o’qitishda optimallashtirish usullari”, “Kompyuter ilmlarida statistik modellar”, “Ehtimollar nazaryasi va matematik statistika” , “Matematik analiz”, “Python dasturlash tili” va shu kabi fan sohalari bo‘lib, ob’ekti chiziqli regressiya modeli va gradient tushish usulidan iborat. Tatqiqotnig ilmiy va amaliy ahamiyati. Ishda olingan natijalar va unda qo‘llanilgan usullardan turli iqtisodiy, ijtimoiy sohalarning ko‘pgina amaliy masalalarini tadqiq qilishda, “Ehtimollar nazaryasi va matematik statistika”, “Matematik analiz”, “Kompyuter ilmlarida statistik modellar” va shu kabi fanlarning amaliy mashg‘ulotlari o‘quv jarayonlarida dasturiy vosita sifatida foydalanish mumkin. Ishning tuzilishi. Ushbu ish kirish, ikki bob, xulosa, foydalanilgan adabiyotlar ro‘yxati va ilovalardan iborat. I bob uchta paragrafdan iborat bo‘lib, uning birinchi va ikkinchi paragrafida adabyotlardan foydalanilgan holda, gradient tushish usuli haqida umumiy tushunchalar, usul algoritmi keltirilgan va bu usul yordamida misollar yechilgan. 4

Uchinchi paragrafda gradient tushish usuliga asoslanib ishlab chiqilgan dasturiy vosita haqida ma’lumotlar keltirilgan. II bob uchta paragrafdan iborat bo’lib birinchi paragraph ikkita qism paragrafdan iborat bo’lib, mos ravishda, bir o’zgaruvchili va ko’p o’zgaruvchili chiziqli regressiyalar haqida ma’lumotlar keltirilgan. Ikkinchi paragraf gradient tushish usilining chiziqli regressia modelida qo’llanilishiga bag’ishlangan bo’lib, maqsad funksiyani tanlash va uning parametrlarini aniqlashga e’tibor qaratilgan. Bu bobning uchinchi paragrafida mavzuda doir amaliy masala qaralgan, ya’ni chiziqli regressiya algoritmiga asoslanib uy-joy narxlarini bashorat qilish modelini ishlab chiqishga qaratilgan bo’lib u ikkita ta qism paragrafdan iborat. Birinchi qism paragrafda uy-joy narxlariga tegishli ma’lumotlarni to’lash va qayta ishlash qaralgan, ikkinchi qism paragrafda model parametrlarini aniqlash va model natijasining aniqligini baholashga qaratilgan. Olingan natijalarning qisqacha mazmuni. Bitiruv malakaviy ishida chiziqli regressiya modelini qurish jarayonida, gradient tushish usulining o’rni, qo’llanilishi o’rganildi va gradient tushish usuliga asoslangan dasturiy vosita ishlab chiqilgan. Chiziqli regrsssiya modelida gradient tshish usulini yanada yaxshiroq anglsh uchun amaliy masala yechilgan ya’ni uy-joy narxlari chiziqli regressiya algoritmi yordamida tahlil qililinib bashorat qilivchi model ishlab chiqilgan. 5