diff --git a/1-Introduction/1-intro-to-ML/translations/README.az.md b/1-Introduction/1-intro-to-ML/translations/README.az.md new file mode 100644 index 0000000000..a0082b579c --- /dev/null +++ b/1-Introduction/1-intro-to-ML/translations/README.az.md @@ -0,0 +1,146 @@ +# Maşın öyrənməsinə giriş + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/?loc=az) + +--- + +[![Yeni başlayanlar üçün ML - Yeni başlayanlar üçün maşın öyrənməsinə giriş](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "Yeni başlayanlar üçün ML- Yeni başlayanlar üçün maşın öyrənməsinə giriş") + +> 🎥 Bu dərslə məşğul olmaq üçün yuxarıdakı təsvirə klikləyin və videonu izləyin. + +Yeni başlayanlar üçün klassik maşın öyrənməsi kursuna xoş gəlmisiniz! İstər bu sahədə tamamilə yeni olun və ya bu sahədə fikirləri cəmləməyə çalışan təcrübəli ML mütəxəssisi olun, bizə qatıldığınız üçün məmnuniyyət hissi duyuruq! Sizə ML öyrənməyinizdə mehriban bir mühit yaratmaq istəmişik və [fikirlərinizi](https://github.com/microsoft/ML-For-Beginners/discussions) dəyərləndirmək və cavablamaqdan məmnun olarıq. + +[![ML-ə giriş](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "ML-ə giriş") + +> 🎥 Yuxarıdakı təsvirə klikləməklə videoya baxın: John Guttag MIT-də maşın öyrənməsini təqdim edir + +--- +## Maşın öyrənməsi ilə başlanğıc + +Kurikuluma başlamazdan əvvəl komputerinizi Phyton notbukların icra olunmasına hazır vəziyyətə gətirməyiniz lazımdır. + +- **Komputerinizi bu videolarla hazırlayın**. Linkləri izləyərək komputerinizdə necə [Python quraşdıra biləcəyinizi](https://youtu.be/CXZYvNRIAKM) və kodlamaq üçün [mətn redaktorunu quraşdıracağınızı](https://youtu.be/EU8eayHWoZg) öyrənə bilərsiniz. +- **Python öyrən**. Bu kursda istifadə etdiyimiz və data mühəndislərinə yararlı olan olan [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) proqramlaşdırma dilində fundamental biliklərə sahib olmağınız məsləhətdir. +- **Node.js və JavaScript öyrən**. Bu kursda bir neçə dəfə veb proqramlarını hazırlayarkən JavaScript dilindən istifadə etmişik, buna görə kompüterinizə [node](https://nodejs.org) və [npm](https://www.npmjs.com/) yükləməyiniz lazımdır. [Visual Studio Code](https://code.visualstudio.com/) yükləməklə həm Python, həm də JavaScript kodlaması üçün istifadə edə bilərsiniz. +- **GitHub hesabı yaradın**. Bizi [GitHub](https://github.com) plaformasından tapmısınızsa, çox güman ki, hesabınız artıq vardır. Lakin əgər yoxdursa, yeni birini yaradın və bu kurrikulumu öz hesabınıza köçürməklə (fork) istədiyiniz kimi istifadə edə bilərsiniz. (Həmçinin bizə ulduz verməyi də unutmayın 😊) +- **Scikit-learn kəşf edin**. Özünüzü [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) platforması ilə tanış edin. Dərslərdə bəzi ML kitabxanaları bu platformadan istinad olunub. + +--- +## Maşın öyrənməsi nədir? + +'Maşın öyrənməsi' günümüzdə ən populyar və tez-tez istifadə olunan terminlərdən biridir. Hansı sahədə işləməyindən asılı olmayaraq texnologiya ilə tanışlığın varsa, bu termini ən azı bir dəfə eşitmə ehtimalı var. Maşın öyrənməsinin mexanikası çox insan üçün sirdir. Maşın öyrənməsinə yeni başlayan kimi mövzunun bəzən çox ağır olduğunu hiss edə bilərsən. Buna görə maşın öyrənmənin əslində nə olduğunu addımbaaddım praktik nümunələr üzərindən başa düşmək vacibdir. + +--- +## Məşhurluq xətti + +![MLməşhurluq xətti](../images/hype.png) + +> Google Trends platformasında 'maşın öyrənməsi' terminin 'məşhurluq xətti' + +--- +## Əsrarəngiz kainat + +Bizim yaşadığımız kainat çoxlu möhtəşəm sirlərlə doludur. Stefen Haukinq, Albert Eynşteyn və başqa böyük alimlər həyatlarını ətrafımızdakı dünyanın sirlərini açmaq üçün mənalı məlumatlarını araşdırmağa həsr etmişdir. İnsanların öyrənmə tərzi belədir: insan uşaqlıqdan ilbəil böyüdükcə yeni şeylər öyrənir və ətrafındakı dünyanın strukturunu aşkarlayır. + +--- +## Uşağın beyni + +Uşağın beyni və duyğuları ətrafdakı məlumatları qəbul edir və get-gedə həyatın gizli modelini öyrənir. Bu məlumatlar onun əvvəldən öyrəndiyi qaydaları təyin etmək üçün qurduğu məntiqi qaydaları daha da təkmilləşdirir. İnsan beyninin öyrənmə prosesi dünyada yaşayan canlıların ən təkmil formasıdır. Daim gizli modelləri öyrənmək və bunların üzərində kəşflər etmək bacarığı bizə həyatımız boyu daha da yaxşılaşmağımıza kömək edir. Belə öyrənmə tutumu və təkammülü [beyinin plastik xarakteristikası](https://www.simplypsychology.org/brain-plasticity.html) ilə əlaqəlidir. Səthi olaraq insan beynin öyrənməsi prosesinin və maşın öyrənməsi anlayışının arasında bəzi oxşarlıqları təyin edə bilərik. + +--- +## İnsan beyni + +[İnsan beyni](https://www.livescience.com/29365-human-brain.html) həqiqi dünyadakı əşyaları dərk edir, qəbul edilən məlumatları emal edir, məntiqi qərarlar verir və şəraitdən asılı olaraq bəzi hərəkətlər edir. Ağıllı şəkildə davranmaq buna deyirik. Maşına ağıllı şəkildə davranmasını proqram vasitəsi ilə quraşdırılması süni intellekt (AI) adlanır. + +--- +## Bəzi terminlər + +Bəzi terminlər çaşdırıcı ola bilər. Bunu unutmayaq ki, maşın öyrənməsi (ML) süni intellekt sahəsinin daxilində bir hissədir. **ML qəbul edilən məlumatlardan xüsusi alqoritmlər istifadə etməklə mənalı informasiyanı və gizli modelləri tapıb rasional qərar vermək prosesində istifadə olunur**. + +--- +## AI, ML, Dərin öyrənmə + +![AI, ML, dərin öyrənmə, data elmi](../images/ai-ml-ds.png) + +> Diaqram AI, ML, dərin öyrənmə və data elmi arasında əlaqəni təsvir edir. [Bu qrafikdən](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) ilhamlanaraq [Cen Luper](https://twitter.com/jenlooper) tərəfindən hazırlanıb. + +--- +## Əhatə olunan anlayışlar + +Bu kurikulumda biz yalnız yeni başlayanların mütləq bilməli olduğu əsas maşın öyrənməsi anlayışları əhatə edəcəyik. 'Klassik maşın öyrənməsi' mövzusu əsasən bir çox tələbənin əsasları öyrənməsinə kömək etmiş mükəmməl Scikit-learn kitabxanası ilə əhatə olunub. Süni intellektin və ya dərin öyrənməni aynlayışlarını daha yaxşı başa düşmək üçün maşın öyrənməsinin əsas bilikləri vacibdir və biz sizə burada bunu təqdim edirik. + +--- +## Bu kursda öyrənəcəksiniz: + +- maşın öyrənməsi əsas anlayışları +- ML tarixi +- ML və ədalət +- reqressiya ML texnikaları +- qruplaşdırma ML texnikaları +- klasterləşdirmə ML texnikaları +- təbii danışıq emal olunması ML texnikaları +- zamana seriyası proqnozu ML texnikaları +- möhkəmləndirərək öyrənmə +- ML-in real həyatda tətbiqləri + +--- +## Nələri əhatə etməyəcəyik + +- dərin öyrənmə +- neyron şəbəkələr +- Suni İntellekt (AI) + +Daha yaxşı öyrənmə təcrübəsi üçün biz neyron şəbəkələrin, 'dərin öyrənmənin' - çoxlu qatlarla formalaşan model quran neyron şəbəkələr - və AI-ın mürəkkəbliklərini daxil etməmişik. Onlar barədə digər kurikulumlarla bəhs edəcəyik. Biz həmçinin gələcəkdə data elmini daha geniş əhatə edən kurikulumu da təklif edəcəyik. + +--- +## Niyə maşın öyrənməsi mövzusunu öyrənməliyəm? + +Maşın öyrənməsi sistem tərəfdən baxıldıqda məlumatlardan gizli modelləri öyrənərək məntiqli qərar verə bilən avtomatik sistemin yaradılmasıdır. + +Bu motivasiya insan beyninin ətraf aləmdən qəbul etdiyi məlumatlar əsasında öyrənməsindən yaranıb. + +✅ Bir dəqiqəlik düşünün, bir təşkilat ənənəvi üsulla və dəqiq qaydalarla tənzimlənən sistem qurmaq əvəzinə nə üçün maşın öyrənməsi strategiyasını seçər. + +--- +## Maşın öyrənməsinin tətbiqləri + +Maşın öyrənməsinin tətbiqləri mobil telefonlarımızdan, ağıllı cihazlardan və digər sistemlərdən yaranıb ətrafımızda axın edən məlumatlar kimi hər yerdədirlər. Maşın öyrənmə alqoritmlərinin nəhəng potensialını nəzərə alaraq tədqiqatçılar çoxölçülü və çox-parametrli həqiqi həyat problemlərini müsbət nəticələr əldə edərək kəşf edirlər. + +--- +## ML tətbiq olunan nümunələr + +**Maşın öyrənməsini bir çox yollarla istifadə edə bilərsiniz**: + +- Xəstənin tibbi tarixçəsi və hesabları əsasında xəstəliyin mümkünlüyünü təxmin etmək. +- Hava məlumatları əsasında növbəti hava hadisələrini təxmin etmək. +- Mətnin yazılma hissini, məqsədini anlamaq. +- Təbliğatın qarışısını almaq üçün yanlış xəbərləri təyin etmək. + +Maliyyə, iqtisadiyyat, geologiya, kosmik tədqiqat, biotibbi mühəndislik, idrak elmi və digər bir çox sahələr maşın öyrənəmsini mənimsəyərək böyük məlumat emalı problemlərini həll edirlər. + +--- +## Nəticə + +Maşın öyrənmə həqiqi həyatdan götürülmüş və ya süni yaradılmış məlumatlarda mənalı modellərin tapılmasın prosesini avtomatlaşdırır. Bu üsul böyük dəyərli bizneslərdən, tibb, maliyyə və digər tətbiqlərdə istifadə edilərək isbat edilib. + +Yaxın gələcəkdə çox yayılması səbəbindən maşın öyrənməsinin fundamental anlayışlarını bilmək istənilən sahədə çalışan insanlar üçün bir məcburiyyət olacaqdır. + +--- +# 🚀 Məşğələ + +Dəftər, kağız və ya onlayn [Excalidraw](https://excalidraw.com/) kimi tətbiqdə AI, ML, dərin öyrənmə və data elmi barədə anladıqlarınızı təsvir edin. Hər bir texnika ilə effektiv həll edə biləcəyiniz problemlə bağlı fikirlərinizi də qeyd edin. + +# [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/?loc=az) + +--- +# Təkrarlayın və özünüz öyrənin + +ML alqoritmləri ilə bulud mühitində həll edə biləcəyiniz problemlər barədə daha öyrənmək üçün bu [öyrənmə planından](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) istifadə edə bilərsiniz. + + +ML əsasları barədə bu [öyrənmə planına](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) da nəzər yetirin. + +--- +# Tapşırıq + +[Sistem hazırlayın](assignment.az.md) diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.az.md b/1-Introduction/1-intro-to-ML/translations/assignment.az.md new file mode 100644 index 0000000000..ac6324e94d --- /dev/null +++ b/1-Introduction/1-intro-to-ML/translations/assignment.az.md @@ -0,0 +1,9 @@ +# Sistem hazırlayın + +## Təlimatlar + +Bu qiymətləndirilməyən bir tapşırıqdır. Bu tapşırıqda siz Python proqramlaşdırma dilini öz komputerinizdə icra edilə bilən vəziyyətə gətirməyiniz və notbukları istifadə edə bilməyiniz tələb olunur. + +[Python öyrənmə planına](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) baxın və sisteminizdə sazlamanı bu giriş videolara baxaraq yerinə yetirin: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/2-history-of-ML/translations/README.az.md b/1-Introduction/2-history-of-ML/translations/README.az.md new file mode 100644 index 0000000000..f88b3584f7 --- /dev/null +++ b/1-Introduction/2-history-of-ML/translations/README.az.md @@ -0,0 +1,152 @@ +# Maşın öyrənmə tarixi + +![Maşın öyrənmə tarixinin xülasəsi eskizi](../../../sketchnotes/ml-history.png) +> [Tomomi İmura](https://www.twitter.com/girlie_mac) tərəfindən təsvir + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) + +--- + +[![Yeni başlayanlar üçün ML- Maşın öyrənmə tarixi](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "Yeni başlayanlar üçün ML- Maşın öyrənmə tarixi") + +> 🎥 Bu dərslə məşğul olmaq üçün yuxarıdakı təsvirə klikləyin və videonu izləyin. + +Bu dərsdə biz maşın öyrənmə və süni intellekt tarixində vacib mərhələlərindən keçəcəyik. + +Süni intellekt (AI) tarixi maşın öyrənmə sahəsi tarixinə daxildir, çünki ML əsasında istifadə olunan alqoritmlər və hesablama üsulları AI yaradılmasında kömək olur. Bunu yadda saxlamaq faydalıdır ki, bu sahələr 1950-ci illərdə araşdırmalar nəticəsində aydınlaşsa da, [alqoritm, statistik, riyazi, hesablama və texniki kəşflər](https://wikipedia.org/wiki/Timeline_of_machine_learning) bu zaman bölgüsündən daha əvvələ düşür və kəsişir. Fakt budur ki, insanlar belə suallar haqqında [yüz illərdir](https://az.wikipedia.org/wiki/S%C3%BCni_intellektin_tarixi) fikirləşirlər (bu məqalə tarix boyu 'düşünən maşın' ideyası haqqında intellektual qeydləri əhatə edir). + +--- +## Diqqətəlayiq kəşflər + +- 1763, 1812 [Bayes Teoremi](https://wikipedia.org/wiki/Bayes%27_theorem) və törəmələri. Bu teorem və tətbiqləri bir hadisənin baş vermə ehtimalını əvvəlki biliklər əsasında dəyərləndirməsini izah edir. +- 1805 [Ən kiçik kvadratlar üsulu](https://az.wikipedia.org/wiki/%C6%8Fn_ki%C3%A7ik_kvadratlar_%C3%BCsulu) fransız riyaziyyatçı Adriyen-Mari Legendr tərəfindən kəşf edilib. Bu teoremdə məlumatların modelləməsində istifadə olunan reqressiya üsulları barəsində bəhs edilir. +- 1913 [Markov Zəncirləri](https://wikipedia.org/wiki/Markov_chain) rus riyaziyyatçı Andrey Markov şərəfinə adlandırılıb və baş verə biləcək hadisələrin sırasını əvvəlki vəziyyətə görə təyin edilməsində istifadə edilir. +- 1957 [Perseptron](https://az.wikipedia.org/wiki/Perseptron) amerikan psixoloq Frank Ruzenblat tərəfindən kəşf olunub. Bu metod dərin öyrənmədə xətti qruplaşdırma üçün istifadə olunur. + +--- + +- 1967 [Yaxın qonşular](https://wikipedia.org/wiki/Nearest_neighbor) alqoritmi ilk dəfə xəritədə yolların tapılması üçün hazırlanıb. ML sahəsində bu alqoritm modelləri tapmaqda istifadə olunur. +- 1970 [Geri yayılma (Backpropagation)](https://wikipedia.org/wiki/Backpropagation) [neyron şəbəkələrini öncədən məlumatlandırma](https://wikipedia.org/wiki/Feedforward_neural_network) üsulu ilə təkmilləşdirmədə tətbiq olunur. +- 1982 [Təkrarlanan neyron şəbəkələr](https://wikipedia.org/wiki/Recurrent_neural_network) şəbəkənin öncədən məlumatlandırma üsulundan yaranan müvəqqəti qraflardan ibarət süni neyron şəbəkələrdir. + +✅ Biraz araşdırma edin. Başqa hansı tarixlər ML və AI tarixində vacib hissəni tutur? + +--- +## 1950: Düşünə bilən maşınlar + +[2019-cu ildə ictimaiyyət tərəfindən](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 20 əsrin ən görkəmli alimləri kimi seçilən Alan Türinq 'düşünə bilən maşın' modelinin qurucusu kimi tanınır. O, NLP dərslərimizdə araşdıracağınız [Türinq Testi](https://www.bbc.com/news/technology-18475646) yaratmaqla ona inanmayanlarla sübut etməyə və bu konsepsiyanın təcrübi sübutları ilə öz ehtiyacını doldurmağa çalışdı. + +--- +## 1956: Dartmut Yay araşdırma layihəsi + +“Süni intellektlə bağlı Dartmut Yay Araşdırma Layihəsi süni intellektin bir sahə kimi əsas hadisəsi idi” və “süni intellekt” termini məhz burada ortaya çıxdı ([mənbə](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + + +> Öyrənmənin hər bir aspekti və ya zəkanın hər hansı digər xüsusiyyəti prinsipcə o qədər dəqiq təsvir edilə bilər ki, onu simulyasiya etmək üçün maşın hazırlana bilər. + +--- + +Aparıcı tədqiqatçı, riyaziyyat professoru Con Makkarti "öyrənmənin hər bir tərəfinin və ya zəkanın digər xüsusiyyətini prinsipcə maşının simulyasiya edə biləcəyi dərəcədə çox dəqiqliklə təsvir oluna biləcəyi fərziyyəsini davam etdirməyə" inanırdı. İştirakçılar arasında sahənin digər korifeyi Marvin Minski də var idi. + +Seminar, "simvolik metodların yüksəlişi, məhdud sahələrə yönəlmiş sistemlər (ilkin ekspert sistemləri) və induktiv sistemlərə qarşı deduktiv sistemlər" daxil olmaqla bir neçə müzakirələrin başlanmasına və təşviq etməsinə görə yadda qaldı ([mənbə](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "Qızıl illər" + +1950-ci illərdən 70-ci illərin ortalarına qədər süni intellektin bir çox problemi həll edə biləcəyi ümidi ilə nikbinlik yüksək səviyyədə idi. 1967-ci ildə Marvin Minski əminliklə bildirdi ki, “bir nəsil ərzində... “süni intellekt”in yaradılması problemi əsaslı şəkildə həll olunacaq”. (Minsky, Marvin (1967), Hesablama: Sonlu və Sonsuz Maşınlar, Englevud Klifs, N.J.: Prentis-Hol) + +Təbii dil emal tədqiqatları çiçəkləndi, axtarış təkmilləşdi, daha güclü oldu və sadə tapşırıqların sadə dil təlimatlarından istifadə edilərək tamamlandığı "mikro dünyalar" konsepsiyası yaradıldı. + +--- + +Tədqiqatlar dövlət qurumları tərəfindən yaxşı maliyyələşdirildi, hesablamalar və alqoritmlər sahəsində irəliləyişlər əldə edildi və ağıllı maşınların prototipləri quruldu. Bu maşınlardan bəzilərinə aşağıdakılar daxildir: + +* [Şakey robotu](https://wikipedia.org/wiki/Shakey_the_robot), manevr edə bilən və tapşırıqları "ağıllı" şəkildə yerinə yetirməyə qərar verən robot. + + ![Şakey, ağıllı robot](../images/shakey.jpg) + > Şakey 1972-ci il + +--- + +* Erkən 'söhbətçi' Eliza insanlarla söhbət edə və primitiv bir 'terapevt' rolunu oynaya bilirdi. NLP dərslərində Eliza haqqında daha çox məlumat əldə edəcəksiniz. + + ![Eliza, bot](../images/eliza.png) + > Elizanın bir versiyası, çatbot + +--- + +* "Bloklar dünyası" blokların üst-üstə yığıla və çeşidlənə biləcəyi və qərar qəbul etmək üçün maşınların öyrədilməsi üzrə təcrübələrin sınaqdan keçirilə biləcəyi mikro dünyanın nümunəsi idi. [SHRDLU](https://wikipedia.org/wiki/SHRDLU) kimi kitabxanalarla qurulmuş irəliləyişlər dilin işlənməsini irəli aparmağa kömək etdi. + + [![SHRDLU ilə bloklar dünyası](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "SHRDLU ilə bloklar dünyası") + + > 🎥 Videoya baxmaq üçün təsvirə klikləyin: SHRDLU ilə bloklar dünyası + +--- +## 1974 - 1980: "AI qışı" + +1970-ci illərin ortalarında aydın oldu ki, “ağıllı maşınlar”ın hazırlanmasının mürəkkəbliyi lazımi səviyyədə göstərilməyib və mövcud hesablama gücü nəzərə alınmaqla ondan gözləntilər həddənindən artıq olub. Maliyyələşmə azaldı və sahəyə inam azaldı. Güvənə təsir edən bəzi məsələlərə aşağıdakılar daxildir: + +--- +- **Limitlər**. Hesablama gücü çox limitli idi. +- **Kombinator partlayış**. Maşın öyrənmə üçün istifadə olunan parametr sayı komputerlərin hesablama gücü və tutumunun inkişafı ilə parallel getmirdi, hətta eksponent olaraq artırdı. +- **Məlumat azlığı**. Alqoritmlərin sınaqdan keçirilməsi, işlənməsi və dəqiqləşdirilməsi prosesinə lazım olan məlumatların azlığı mane olurdu. +- **Doğru sualları veririkmi?**. Verilən sualların özü də sorğulanmağa başladı. Tədqiqatçılar öz yanaşmalarını tənqid etməyə başladılar: + - Turinq testləri, digər fikirlərlə yanaşı, "rəqəmsal kompüterin proqramlaşdırılması onu dili başa düşmüş kimi göstərə bilər, lakin həqiqi anlayış yarada bilməz" deyən "Çin otağı nəzəriyyəsi" vasitəsi ilə sual altına düşdü ([mənbə](https://plato.stanford.edu/entries/chinese-room/)). + - “Terapevt” ELIZA kimi süni intellektlərin cəmiyyətə daxil edilməsinin etikasına etiraz edildi. + +--- + +Eyni zamanda, müxtəlif AI düşüncə məktəbləri formalaşmağa başladı. ["Qarışıq" ilə "səliqəli AI"](https://wikipedia.org/wiki/Neats_and_scruffies) təcrübələri arasında müqayisədə dixotomiya (eyni zamanda yalnız biri mümkün olan) quruldu. _Qarışıq_ laboratoriyaları istədiyiniz nəticələr əldə edənə qədər proqramları saatlarla dəyişirdilər. _Səliqəli_ laboratoriyaları isə "məntiqə və formal problemlərin həllinə yönəldilib". ELIZA və SHRDLU sistemləri _qarışıq_ kateqoriyasında tanınırlar. 1980-ci illərdə, ML sistemlərini təkrarlana bilən etmək tələbi yarandıqca, nəticələri daha izah oluna bilən _səliqəli_ yanaşma tədricən ön plana çıxdı. + +--- +## 1980-ci illər Ekspert sistemlər + +Sahə böyüdükcə onun biznesə faydası daha aydın oldu və 1980-ci illərdə “ekspert sistemləri”nin yayılması da artdı. "Ekspert sistemləri süni intellektin (AI) proqram təminatının ilk həqiqi uğurlu formalarından biri idi" ([mənbə](https://wikipedia.org/wiki/Expert_system)). + +Bu tip sistem əslində _hibriddir_, bir hissəsi biznes tələblərini müəyyən edən qaydalar mühərrikindən, digər hissəsi isə yeni faktlar çıxarmaq üçün qaydalar sistemindən istifadə edən mühərrikindən ibarətdir. + +Bu dövr həm də neyron şəbəkələrinə artan diqqətin şahidi oldu. + +--- +## 1987 - 1993: AI 'sükutu' + +İxtisaslaşmış ekspert sistemlərinin aparatlarının yayılması həddən artıq ixtisaslaşmış olmaq kimi xoşagəlməz effekt verdi. Fərdi kompüterlərin yüksəlişi də bu böyük, ixtisaslaşmış və mərkəzləşdirilmiş sistemlərlə rəqabət aparırdı. Hesablamanın demokratikləşməsi başlamışdı və bu, nəhayət, böyük verilənlərin müasir partlayışına yol açdı. + +--- +## 1993 - 2011 + +Bu dövrdə ML və AI üçün əvvəllər məlumat və hesablama gücünün bəs etməməsi səbəbindən həll olunmayan bəzi problemlərin həlli tapıldı. Xüsusilə 2007-ci ildə smartfonun meydana çıxması ilə məlumatların miqdarı sürətlə artmağa və daha geniş şəkildə əlçatan olmağa başladı. Hesablama gücü eksponent olaraq genişləndi və alqoritmlər də onunla birlikdə inkişaf etdi. Keçmişin sərbəst dövrləri artıq intizamlı hala gəlməyə başladıqca sahə yetkinləşməyə başladı. + +--- +## İndi + +Bu gün maşın öyrənməsi və süni intellekt həyatımızın demək olar ki, hər bir hissəsinə toxunur. Bu dövr alqoritmlərin insan həyatına riskləri və potensial təsirlərini diqqətlə başa düşməyi tələb edir. Microsoft-dan Brad Smith-in dediyi kimi, "İnformasiya texnologiyası məxfilik və ifadə azadlığı kimi fundamental insan hüquqlarının müdafiəsinin mərkəzinə gedən məsələləri gündəmə gətirir. Bu problemlər məhsullar yaradan texnologiya şirkətlərinin məsuliyyətini artırır. Fikrimizcə, onlar həmçinin düşünülmüş dövlət tənzimləməsini və düzgün istifadə qaydalarının işlənib hazırlanmasını tələb edirlər" ([mənbə](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Gələcəyin nələr vəd etdiyini görürük, lakin kompüter sistemlərini və onların işlədiyi proqram və alqoritmləri başa düşmək vacibdir. Ümid edirik ki, bu kurikulum daha yaxşı başa düşməyinizə kömək edəcək ki, özünüz qərar verə biləsiniz. + +[![Dərin öyrənmənin tarixi](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Dərin öyrənmənin tarixi") +> 🎥 Videoya baxmaq üçün yuxarıdakı şəkilə klikləyin: Yan LeCun mühazirəsində dərin öyrənmə tarixini müzakirə edir + +--- +## 🚀 Məşğələ + +Bu tarixi məqamlardan (yuxarıdakı sadalanan) birini seçib onların arxasında duran insanlar haqqında daha çox məlumat əldə edin. Onlar arasında maraqlı personajlar var və mədəni boşluqdan heç bir elmi kəşf yaradılmayıb. Bəs siz onlarda nələri kəşf etdiniz? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/?loc=az) + +--- +## Təkrarlayın və özünüz öyrənin + +İzləmək və dinləmək üçün materiallar: + +[Amy Boydun süni intellektin təkamülünü müzakirə etdiyi podkast](http://runasradio.com/Shows/Show/739) + +[![Amy Boyd tərəfindən AI tarixi](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy Boyd tərəfindən AI tarixi") + +--- + +## Tapşırıq + +[Zaman qrafiki qurun](assignment.az.md) diff --git a/1-Introduction/2-history-of-ML/translations/assignment.az.md b/1-Introduction/2-history-of-ML/translations/assignment.az.md new file mode 100644 index 0000000000..bd33216c99 --- /dev/null +++ b/1-Introduction/2-history-of-ML/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Zaman qrafiki qurun + +## Təlimat + +[Bu reponu](https://github.com/Digital-Humanities-Toolkit/timeline-builder) istifadə edərək alqoritmlərin, riyaziyyatın, statistikanın, AI və ML tarixinin bəzi aspektlərinin və ya bunların birləşməsinin bir zaman qrafikini yaradın. Bir insana, ideyaya və ya uzun müddətli bir fikirə diqqət yetirə bilərsiniz. Multimedia elementlərini (şəkil, video, səs) əlavə etdiyinizə əmin olun. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Zaman qrafiki GitHub səhifəsində paylaşılmışdır | Kod hazır deyil və paylaşılmayıb | Zaman qrafiki natamamdır, yaxşı araşdırılmayıb və paylaşılmayıb | diff --git a/1-Introduction/3-fairness/translations/README.az.md b/1-Introduction/3-fairness/translations/README.az.md new file mode 100644 index 0000000000..9f91d643ea --- /dev/null +++ b/1-Introduction/3-fairness/translations/README.az.md @@ -0,0 +1,162 @@ +# Məsuliyyətli AI ilə maşın öyrənməsi həlləri tapmaq + +![Eskizdə Maşın öyrənməsində məsuliyyətli AI xülasəsi](../../../sketchnotes/ml-fairness.png) +> [Tomomi Imura](https://www.twitter.com/girlie_mac) tərəfindən eskiz + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/?loc=az) + +## Giriş + +Bu kurrikulumda siz maşın öyrənməsinin gündəlik həyatımıza necə təsir edə biləcəyini və etdiyini kəşf etməyə başlayacaqsınız. Hətta indi də sistemlər və modellər səhiyyə diaqnozları, kreditlərin təsdiqlənməsi və ya dələduzluğun aşkarlanması kimi gündəlik qərar qəbuletmə işlərində iştirak edirlər. Buna görə də, etibarlı nəticələr əldə etmək üçün bu modellərin yaxşı işləməsi vacibdir. Hər hansı bir proqram tətbiqi kimi, AI sistemləri də gözləntilərə çatmayacaq və ya arzuolunmaz nəticə ilə üzləşəcək. Buna görə də AI modelinin davranışını başa düşmək və izah etmək vacibdir. + +Təsəvvür edin ki, bu modelləri yaratmaq üçün istifadə etdiyiniz data irq, cins, siyasi görüş, din kimi müəyyən demoqrafik göstəricilərə malik olmadıqda və ya qeyri-mütənasib şəkildə belə demoqrafik göstəriciləri təmsil edərsə nələr baş verə bilər. Modelin çıxışı bəzi demoqrafik göstəricilərə üstünlük vermək üçün şərh edilməsinin nəticəsi nə olacaq? Tətbiq üçün nəticəsi nə olacaq? Bundan əlavə, modelin mənfi nəticəsi olduqda və insanlar üçün zərərli olduqda nə baş verəcək? AI sistemlərinin davranışına görə kim cavabdehdir? Bunlar bu kurrikulumda araşdıracağımız bəzi suallardır. + +Bu dərsdə siz: + +- Maşın öyrənməsində ədalətin əhəmiyyəti və ədalətlə əlaqəli zərərlər haqqında məlumatlılığınızı artıracaqsınız +- Etibarlılıq və təhlükəsizliyi təmin etmək üçün kənar göstəriciləri və qeyri-adi ssenariləri araşdırmaq təcrübəsi ilə tanış olacaqsınız +- İnklüziv sistemlərin dizayn edilməsi ilə hər kəsin səlahiyyətləndirilməsi ehtiyacı haqqında anlayış əldə edəcəksiniz +- Məlumatların və insanların məxfiliyinin və təhlükəsizliyinin qorumasının nə qədər vacib olduğunu araşdıracaqsınız +- Süni intellekt modellərinin davranışını izah etmək üçün şüşə qutu yanaşmasının vacibliyini görəcəksiniz +- Süni intellekt sistemlərinə inam yaratmaq üçün məsuliyyətliliyin necə vacib olduğunu nəzərə alacaqsınız + +## Tələb olunanlar + +İlkin olaraq, zəhmət olmasa, "Məsuliyyətli AI Prinsipləri" Təlim Yoluna başlayın və mövzu ilə bağlı aşağıdakı videoya baxın: + +Bu [Təlim Yolunu](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) izləməklə Məhsul AI haqqında daha çox məlumat əldə edin + +[![Microsoft-un Məsul AI yanaşması](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft-un Məsul AI yanaşması") + +> 🎥 Video üçün yuxarıdakı şəklə klikləyin: Microsoft-un Məsul AI yanaşması + +## Ədalətlilik + +Süni intellekt sistemləri hər kəsə ədalətli davranmalı və oxşar insan qruplarına müxtəlif yollarla təsir etməməlidir. Məsələn, süni intellekt sistemləri tibbi müalicə, kredit müraciətləri və ya işə qəbulla bağlı təlimat verdikdə, oxşar simptomları, maliyyə vəziyyəti və ya peşəkar keyfiyyətləri olan hər kəsə eyni tövsiyələri verməlidir. İnsan olaraq hər birimiz qərarlarımıza və hərəkətlərimizə təsir edən irsi qərəzlər daşıyırıq. Bu qərəzlər AI sistemlərini öyrətmək üçün istifadə etdiyimiz məlumatlarda aydın görünə bilər. Belə manipulyasiya bəzən istəmədən baş verə bilər. Məlumatlarda qərəzliliyi nə vaxt tətbiq etdiyinizi şüurlu şəkildə bilmək çox vaxt çətindir. + +**“Haqsızlıq”** irq, cins, yaş və ya əlillik statusu kimi xüsusiyyətləti baxımından bir qrup insan üçün mənfi təsirləri və ya “zərərləri” əhatə edir. Ədalətlə əlaqəli əsas zərərlər aşağıdakı kimi təsnif edilə bilər: + +- **Ayrı-seçkilik**, məsələn, cins və ya etnik mənsubiyyət digərindən üstündürsə. + +- **Xidmət keyfiyyəti**. Əgər məlumatı konkret bir ssenari üçün öyrədirsinizsə, lakin reallıq daha mürəkkəbdirsə, bu, xidmətin keyfiyyətsiz olmasına gətirib çıxarır. Məsələn, qara dərili insanları hiss edə bilməyən əl sabunu dispenseri. [İstinad](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) + +- **Təhqir**. Bir şeyi və ya kimisə haqsız yerə tənqid etmək, etiketləmək. Məsələn, bir şəkil etiketləmə texnologiyası qara dərili insanların şəkillərini qorilla kimi yanlış etiketlədi. + +- **Həddindən artıq və ya az təmsil olunma**. İdeya ondan ibarətdir ki, müəyyən bir qrup müəyyən bir peşədə kifayət qədər təmsil olunmur və zərər verən hər hansı bir xidmət və ya funksiya bunu təbliğ etməyə davam edir. + +- **Stereotipləşdirmə**. Müəyyən bir qrupun ön yarğılı fikirlərlə əlaqələndirilməsi. Məsələn, ingilis və türk dilləri arasında dil tərcümə sistemində cins ilə stereotipik əlaqəsi olan sözlərə görə səhvlər ola bilər. + +![translation to Turkish](../images/gender-bias-translate-en-tr.png) +> türk dilinə tərcümə + +![translation back to English](../images/gender-bias-translate-tr-en.png) +> ingilis dilinə geri tərcümə + +Süni intellekt sistemlərinin dizayn edilməsi və test olunması zamanı biz süni intellektin ədalətli olmasını və qərəzli və ya ayrı-seçkilik xarakterli qərarlar qəbul etmək üçün proqramlaşdırılmamasını təmin etməliyik, hansı ki insanların da qəbul etməsi qadağandır. Süni intellekt və maşın öyrənməsində ədalətin təmin edilməsi mürəkkəb sosial texniki problem olaraq qalır. + +### Etibarlılıq və təhlükəsizlik + +Güvən yaratmaq üçün AI sistemləri həm normal, həm də gözlənilməz şəraitdə etibarlı, təhlükəsiz və düzgün olmalıdır. Süni intellekt sistemlərinin müxtəlif situasiyalarda necə davranacağını bilmək vacibdir, xüsusən də onlar normal şəraitdən kənara çıxdıqda. Süni intellekt həllərini qurarkən süni intellektin qarşılaşacağı müxtəlif vəziyyətlərin necə idarə olunacağına böyük diqqət yetirilməlidir. Məsələn, özünü idarə edən avtomobil insanların təhlükəsizliyini əsas prioritet kimi qoymalıdır. Nəticədə, avtomobili idarə edən süni intellekt avtomobilin qarşılaşa biləcəyi bütün mümkün ssenariləri nəzərə almalıdır, məsələn, gecə, tufan və ya çovğun, küçədə qaçan uşaqlar, ev heyvanları, yol tikintiləri və s. Bir AI sisteminin nə qədər yaxşı olduğu bir sıra fərqli şəraitdə nə dərəcədə etibarlı və təhlükəsiz işlədiyindən asılıdır, bu, sistem dizaynı və testi zamanı data mühəndisi və ya AI proqramçısı tərəfindən nəzərə alınan proqnoz səviyyəsini göstərir. + +> [🎥 Video üçün bura klikləyin: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Daxil edilmə + +AI sistemləri hər kəslə əlaqədə olacaq və fayda verəcək şəkildə formalaşdırılmalıdır. AI sistemlərinin dizayn və icra mərhələrində data mühəndisləri və proqramçılar sistemin istəmədən kimlərisə xaric etməsi ehtimalarını təyin etməyə və qarşısını almağa çalışırlar. Misal üçün, dünyada müxtəlif əngəlləri olan 1 milyard insan var. AI inkişafı nəticəsində onlar geniş miqyasda məlumatlara və fürsətlərə gündəlik həyatlarında asanlıqla çata bilirlər. Əngəllər barədə öncədən düşünmək AI məhsullarını hər kəs tərəfindən faydalana biləcəyi daha yaxşı təcrübəni yaratmağa fürsətlər yaradır. + +> [🎥 Video üçün bura klikləyin: AI-da daxil edilmə](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Təhlükəsizlik və məxfilik + +AI sistemləri təhlükəsiz olmalı və insanlarım məxfiliyinə hörmət etməlidir. İnsanlar onların məxfiliyini, məlumatlarını və ya həyatlarını risk altında qoyan sistemlərə az güvənirlər. Maşın öyrənməsi modellərini sazladığımız zaman ən yaxşı nəticəni verən datalara etibar edirik. Bunu etdiyimiz zaman datanın mənbəsini və düzgün üsulla əldə olduğunu da nəzərə almalıyıq. Misal üçün, bu məlumat istifadəçi tərəfindən təqdim olunub və ya ictimai olaraq əlçatandırmı? Data ilə işləyərkən nəzərə alınmalı növbəti məsələ, AI sistemlərinin məxfi məlumatlarını qoruyacağı və hücumlara davamlı olacağı şəkildə hazırlanması vacibdir. AI istifadəsi artıqca vacib şəxsi və biznes məlumatlarının məxfiliyinin qorunması daha vacib və qəliz hala gəlir. Məxfilik və data təhlükəsizliyi problemləri AI üçün daha çox diqqət tələb edir, çünki bu məlumatlar AI sistemlərinin insanlar barədə dəqiq təxminlər və qərarlar verməsi üçün lazımdır. + +> [🎥 Video üçün bura klikləyin: AI-da təhlükəsizlik](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Cari sənayedə Məxfilik və təhlükəsizlik sahəsində əhəmiyyətli irəliləyişlər etmişik, GDPR (Ümumi Məlumatların Qorunması Qaydası) kimi qaydalarla diqqəti daha da artırmışıq +- Buna baxmayaraq biz AI sistemlərində effektiv fərdiləşdirilmə üçün şəxsi məlumatlara olan ehtiyac ilə təhlükəsizlik arasında olan gərginliyi başa düşməliyik. +- Kompüterlərin internetə qoşulması ilə təhlükəsizlik problemlərinin yaranmasındakı böyük sıçrayışı indi AI ilə əlaqəli sistemlərində görürük. +- Eyni zamanda biz AI-ın təhlükəsizlik tərəfdən inkişaf etdiyini də görürük. Misal olaraq, bugünkü müasir anti-virus proqramları AI sistemlərinin iştirakı ilə həyata keçirir. +- Bizim Data elmi proseslərinin ən son məxfilik və təhlükəsizlik təcrübələrini özündə birləşdiyinə əmin olmağımız lazımdır. + +### Şəffaflıq + +AI sistemləri başa düşülən olmalıdır. Şəffaflığın ən vacib hissəsi AI sistemlərinin davranışını və komponentlərini izah etməkdir. AI sistemlərinin anlaşıqlığını artırmaqla biz mümkün performans problemlərini, təhlükəsizlik və məxfilik məsələlərini, qərəzləri, çıxdaş edilmə hallarını və ya istənilməyən nəticələri daha tez tapa bilərik. Biz həmçinin inanırıq ki, insanlar AI sistemlərini nə zaman, nə üçün və necə istifadə edəcəklərini seçməkləri barədə səmimi, məsuliyyətli olmalıdırlar. Əlavə olaraq, işlətdikləri sistemin limitləri barədə də məlumatlı olmalıdırlar. Misal üçün, əgər bank AI sistemini müştərilərə verəcək kredit təklifini hazırlamaqda köməkçi kimi istifadə edirsə, bu sistemin verdiyi təklifləri ən çox hansı parametrlərin təsir etdiyini araşdırması vacibdir. Hökümətlər AI-ın sənayelərdə istifadəsinə qaydalar tətbiq etməyə başlayır, belə ki data mühəndisləri və şirkətləri AI sisteminin verdiyi qərarların (xüsusilə arzuolunmaz nəticələrin) tənzimləyici tələblərə cavab verdiyini izah edə bilməlidirlər. + +> [🎥 Video üçün bura klikləyin: AI-da şəffaflıq](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- AI sistemləri qəliz olduğu üçün onun işləmə qaydasını və verdiyi qərarları anlamaq çətindir. +- Bu anlaşılmada əksiklik həmin sistemlərin idarə edilməsinə, istifadə edilməsinə və sənədləşməsinə təsir edir. +- Bu anlaşılmadakı əksiklik ən vacib olaraq sistemin səbəb olduğunu nəticəyə gətirən qərarlara təsir edir. + +### Məsuliyyət + +AI tərtib edən və işə salan şəxslər sistemin necə işlədiyi ilə bağlı məsuliyyət daşımalıdırlar. Üz tanınması kimi həssas texnologiyaların istifadəsində məsuliyyət ehtiyacı daha əhəmiyyətlidir. Son zamanlar, itmiş uşaqları tapmaq kimi istifadəyə yararlı üz tanıma texnologiyalarına tələb hüquq təşkilatlarından tərəfindən kəskin artmışdır. Lakin bu texnologiyalar dövlət tərəfindən istifadə olunaraq vətəndaşları fundamental azadlıq risklərinə gətirib çıxara bilər. Misal üçün onlar seçilmiş fərdləri daim müşahidə edə bilərlər. Buna görə də data mühəndisləri və təşkilatlar AI sistemlərinin fərdlərə və cəmiyyətə necə təsir etməsi ilə bağlı məsuliyyətli olmalıdırlar. + +[![Tanınmış AI tədqiqatçısı üz tanınması tətbiqi ilə ilə kütləvi izləmə barədə xəbərdarlıq edir edir](../images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft-un məsuliyyətli AI-a yanaşması") + +> 🎥 Video üçün yuxarıdakı şəkilə klikləyin: Üz tanınması tətbiqi ilə ilə kütləvi izləmə barədə xəbərdarlıq + +AI-ı cəmiyyətimizə gətirmiş ilk nəsil olaraq bizə ünvanlanmış ən böyük suallardan biri, kompüterlərin insanlara məlusiyyətli qalacağına və kompüterləri tərtib edən insanların digər hər kəsə məsuliyyətli qalacağına necə əmin ola bilərik. + +## Təsirin qiymətləndirilməsi + +Maşın öyrənmə modelini öyrətməzdən əvvəl AI sisteminin məqsədini anlamaq üçün mümkün ola biləcək təsirləri qiymətləndirməyimiz vacibdir. Sistemin istifadəsində məqsəd nədir, harada tətbiq olunacaq və bununla kim işləyəcək. Bu məqamlar mümkün ola biləcək riskləri və gözlənilən nəticələri nəzərə almaq üçün sistemi yoxlayan və ya test edən şəxslər üçün faydalı olacaqdır. + +Aşağıda qeyd olunanlar təsirin qiymətləndirilməsi zamanı nəzərə alınacaq sahələrdir: + +* **Fərdlərə mənfi təsir**. Tələbləri və məhdudiyyətləri, nəzərdə tutulmayan istifadə yeri və sistemin performans limitlərini bilməklə bu sistemin başqa fərdlərə hansısa yolla zərər vurmayacağına əmin olmalısınız. +* **Məlumat tələbləri**. Yoxlayan şəxslər sistemin dataları necə və harada istifadə edəcəyini öyrənməklə məlumat saxlanmasındakı tələblərdə nələrə diqqət etməli olacağını biləcəklər (misal üçün GDPR və ya HIPPA data qaydaları). Əlavə olaraq, datanın mənbəyinin və miqdarının öyrənmə üçün kifayət edəcəyi də yoxlayın. +* **Təsirin xülasəsi**. Sistemin istifadəsindən yarana biləcək bütün mümkün təhlükələri siyahı formasında topla. ML prosesi boyunca təyin olunmuş problemləri necə həll edəcəyini nəzərdən keçir. +* **Uyğun məqsədlər** 6 əsas prinsipin hər birinin məqsədinə çatıla bildiyini yoxla və mümkün boşluqları düşün. + + +## Məsul AI-ı izləmək + +Proqram təminatlarının izlənildiyi kimi AI sistemlərində də problemlərin tapılması və həlli üçün izləmə mütləqdir. Modelin gözlənildiyi kimi və ya məsuliyyətlə işləməməsinə təsir edən bir çox amil var. Ənənəvi model performans göstəricilərinin əksəriyyəti modelin performansının kəmiyyət aqreqatlarıdır və modelin məsul AI prinsiplərini necə pozduğunu təhlil etmək üçün kifayət deyil. Bundan əlavə, maşın öyrənmə modelləri qara qutudur və onun nəticəyə necə gəldiyini başa düşmək, səhvlərini izah etmək qəlizdir. Bu kursun davamında Məsul AI panelini necə qura və sistemi izləyə biləcəyimizi öyrənəcəyik. İdarə paneli data tədqiqatçıları və AI proqramçıları üçün aşağıdakıları yerinə yetirmək üçün vahid bir alət təqdim edir: + +* **Xəta analizi**. Sistemin ədalətliliyinə və ya etibarlılığına təsir edə biləcək modelin statistik xəta paylanmasını müəyyən etmək. +* **Modelin təsviri**. Datasetlər arasında modelin performansında uyğunsuzluğun harada olduğunu aşkar etmək. +* **Data analizi**. Məlumatların paylanmasını başa düşmək və məlumatlarda ədalətlilik, əhatəlilik və etibarlılıq problemlərinə səbəb ola biləcək hər hansı potensial qərəzliyi müəyyən etmək. +* **Model tətbiq qabiliyyəti**. Modelin proqnozlarına nəyin təsir etdiyini başa düşmək. Bu modelin davranışını izah etməyə kömək edir, şəffaflıq və cavabdehlik üçün vacibdir. + +## 🚀 Məşğələ + +Zərərin baş verməsinin qabağını almaq üçün ilk növbədə biz: + +- sistem üzərində işləyən insanların müxtəlif təcrübə və istiqamətlərdən gəldiyinə əmin olaq +- cəmiyyətimizin fərqliliyini özündə əks etdirən data toplusunu yığmağa sərmayə qoyaq +- problem olduqda cavabdeh AI-ı tapmağa və düzəltməyə qadir olan daha yaxşı maşın öyrənməsi metodları tapaq + +Modelin qurulmasında və istifadəsində etibarsızlığın aşkar olduğu real həyat ssenariləri haqqında düşünün. Başqa nələri nəzərə almalıyıq? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu dərsdə siz maşın öyrənməsində ədalət və ədalətsizlik anlayışlarının bəzi əsaslarını öyrəndiniz. + +Mövzuları daha dərindən öyrənmək üçün bu seminara baxın: + +- Məsuliyyətli AI axtarışında: Besmira Nushi, Mehrnoosh Sameki və Amit Sharma tərəfindən praktikaya prinsiplərin gətirilməsi + +[![Məsuliyyətli AI alətləri: Məsul AI yaratmaq üçün açıq mənbəli çərçivə](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI (Məsuliyyətli AI) Toolbox: Məsuliyyətli AI yaratmaq üçün açıq mənbəli çərçivə") + +> 🎥 Videoya baxmaq üçün yuxarıdakı şəkilə klikləyin: RAI (Məsuliyyətli AI) Toolbox: Besmira Nushi, Mehrnoosh Sameki və Amit Sharma tərəfindən məsuliyyətli AI yaratmaq üçün açıq mənbə çərçivəsi + +Həmçinin oxuyun: + +- Microsoft-un RAI məlumat mərkəzi: [Məsuliyyətli AI məlumat mərkəzi – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoft-un FATE tədqiqat qrupu: [FATE: Süni intellektdə ədalət, cavabdehlik, şəffaflıq və etika - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Məsuliyyətli AI Toolbox GitHub reposu](https://github.com/microsoft/responsible-ai-toolbox) + +Ədalətliliyi təmin etmək üçün Azure Machine Learning alətləri haqqında oxuyun: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Tapşırıq + +[RAI Toolboxu kəşf edin](assignment.az.md) diff --git a/1-Introduction/3-fairness/translations/assignment.az.md b/1-Introduction/3-fairness/translations/assignment.az.md new file mode 100644 index 0000000000..f70d9bdf00 --- /dev/null +++ b/1-Introduction/3-fairness/translations/assignment.az.md @@ -0,0 +1,11 @@ +# RAI Toolboxu kəşf edin + +## Təlimatlar + +Bu dərsdə siz "data mühəndislərinə AI sistemlərini təhlil etmək və təkmilləşdirməkdə kömək etmək üçün açıq mənbəli, icma tərəfindən idarə olunan layihə" olan Responsible AI Toolbox haqqında öyrəndiniz. Bu tapşırıq üçün RAI Toolbox-ın [noutbuklarından](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) birini araşdırın və tapıntılarınızı yazı və ya təqdimatda bildirin. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | --------- | -------- | ----------------- | +| | Fairlearn sistemlərini, işlədilən notebooku və onun işlədilməsindən əldə edilən nəticələri müzakirə edən yazı və ya powerpoint təqdimatı təqdim olunub | Nəticəsi olmayan yazı təqdim olunmuşdur | Heç bir yazı təqdim olunmamışdır | diff --git a/1-Introduction/4-techniques-of-ML/translations/README.az.md b/1-Introduction/4-techniques-of-ML/translations/README.az.md new file mode 100644 index 0000000000..5f4961c7ae --- /dev/null +++ b/1-Introduction/4-techniques-of-ML/translations/README.az.md @@ -0,0 +1,120 @@ +# Maşın öyrənmə texnikaları + +Maşın öyrənmə modellərinin və onların istifadə etdiyi məlumatların qurulması, istifadəsi və saxlanılması prosesi bir çox digər proqramlaşdırma proseslərindən çox fərqli bir prosesdir. Bu dərsdə biz prosesin gizli tərəflərini aydınlaşdırıb bilməli olduğunuz əsas texnikaları təsvir edəcəyik. Öyrənəcəklərin: + +- Yüksək səviyyədə maşın öyrənməsinin əsasını təşkil edən prosesləri başa düşmək. +- "Modellər", "proqnozlar" və "təlim məlumatları" kimi əsas anlayışları kəşf etmək. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/?loc=az) + +[![Yeni başlayanlar üçün ML- Maşın öyrənmə texnikaları](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "Yeni başlayanlar üçün ML- Maşın öyrənmə texnikaları") + +> 🎥 Bu dərsin üzərindən keçən qısa video üçün yuxarıdakı şəkilin üzərinə klikləyin. + +## Giriş + +Yüksək səviyyədə maşın öyrənməsi (ML) prosesləri yaratmaq sənəti bir sıra addımlardan ibarətdir: + +1. **Sualla bağlı qərar verin**. Əksər ML prosesləri sadə şərti proqram və ya qaydalara əsaslanan mühərrik tərəfindən cavablandırıla bilinməyən bir sual verməklə başlayır. Bu suallar çox vaxt məlumat toplusuna əsaslanan proqnozlar ətrafında fırlanır. +2. **Məlumatları toplayın və hazırlayın**. Sualınıza cavab vermək üçün sizə data lazımdır. Məlumatlarınızın keyfiyyəti və bəzən kəmiyyəti ilkin sualınıza nə qədər yaxşı cavab verə biləcəyinizi müəyyən edəcək. Məlumatların vizuallaşdırılması bu mərhələnin vacib aspektidir. Bu mərhələ həmçinin model yaratmaq üçün datanın öyrətmə və test qrupuna bölünməsini də əhatə edir. +3. **Təlim üsulunu seçin**. Sualınızdan və məlumatların xarakterindən asılı olaraq məlumatlarınızı ən yaxşı şəkildə əks etdirmək və ona qarşı dəqiq proqnozlar vermək üçün modeli necə öyrətmək istədiyinizi seçməlisiniz. Bu, ML prosesinizin xüsusi təcrübə və çox vaxt xeyli miqdarda təcrübə tələb edən hissəsidir. +4. **Modeli öyrədin**. Öyrətmə datadan istifadə edərək siz məlumatlar daxilində qanunauyğunluqları tapmaq üçün müxtəlif alqoritmlər istifadə edəcəksiniz. Model daha yaxşı bir model yaratmaq üçün məlumatların müəyyən hissələrini digərləri üzərində imtiyaz vermək üçün tənzimlənə bilən daxili çəkilərdən istifadə edə bilər. +5. **Modeli qiymətləndirin**. Modelin necə işlədiyini görmək üçün datasetdən əvvəl istifadə edilməmiş hissələri (test datanı) istifadə edirsiniz. +6. **Parametrlərin tənzimlənməsi**. Modelinizin performansına əsaslanaraq, modeli daha yaxşı öyrətmək üçün istifadə olunan alqoritmlərin parametrlərini dəyişərək prosesi yenidən təkrar edə bilərsiniz. +7. **Proqnoz vermək**. Modelinizin dəqiqliyini yoxlamaq üçün yeni giriş datalardan istifadə edin. + +## Hansı sualı vermək lazımdır + +Kompüterlər məlumatlarda gizli modelləri aşkar etməkdə xüsusilə bacarıqlıdırlar. Bu yardım proqramı şərti əsaslı qaydalar mühərriki yaratmaqla asanlıqla cavablandırıla bilinməyən müəyyən bir mövzular haqqında sualları olan tədqiqatçılar üçün çox faydalıdır. Məsələn, bir tapşırığı nəzərə alsaq, data mühəndisi siqaret çəkənlərə qarşı siqaret çəkməyənlərin ölümü ilə bağlı özü yaratdığı model qura bilər. + +Bir çox digər dəyişənlər tənliyə gətirildikdə ML modeli keçmiş sağlamlıq tarixinə əsaslanaraq gələcək ölüm ehtimalını proqnozlaşdırmaq üçün daha səmərəli ola bilər. Daha pozitiv bir nümunə, enlik, uzunluq, iqlim dəyişikliyi, okeana yaxınlıq, cərəyanların axınının nümunələri və s. daxil olan məlumatlara əsaslanaraq müəyyən bir yerdə aprel ayı üçün hava proqnozları verilə bilər. + +✅ [Bu təqdimatda](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) ML istifadə edilərək keçmiş hava məlumatları analizi istifadə edilərək hava modelinin qurulmasını təsvir edilir. + +## Model qurmaqdan əvvəl tapşırıqlar + +Modelinizi qurmağa başlamazdan əvvəl yerinə yetirməli olduğunuz bir neçə tapşırıq var. Sualınızı yoxlamaq və modelin proqnozlarına əsaslanan fərziyyə formalaşdırmaq üçün bir neçə elementi müəyyən edib sazlamalısınız. + +### Data + +Sualınıza hər cür əminliklə cavab verə bilmək üçün sizə düzgün tipdə və çox miqdarda məlumat lazımdır. Bu nöqtədə etməli olduğunuz iki şey var: + +- **Data toplayın**. Datanın təhlilində ədalətlə bağlı əvvəlki dərsi nəzərə alaraq ehtiyatla toplayın. Bu datanın mənbələrində malik ola biləcək hər hansı bir qərəzdən xəbərdar olun və mənşəyini sənədləşdirin. + +- **Data hazırlayın**. Datanın hazırlanması prosesində bir neçə addım var. Müxtəlif mənbələrdən gəldiyi üçün datanı toplamaq və normallaşdırmaq lazım ola bilər. Verilənlərin keyfiyyətini və kəmiyyətini müxtəlif üsullarla yaxşılaşdıra bilərsiniz, misal üçün söz kimi yazılmış ədədləri rəqəmlərə keçirmək ([Klasterləşdirmə](../../../5-Clustering/1-Visualize/translations/README.az.md) bölməsində etdiyimiz kimi). Siz həmçinin əldə olunmuş məlumatlardan yeni məlumatlar da yarada bilərsiniz. ([Qruplaşdırma](../../../4-Classification/1-Introduction/translations/README.az.md) bölməsində etdiyimiz kimi). Datanı təmizləyə və dəyişə bilərsiniz ([Veb tətbiq](../../../3-Web-App/translations/README.az.md) dərsində etdiyimiz kimi). Yekun olaraq siz öyrətmə texnikasından asılı olaraq məlumatları təsadüfi seçimlərlə əvəzləyə və ya yerlərini qarışdıra bilərsiniz. + +✅ Datanı yığdıqdan və emal etdikdən sonra vaxt ayırıb fikrinizdə tutduğunuz suala uyğun işləri gördüyünüzdən əmin olun. [Klasterləşdirmə](../../../5-Clustering/1-Visualize/translations/README.az.md) dərslərində öyrəndiyimiz kimi bəzən yığdığımız məlumatlar bizim tapşırığımız üçün yaxşı nəticələr göstərməyə bilər! + +### Xüsusiyyətlər və hədəf + +[Xüsusiyyət](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) datanızın ölçülə bilən parametridir. Bir çox verilənlər bazasında o, 'tarix' 'ölçü' və ya 'rəng' adları ilə sütun başlığı kimi ifadə edilir. Kodda adətən `X` kimi təqdim olunan xüsusiyyət dəyişəniniz modeli öyrətmək üçün istifadə olunacaq giriş dəyişənini təmsil edir. + +Hədəf, proqnozlaşdırmağa çalışdığınız bir şeydir. Kodda adətən `y` kimi təqdim olunan hədəf məlumatlarınız haqqında soruşmağa çalışdığınız sualın cavabını təmsil edir: dekabr ayında hansı **rəng** balqabaq ən ucuz olacaq? San Fransiskoda hansı məhəllələrdə ən yaxşı daşınmaz əmlakın **qiyməti** neçə olacaq? Bəzən hədəfə etiket atributu da deyilir. + +### Xüsusiyyət üçün dəyişən seçmək + +🎓 **Xüsusiyyət seçimi və xüsusiyyətlərin çıxarılması**. Model qurarkən hansı dəyişəni seçmək lazım olduğunu necə bilirsiniz? Çox güman ki, ən effektiv model üçün düzgün dəyişənləri seçmək üçün **xüsusiyyət seçimi** və ya **xüsusiyyət çıxarılması** prosesindən keçəcəksiniz. Bununla belə, onlar eyni şey deyillər: "**Xüsusiyyətlərin çıxarılması** orijinal xüsusiyyətlərin funksiyalarından yeni xüsusiyyətlər yaradır, halbuki **xüsusiyyət seçimi** xüsusiyyətlərin alt dəstini qaytarır." ([mənbə](https://wikipedia.org/wiki/Feature_selection)) + +### Data vizuallaşdırılması + +Data mühəndisinin alət dəstinin mühüm cəhəti Seaborn və ya MatPlotLib kimi bir neçə mükəmməl kitabxanadan istifadə edərək məlumatları vizuallaşdırmaq gücüdür. Verilənlərinizi vizual şəkildə təmsil etmək sizə istifadə edə biləcəyiniz gizli uyğunluqları aşkar etməyə imkan verə bilər. Vizuallaşdırmalarınız sizə qərəzli və ya balanssız məlumatları da aşkar etməyə kömək edə bilər ([Qruplaşdırma](../../../4-Classification/1-Introduction/translations/README.az.md) bölməsində öyrəndiyimiz kimi). + + +### Dataseti bölün + +Təlimdən əvvəl verilənlər bazanızı məlumatları yaxşı təmsil etməsini ödəyən qeyri-bərabər ölçülü iki və ya daha çox hissəyə bölmək lazımdır. + +- **Öyrətmə**. Modelinizi öyrətmək üçün uyğun seçilmiş məlumat dəstinin bir hissəsidir. Bu dəst orijinal datasetin əksəriyyətini təşkil edir. +- **Test**. Test verilənlər toplusu qurulmuş modelin performansını təsdiqləmək üçün istifadə etdiyiniz, adətən orijinal məlumatlardan seçilən müstəqil datasetdir. +- **Doğrulama**. Doğrulama dəsti modeli təkmilləşdirmək üçün modelin hiperparametrlərini və ya arxitekturasını tənzimləmək üçün istifadə etdiyiniz daha kiçik müstəqil nümunələr qrupudur. Məlumatınızın ölçüsündən və verdiyiniz sualdan asılı olaraq bu üçüncü dəsti qurmağa ehtiyacınız olmaya bilər ([Zaman seriyalarının proqnozlaşdırılması](../../../7-TimeSeries/1-Introduction/translations/README.az.md) bölməsində qeyd etdiyimiz kimi). + +## Model qurmaq + +Sizin hədəfiniz öyrətmə datasından və ya datanın statistik təsvirindən istifadə edərək model qurmaq və onu müxtəlif alqoritmlərlə **öyrətməkdir**. Modelin öyrədilməsi onun məlumatlara əlçatan edir və imkan verir ki, başa düşdüyü və kəşf etdiyi qanunauyğunları yoxlasın, qəbul etsin və ya imtina etsin. + +### Öyrənmə üsulunu seçin + +Sualınızdan və məlumatlarınızın xarakterindən asılı olaraq, siz onu öyrətmək üçün bir üsul seçəcəksiniz. Bu kursda istifadə etdiyimiz [Scikit-learn's sənədləri](https://scikit-learn.org/stable/user_guide.html) ilə addımlayaraq siz bir modeli öyrətməyin bir çox yolunu araşdıra bilərsiniz. Təcrübənizdən asılı olaraq ən yaxşı modeli yaratmaq üçün bir neçə fərqli metodu sınamalı ola bilərsiniz. Çox güman ki, siz data mühəndislərinin modellərin performansını ölçdükləri yollardan keçəcəksiniz. Bunlara modeli istifadə edilməmiş datalarla öyrətmə, dəqiqliyin yoxlama, qərəz və digər keyfiyyəti aşağı sala biləcək problemləri aşkarlama yolları aiddir. Bunların sonunda isə siz ən uyğun öyrənmə metodunu seçmiş olacaqsınız. + +### Modeli öyrətmək + +Öyrətmə datanızı hazır tutmaqla siz modelinizi "uyğunlaşdırmağa" hazırsınız. Siz görəcəksiniz ki, bir çox ML kitabxanalarında 'model.fit' funksiyası var - məhz burada siz xüsusiyyət dəyişənlərini məlumat toplusu kimi (adətən 'X') və hədəf dəyişənini (adətən 'y') ötürəcəksiniz. + +### Modeli qiymətləndirin + +Öyrətmə prosesi başa çatdıqdan sonra (böyük modeli hazırlamaq üçün bir çox təkrarlamalar və ya “epoxalar” tələb oluna bilər), siz modelin keyfiyyətini ölçmək üçün test məlumatlarından istifadə edə biləcəksiniz. Bu məlumat modelin əvvəllər təhlil etmədiyi ilkin məlumatların bir hissəsidir. Siz modelinizin keyfiyyətinə dair göstəricilər cədvəlini çap edə bilərsiniz. + +🎓 **Modelin uyğunlaşdırılması** + +Maşın öyrənməsi kontekstində model uyğunluğu modelin əsas funksiyasının dəqiqliyinə istinad edir. Çünki burada model tanış olmayan məlumatları təhlil etməyə çalışır. + +🎓 **Az uyğunlaşdırılma** və **çox uyğunlaşdırılma** modelin keyfiyyətini aşağı salan ümumi problemlərdir, burada model ya çox uyğundur, ya da kifayət qədər deyildir. Bunlar modelin təxminlərini ya əvvəlki məlumalarla çox yaxın etmətə çalışır, ya da təlim məlumatlarından uzaq edir. Çox uyğunlaşdırılmış modellər təlim məlumatlarının xüsusiyyətlərini və xətalı hissələri çox yaxşı öyrənmişdir. Az uyğunlaşdırılmış modelin dəqiqliyi isə həm təlim məlumatlarını az dəqiqliklə öyrənmiş qədər, həm də heç öyrənməmiş qədər az olur. + +![çox uyğunlaşdırılmış model](../images/overfitting.png) +> [Jen Looper](https://twitter.com/jenlooper) tərəfindən infoqrafik + +## Parametrlərin tənzimlənməsi + +İlkin öyrətmə tamamlandıqdan sonra modelin keyfiyyətini müşahidə edin və onun “hiperparametrlərini” tənzimləməklə təkmilləşdirməyi düşünün. Proses haqqında bu [sənədlərdən](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) ətraflı oxuya bilərsiniz. + +## Proqnoz + +Bu anda siz modelin dəqiqliyini yoxlamaq üçün tamamilə yeni məlumatlardan istifadə edə bilərsiniz. "Tətbiqi" ML konfiqurasiyalarında siz veb mühitdə istifadəçilərdən giriş məlumatlarını alaraq dəyişənlər kimi modelinizə daxil edə və nəticəni hesablaya bilərsiniz. + +Bu dərslərdə siz data mühəndisinin istifadə etdiyi jestlərin hamısını - hazırlama, qurma, sınaqdan keçirmə, qiymətləndirmə və proqnozlaşdırma üçün bu addımlardan necə istifadə edəcəyinizi kəşf edəcəksiniz və bu sizin ML mühəndisi olmaq üçün öyrənmə səyahətinizdə kömək edəcək. + +--- + +## 🚀 Məşğələ + +ML təcrübəçisinin addımlarını əks etdirən proses sxemini çəkin. Hazırda prosesin gedişində özünüzü harada görürsünüz? Harada çətinlik çəkəcəyinizi proqnozlaşdırırsınız? Sizə asan görünən nədir? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +İnternetdə data mühəndisi ilə gündəlik iş həyatları müzakirə edilən müsahibələrini axtarın. [Burada](https://www.youtube.com/watch?v=Z3IjgbbCEfs) biri var. + +## Tapşırıq + +[Data mühəndisi ilə müsahibə](assignment.az.md) \ No newline at end of file diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.az.md b/1-Introduction/4-techniques-of-ML/translations/assignment.az.md new file mode 100644 index 0000000000..e66bc55c64 --- /dev/null +++ b/1-Introduction/4-techniques-of-ML/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Data mühəndisi ilə müsahibə + +## Təlimatlar + +Öz şirkətində, dost qruplarında və ya qrup yoldaşlarından peşəkar olaraq data mühəndisi kimi işləyən kiminləsə danış. Onların gündəlik işləri barədə 500 sözlük yazı yaz. Onlar kiçik sahədə ixtisaslaşıblar, yoxsa bir çox sahələri əhatə edirlər? + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | --------- | -------- | ----------------- | +| | Yazı düzgün uzunluqdadır, mənbələr qeyd olunub və .doc faylı kimi təqdim olunub | Yazı tələb olunan uzunluqda deyil və ya zəif hazırlanıb | Yazı təqdim olunmayıb | \ No newline at end of file diff --git a/1-Introduction/translations/README.az.md b/1-Introduction/translations/README.az.md new file mode 100644 index 0000000000..2d665a684c --- /dev/null +++ b/1-Introduction/translations/README.az.md @@ -0,0 +1,23 @@ +# Maşın öyrənməsinə giriş + +Kurikulumun bu hissəsində siz maşın öyrənməsi sahəsinin əsas fundamental konseptləri, onların tarixi və tədqiqatçıların onlarla işləmək üçün istifadə etdikləri texnikalarla tanış olacaqsınız. Gəlin Maşın Öyrənməsinin (ML) bu yeni dünyasını birlikdə kəşf edək! + +![globe](../images/globe.jpg) +>Unsplash platformasında Bill Oxford tərəfindən təsvir + +### Dərslər + +1. [Maşın öyrənməsinə giriş](../1-intro-to-ML/translations/README.az.md) +1. [Maşın öyrənmə tarixi](../2-history-of-ML/translations/README.az.md) +1. [Maşın öyrənmə və ədalət](../3-fairness/translations/README.az.md) +1. [Maşın öyrənmə texnikaları](../4-techniques-of-ML/translations/README.az.md) + +### Təşəkkürlər + +"Maşın öyrənməsinə giriş" [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) və [Jen Looper](https://twitter.com/jenlooper) daxil olan komanda tərəfindən ♥️ lə yazılmışdır + +"Maşın öyrənməsi tarixi" [Jen Looper](https://twitter.com/jenlooper) və [Amy Boyd](https://twitter.com/AmyKateNicho) tərəfindən ♥️ lə yazılmışdır + +"Maşın öyrənməsi və ədalət" [Tomomi Imura](https://twitter.com/girliemac) tərəfindən ♥️ lə yazılmışdır + +"Maşın öyrənməsi texnikaları" [Jen Looper](https://twitter.com/jenlooper) və [Chris Noring](https://twitter.com/softchris) tərəfindən ♥️ lə yazılmışdır \ No newline at end of file diff --git a/2-Regression/1-Tools/translations/README.az.md b/2-Regression/1-Tools/translations/README.az.md new file mode 100644 index 0000000000..4eeaa7a767 --- /dev/null +++ b/2-Regression/1-Tools/translations/README.az.md @@ -0,0 +1,224 @@ +# Reqressiya modellərinə Python və SciKit-learn ilə giriş + +![Reqressiyaların eskizlərlə xülasəsi](../../../sketchnotes/ml-regression.png) + +> [Tomomi Imura](https://www.twitter.com/girlie_mac) tərəfindən çəkilmiş eskiz + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/?loc=az) + +### [Bu dərs R proqramlaşdırma dili ilə də mövcuddur!](../solution/R/lesson_1-R.ipynb) + +## Giriş + +Bu 4 dərsdə siz reqressiya modellərinin necə qurulmasını öyrənəcəksiniz. Qısa olaraq bu modellərin nə üçün olduğunu müzakirə edəcəyik. Amma ilk öncə, prosesi başlatmaq üçün lazım olan bütün alətlərinizin olduğundan əmin olun. + +Bu dərsdə siz: +- Kompüterinizi lokal maşın öyrənməsi tapşırıqlarını icrası üçün konfiqurasiya etməyi +- Jupyter notbuklarla işləməyi +- SciKit-learn quraşdırmağı və istifadə etməyi +- Tətbiqi tapşırıqlarla xətti reqressiyanı kəşf etməyi + +öyrənəcəksiniz. + +## Quraşdırılma və Konfiqurasiyalar + +[![Yeni başlayanlar üçün maşın öyrənməsi - Maşın Öyrənməsi modellərini qurmaq üçün alətlərinizi hazır vəziyyətə gətirin](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "Yeni başlayanlar üçün maşın öyrənməsi - Maşın Öyrənməsi modellərini qurmaq üçün alətlərinizi hazır vəziyyətə gətirin") + +> 🎥 Kompüterin ML üçün konfiqurasiyasını izah edən qısa video üçün yuxarıdakı şəkilin üzərinə klikləyin. + +1. **Python yükləyin**. Kompüterinizə [Python](https://www.python.org/downloads/) yükləndiyinizdən əmin olun. Siz data elmi və maşın öyrənməsi tapşırıqlarının çoxu üçün Python-dan istifadə edəcəksiniz. Bəzi istifadəçilər üçün quraşdırmanı daha asan etmək məqsədilə yaradılmış faydalı [Python Kodlaşdırma Paketləri](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) də mövcuddur. + + Amma istifadəsindən asılı olaraq Python üçün bəzən bir, bəzən isə digər versiyası tələb oluna bilər. Buna görə, [virtual mühitdə](https://docs.python.org/3/library/venv.html) işləmək daha məqsədəuyğundur. + +2. **Visual Studio Code yükləyin**. Kompüterinizə [Visual Studio Code](https://www.python.org/downloads/) yükləndiyindən əmin olun. Sadə formada [Visual Studio Code yükləmək](https://code.visualstudio.com/) üçün bu təlimatları izləyə bilərsiniz. Bu kursda Python-u Visual Studio Code vasitəsilə istifadə edəcəyiniz üçün, ola bilər ki, Visual Studio Code-u Python proqramlaşdırma üçün necə [konfiqurasiya](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) edəcəyinizi öyrənmək istəyəsiniz. + + > Bu [öyrənmə modulları](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) siyahısından istifadə etməklə özünüzü Python-la tanış edin. + > + > [![Visual Studio Code-la Python quraşdırın](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Visual Studio Code-la Python quraşdırın") + > + > 🎥 Python-un Visual Studio Code-da istifadəsi ilə bağlı video üçün yuxarıdakı şəkilə klikləyin. + +3. **Scikit-learn yükləyin**. [Bu təlimatları](https://scikit-learn.org/stable/install.html) izləyərək yükləyin. Python 3-ü istifadə etdiyinizdən əmin olmalı olduğunuz üçün, virtual mühitdən istifadə etməyinizi tövsiyyə edirik. Qeyd olaraq onu deyək ki, əgər bu kitabxananı M prosessorlu Mac-lər üçün yükləyirsinizsə, səhifənin yuxarısında qeyd olunmuş linkdə xüsusi təlimatlar mövcuddur. + +4. **Jupyter Notebooks yükləyin**. [Jupyter paketini yükləməyiniz](https://pypi.org/project/jupyter/) lazım olacaq. + +## ML tərtibatı üçün mühitiniz + +Python kodları yazmaq və maşın öyrənməsi modellərini qurmanız üçün siz **notbuklardan** istifadə edəcəksiniz. Bu fayl tipi data mühəndisləri arasında geniş yayılmış alətdir və `.ipynb` uzantısı və yaxud suffiksi ilə ayırd oluna bilirlər. + +Notbuklar proqramçılara kod yazmaq ilə yanaşı, həm kodda qeydlər etmək, həm də kodla bağlı dokumentasiya yazmağa imkan verdiyi üçün təcrübi və ya araşdırma yönümlü proyektlər üçün çox yararlı olan interaktiv bir mühitdir. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Maşın Öyrənməsi modellərini yaratmağa başlamaq üçün Jupyter Notebooks quraşdırın](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "Yeni başlayanlar üçün maşın öyrənməsi - Maşın Öyrənməsi modellərini yaratmağa başlamaq üçün Jupyter Notebooks quraşdırın") + +> 🎥 Bu tapşırığın üzərindən keçən qısa video üçün yuxarıdakı şəkilin üzərinə klikləyin. + +### Tapşırıq - notbuklarla iş + +Bu qovluqda siz _notebook.ipynb_ adlı faylı görəcəksiniz. + +1. _notebook.ipynb_ faylını Visual Studio Code-da açın. + + Jupyter serveri Python 3+ ilə birgə başlayacaq. Dəftərçənin içərisində kod hissələrini icra edəcək `başlat` sahəsini görəcəksiniz. "Play" düyməsinə bənzəyən ikonu seçərək kod bloklarını icra edə bilərsiniz. + +2. `md` simgəsini seçin və əvvəlcə "markdown", ardınca da **# Notbuka xoş gəlmisiniz** mətnini əlavə edin. + + Daha sonra, bir az Python kodunuzu əlavə edin. + +3. Kod blokunda **print('hello notebook')** yazın. +4. Kodu başlatmaq üçün ox simgəsini seçin. + + Bu ifadə ekranda çap olunacaq: + + ```output + hello notebook + ``` + +![Açıq notbuk ilə VS Code](../images/notebook.jpg) + +Notbuku sənədləşdirmək üçün öz kodunuza rəylər əlavə edə bilərsiniz. + +✅ Bir dəqiqəliyinə veb proqramçısı ilə data mühitinin iş mühitinin necə fərqləndiyi barəsində düşünün. + +## Scikit-learn ilə işin icrası + +Artıq lokal mühitinizi quraşdırdığınız və özünüzü Jupyter notbuklarına öyrəşdirdiyiniz üçün, keçək özümüzü Scikit-learn-lə(`science` sözündəki `sci` kimi tələffüz edin) də tanış edək. Scikit-learn ML tapşırıqlarını həll etmənizdə köməkçi olacaq [geniş API](https://scikit-learn.org/stable/modules/classes.html#api-ref) təqdim edir. + +[Vebsaytlarına](https://scikit-learn.org/stable/getting_started.html) görə, "Scikit-learn açıq mənbə lisenziyalı, nəzarətli və nəzarətsiz öyrənməni dəstəkləyən maşın öyrənməsi kitabxanasıdır. O həmçinin model uyğunlaşdırılması, datanın ön-emalı, model seçilməsi və dəyərləndirilməsi kimi bir çox alətləri də təqdim edir. + +Bu kursda siz, bizim 'ənənəvi maşın öyrənməsi' adlandırdığımız tapşırıqları maşın öyrənməsi modelləri qurmaqla həll etmək üçün Scikit-learn və digər alətlərdən istifadə edəcəksiniz. + +Scikit-learn, modelləri qurmaq və onların istifadəyə yararlılığının dəyərləndirməsini asanlaşdırır. O ədədi məlumatlar üzərinə fokusludur və öyrənmə aləti olaraq istifadə olunması üçün bir neçə hazır məlumat massivinə məxsusdur. Əlavə olaraq daxilində tələbələrin təcrübə etməsi üçün öncədən qurulmuş bir neçə model də mövcuddur. Gəlin əvvəlcədən paketlənmiş dataların yüklənməsini və bəzi əsas datalarla Scikit-learn ilə öncədən qurulmuş qiymətləndirmə ML modelindən istifadə edilməsini araşdıraq. + +## Tapşırıq - sizin ilk Scikit-learn notbukunuz + +> Bu təlimat Scikit-learn-ün vebsaytındakı [xətti reqressiya modelindən](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) ilhamlanmışdır. + +[![Yeni başlayanlar üçün ML - Python-da ilk xətti reqressiya proyektiniz](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "Yeni başlayanlar üçün ML - Python-da ilk xətti reqressiya proyektiniz") + +> 🎥 Bu tapşırığın üzərindən keçən qısa video üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Bu dərslə əlaqəli olan _notebook.ipynb_ faylında 'zibil qutusu' simgəsinə klikləyərək bütün xanaları təmizləyin. + +Bu bölmədə siz Scikit-learn-də öyrənmə məqsədi üçün əvvəlcədən hazırlanmış şəkərli diabet xəstələri ilə bağlı olan kiçik data seti ilə işləyəcəksiniz. Maşın öyrənməsi modelləri dəyişənlərin kombinasiyası əsasında hansı xəstələrin müalicəyə daha yaxşı cavab verə biləcəyini müəyyən etməyə kömək edə bilər. Hətta ən sadə reqressiya modeli belə vizuallaşdırıldıqda nəzəri klinik sınaqlarınızı təşkil etməkdə sizə kömək edəcək dəyişənlər haqqında məlumat verə bilər. + +✅ Reqressiya metodlarının bir çox növü mövcud olsa da, hansını seçməyiniz axtardığınız cavabdan asıldır. Əgər insanın yaşına uyğun boyunun hündürlüyünü təxmin etmək istəyirsinizsə, bu məlumat ***ədədi dəyərə** malik olduğu üçün xətti reqressiyadan istifadə edə bilərsiniz. Yox əgər hansısa mətbəxin veqan hesab edilib-edilməməli olduğunu tapmaqla maraqlanırsınızsa, deməli **kateqoriya mənimsədilməsini** axtarırsınız. Bunun üçün logistik reqressiyadan istifadə edə bilərsiniz. Logistik reqressiyalar haqqında sonradan daha çox öyrənəcəksiniz. Məlumatlarla bağlı soruşa biləcəyiniz suallar və bu metodlardan hansının daha uyğun ola biləcəyi ilə bağlı isə biraz düşünün. + +Gəlin bu tapşırıqla başlayaq. + +### Kitabxanaları köçürün + +Bu tapşırıq üçün biz bəzi kitabxanaları köçürəcəyik: +- **matplotlib** lazımlı [qrafikləşdirmə alətidir](https://matplotlib.org/) və biz ondan xətti qrafikləri yaratmaq üçün istifadə edəcəyik. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python-da ədədi dataların emalı üçün faydalı bir kitabxanadır. +- **sklearn**. Bu isə [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) kitabxanasıdır. + +Tapşırıqda sizə kömək olması üçün kitabxanalardan bəzilərini köçürün. + +1. Aşağıdakı kodu yazaraq köçürmələri edək: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Yuxarıda siz `matplotlib`-i, `numpy`-ı və `sklearn`-dən `datasets`, `linear_model` və `model_selection`-ı köçürürsünüz. `model_selection` datanı öyrədilmə və test massivlərinə bölmək üçün istifadə olunur. + +### Şəkərli diabet data seti + +Öncədən qurulmuş olan [şəkərli diabet data setinə](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 10 xüsusiyyət dəyişəni olmaqla bu xəstəliklə bağlı 442 nümunə daxildir. Xüsusiyyət dəyişənlərinin bəziləri aşağıdakılardır: +- age: illər ilə yaş +- bmi: bədənin çəki indeksi +- bp: eortalama qan təzyiqi +- s1 tc: T-hüceyrələri (ağ qan hüceyrələrinin növü) + +✅ Bu data setinə şəkərli diabet haqqında araşdırma etmək üçün önəmli bir xüsusiyyət dəyişəni olaraq 'cins' anlayışı da daxildir. Əksər tibbi data setinə bu tip ikili sinifləndirmə daxil edilir. Bir qədər bu formada kateqoriyalaşdırılmanın əhalinin bir qismini müalicələrdən necə kənarda tuta biləcəyi barəsində düşünün. + +İndi isə, X və y datalarını yükləyək. + +> 🎓 Yadda saxlayın ki, bu nəzarətli öyrənmə olduğuna görə 'y' adlı hədəfə ehtiyacımız var. + +Yeni kod xanasında, şəkərli diabet data setini `load_diabetes()` çağıraraq yükləyin. Verilən `return_X_y=True`, `X`-in bir data matrisi, `y`-in isə reqressiya hədəfi olacağını göstərir. + +1. Data matrisinin formasını və ilk elementini göstərmək üçün bir neçə "print" komandası əlavə edin: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Cavab olaraq aldığınız şey - *tuple* adlanır. Etdiyiniz isə *tuple*-un ilk iki dəyərini sıra ilə `X` və `y`-ə mənimsətməkdir. Tuple haqqında ətraflı [buradan](https://wikipedia.org/wiki/Tuple) öyrənin. + + Gördüyünüz kimi bu məlumat, 10 elementli massivi olan 442 sətirdən ibarətdir: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Data və reqressiya hədəfi arasındakı əlaqə barəsində biraz düşünün. Xətti reqressiya X xüsusiyyəti ilə y dəyişəni arasındakı əlaqəni təxmin edir. Dokumentasiyada şəkərli diabet data setindəki [hədəfi](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) tapa bilərsiniz? Bu data massivi hədəf nəzərdə tutulduqda nəyi təsvir edir? + +2. Növbəti olaraq qrafiki təsvir üçün bu data setinin 3-cü sütununu seçin. Bunu `:` operatoru ilə bütün sıraları seçərək və daha sonra `index(2)` ilə bütün sütunları seçərək edə bilərsiniz. Əlavə olaraq siz datanı qrafiki təsvir üçün tələb olunduğuna görə `reshape(n_rows, n_columns)` istifadə edərək 2 ölçülü massiv formasına də sala bilərsiniz. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ İstənilən vaxt datanın quruluşunu yoxlamaq üçün məlumatı ekrana çap edə bilərsiniz. + +3. Artıq qrafikləşdirilə bilən datanız olduğu üçün maşının bu data setindəki rəqəmlər arasındakı məntiqi bölgünü təyin etməyə yardımçı ola bilib-bilmədiyini görə bilərsiniz. Bunun üçün hər iki (X) və hədəf (y) datalarını test və öyrətmə setlərinə ayırmağınıza ehtiyacınız var. Scikit-learn-ün bunu etmək üçün sadə bir yolu var; istənilən nöqtədə test datanızı ayıra bilərsiniz. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Artıq modelinizi öyrətmək üçün hazırsınız! Xətti reqressiya modelinizi yükləyin və onu `model.fit()` istifadə edərək, X və y öyrətmə massivləri ilə öyrədin: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` TensorFlow kimi birçox ML kitabxanasında görə biləcəyiniz bir funksiyadır. + +5. Daha sonra, test datasından və `predict()` funksiyasından istifadə etməklə proqnoz yaradın. Bu proqnoz data qrupları arasındakı xəttin çəkilməsi üçün istifadə olunacaq. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Artıq datanı qrafiklə göstərməyin vaxtıdır. Matplotlib bu tapşırıq üçün çox uyğun bir alətdir. Bütün X və y test məlumatlarının paylanma qrafikini yaradın və modelin data qrupları arasında ən uyğun yerə xətti çəkmək üçün proqnozdan istifadə edin. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![şəkərli diabetlə bağlı nöqtələri göstərən paylanma qrafiki](../images/scatterplot.png) + + ✅ Bu hissədə nə baş verdiyi barədə biraz düşünün. Düz xətt çoxlu kiçik data nöqtələrinin arasından keçir. Amma tam olaraq nə baş verir? Yeni, görünməz məlumat nöqtəsinin qrafikin y oxuna nisbətən harada olacağını proqnozlaşdırmaq üçün bu xəttdən necə istifadə edə biləcəyinizi düşünə bilirsinizmi? Bu modelin praktiki istifadəsini sözlə ifadə etməyə çalışın. + +İlk reqressiya modelinizi qurduğunuz, onunla proqnoz yaradıb və təsvir etdiyiniz üçün təbriklər! + +## 🚀 Məşğələ + +Bu data setindən fərqli bir dəyişən üçün qrafik çəkin. İpucu: bu sətirə düzəliş edin: `X = X[:,2]`. Data massivinin hədəfi verilmək şərti ilə şəkərli diabetin xəstəlik olaraq inkişafı ilə bağlı nələri tapa bilərsiniz? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu təlimatda çoxdəyişənli və yaxud çoxlu xətti reqressiya yerinə,sadə xətti reqressiya ilə işlədiniz. Bu metodlar arasındakı fərqlər barəsində oxuyun və ya [bu videoya](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) nəzər salın. + +Reqressiya konsepti haqqında oxuyun və bu texnika vasitəsilə hansı tip suallara cavab tapıla bildiyi barəsində düşünün. Anlayışınızı dərinləşdirmək üçün bu [təlimatı](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) keçin. + +## Tapşırıq + +[Fərqli bir data seti](assignment.az.md) \ No newline at end of file diff --git a/2-Regression/1-Tools/translations/assignment.az.md b/2-Regression/1-Tools/translations/assignment.az.md new file mode 100644 index 0000000000..c269a9fb6d --- /dev/null +++ b/2-Regression/1-Tools/translations/assignment.az.md @@ -0,0 +1,13 @@ +# Scikit-learn ilə reqressiya + +## Təlimatlar + +Scikit-learn-dəki [Linnerud data massivinə](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) nəzər salın. Bu data massivinin bir neçə [hədəfi](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset) mövcuddur: 'O fitnes klubundakı 20 orta yaşlı kişidən toplanmış 3 tapşırıq(data) və 3 psixoloji(hədəf) dəyişəndən ibarətdir'. + +Öz sözlərinizlə bel xətti ilə oturub-durma hərəkətinin edilmə sayı arasındakı əlaqəni çəkəcək reqressiya modelinin necə yaradılmasını təsvir edin. Data massivindəki digər data nöqtələri üçün də eyni şeyi edin. + +## Qiymətləndirmə + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| Təsviri paraqraf göndərin | Ətraflı izah edilmiş paraqraf göndərildi | Bir neçə cümlə göndərildi | İzah verilmədi | \ No newline at end of file diff --git a/2-Regression/2-Data/translations/README.az.md b/2-Regression/2-Data/translations/README.az.md new file mode 100644 index 0000000000..a0ac76daf1 --- /dev/null +++ b/2-Regression/2-Data/translations/README.az.md @@ -0,0 +1,209 @@ +# Scikit-learn ilə reqressiya modelləri qurun: datanı hazırlayın və vizuallaşdırın + +![Data vizuallaşdırılması barədə infoqraf](../images/data-visualization.png) + +[Dasani Madipalli](https://twitter.com/dasani_decoded) tərəfindən yaradılmış infoqraf + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/?loc=az) + +> ### [Bu dərs R proqramlaşdırma dili ilə də mövcuddur!](../solution/R/lesson_2.html) + +## Giriş + +Artıq Scikit-learn ilə maşın öyrənməsi modelləri qurmaq üçün lazım olan alətləri quraşdırdığınız üçün datanız haqqında suallar soruşmağa hazırsınız. Data ilə işləyərkən və maşın öyrənməsi həlləri tətbiq edərkən data setinizin potensialını düzgün formada ortaya çıxarmağınız üçün düzgün sualı necə verməli olduğunuzu başa düşmək çox vacibdir. + +Bu dərsdə siz: +- Datanızı model qurulması necə hazırlamağı +- Matplotlib data vizuallaşdırması üçün necə istifadə etməyi + +öyrənəcəksiniz. + +## Datanızla bağlı sualı düzgün formada soruşmaq + +Cavablayacağınız sual sizin hansı növ ML alqoritmlərindən faydalanacağınızı müəyyən edəcək. Alacağınız cavabın keyfiyyəti isə bilavasitə datanızın təbiətindən asılı olacaqdır. + +Bu dərs üçün verilmiş [dataya](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) nəzər salın. Bu .csv faylını VS Code ilə aça bilərsiniz. Sürətli bir gözdən keçirmə ilə məlum olur ki, fayl boşluqlar, mətn və ədədi dataların qarışığından ibarətdir. Bundan əlavə, cədvəldə 'sacks', 'bins' və digər dəyərlərin qarışığından ibarət 'Package' adlı qəribə bir sütun da mövcuddur. Data, əslində, biraz qarışıqdır. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Data massivinin analiz olunması və təmizlənməsi](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "Yeni başlayanlar üçün maşın öyrənməsi - Data massivinin analiz olunması və təmizlənməsi") + +> 🎥 Bu dərs üçün datanın hazırlanmasının üzərindən keçən qısa video üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Faktiki olaraq, ML modeli qurmaq üçün tamamilə istifadəyə hazır bir data seti ilə təmin olunmaq o qədər də geniş yayılmayıb. Bu dərsdə siz xam data setini standart Python kitabxanalarının köməyi ilə necə hazır formaya gətirəcəyinizi öyrənəcəksiniz. Bundan əlavə, həmin dataların vizuallaşdırma texnikalarını da öyrənmiş olacaqsınız. + +## Araşdırma: 'balqabaq bazarı' + +Bu qovluqda yerləşən `data` adlı qovluğunda siz, şəhərlər üzrə sıralanmış balqabaqlar bazarı haqqında 1757 sətirdən ibarət [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) faylını tapacaqsınız. Bu xam data Amerika Birləşmiş Ştatlarının Kənd Təsərrüfatı Nazirliyi tərəfindən dərc olunmuş [Xüsusi Bitkilər Terminal Bazarlarının Standart Hesabatlarından](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) götürülmüşdür. + +### Datanın hazırlanması + +Bu data publik domendə yerləşir. O Amerika Birləşmiş Ştatlarının Kənd Təsərrüfatı Nazirliyinin vebsaytından şəhərlər üzrə ayrı-ayrı fayllar olaraq yüklənilə bilər. Çoxlu ayrı-ayrı fayllardan yayınmaq üçün biz bütün şəhərlər üzrə olan dataları bir cədvələ yerləşdirmişik. Bununla az da olsa datanı _hazırlamışıq_. Növbəti addımda gəlin məlumatları daha diqqətlə nəzərdən keçirək. + +### Balqabaqlar datası - ilkin nəticələr + +Bu məlumatlar barədə nələr diqqətinizi çəkdi? Artıq siz faylda kəsb etdiyi mənanı başa düşməli olduğunuz sözlər, ədədlər, boşluqlar və qəribə dəyərlərin qarışığını görmüsünüz. + +Reqressiya metodundan istifadə edərək, bu data ilə bağlı hansı sualları soruşa bilərsiniz? Məsələn, "Müəyyən bir ay üçün balqabaqların satış qiymətini təxmin edin". Dataya yenidən nəzər yetirdikdə məlum olur ki, bu tapşırıq üçün lazım olan data strukturunu qurmaq üçün onun üzərində bəzi dəyişikliklər edilməlidir. + +## Tapşırıq - balqabaqlar datasını analiz edin + +Gəlin bu balqabaqlar datasını analiz etmək və hazır formaya gətirmək üçün [Pandas](https://pandas.pydata.org/), (açılışı `Python Data Analysis` kimidir) alətindən istifadə edək. + +### Birinci, boş buraxılmış tarixləri yoxlayın + +Boş buraxılan tarixləri yoxlamaq üçün ilk öncə bir neçə addımı icra etməliyik: + +1. Tarixləri ay formatına keçirdək (bu tarixlər ABŞ tarixləri olduğu üçün onların formatı `MM/DD/YYYY` kimidir). +2. Ayı başqa sütuna köçürün. + +_notebook.ipynb_ faylını Visual Studio Code-da açın və cədvəli yeni Pandas datafreyminə köçürün. + +1. İlk beş sətirə baxmaq üçün `head()` funksiyasını istifadə edin. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + ✅ Son beş sətirə baxmaq üçün hansı funksiyadan istifadə edərsiniz? + +2. Cari datafreymdə boş datanın olub-olmadığını yoxlayın: + + ```python + pumpkins.isnull().sum() + ``` + Boş datalar olsa da, düşünürük ki, hazırki tapşırıqda bunun bir önəmi olmayacaq. + +3. Datafreym ilə işləməyi asanlaşdırmaq üçün orijinal datafreymdən sətirlər qrupunu (birinci parametr kimi ötürülür) və sütunları (ikinci parametr kimi ötürülür) çıxaran `loc` funksiyasından istifadə edərək yalnız sizə lazım olan sütunları seçin. Nümunədəki `:` ifadəsi "bütün sətirlər" deməkdir. + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### İkinci, balqabağın orta qiymətini təyin edin + +Verilən ayda balqabağın orta qiymətini necə təyin edəcəyiniz barədə biraz düşünün. Bu tapşırıq üçün hansı sütunları seçəcəksiniz? İpucu: 3 sütuna ehtiyacınız olacaq. + +Həll: yeni Price sütununu doldurmaq üçün `Low Price` və `High Price` sütunlarının ortalama dəyərini götürün və Date sütununu yalnız ayları göstərəcək formaya çevirin. Xoşbəxtlikdən, yuxarıdakı yoxlanışa görə tarixlər və qiymətlər üzrə boş data yoxdur. + +1. Ortalamanı hesablamaq üçün aşağıdakı kodu əlavə edin: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + ``` + ✅ İstədiyiniz datanı ekrana çap etdirmək üçün `print(month)` istifadə edə bilərsiniz. + +2. İndi isə çevrilmiş datanızı Pandas datafreyminə kopyalayın: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Datafreyminizi ekrana çap etdirdikdə yeni reqressiya modeli qura biləcəyiniz təmiz, səliqəli bir data seti görəcəksiniz. + +### Amma gözləyin! Burada nəsə düz deyil + +`Package` sütununa baxdıqda, balqabaqların fərqli konfiqurasiyalarda satıldığını görürük. Bəziləri '1 1/9 bushel' ölçüdə, bəziləri isə '1/2 bushel' ölçülərdə, bəziləri balqabaq başına, bəziləri funtla, bəziləri isə müxtəlif eni olan böyük qutularda satılır. + +> Görünür balqabaqları standart formada çəkmək çox çətindir. + +İlkin məlumatlara nəzər yetirdikdə, `Unit of Sale` ilə 'EACH' və ya 'PER BIN'-ə bərabər olan hər şeyin həm də hər ədədinə, qab başına və ya 'hər biri' tipli `Package` növü var. Balqabaqları standart formada çəkmək çox çətin olduğu üçün, gəlin onları `Package` sütununda yalnız 'bushel' sətri olan balqabaqları seçərək filtirləyək. + +1. Faylın başlıq hissəsinə, ilkin .csv köçürməsi etdiyiniz hissənin aşağısına filteri əlavə edin: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Əgər indi datanı ekrana çap etdirsəniz, yalnız 415 sətiri və ya buşel ilə çəkilən balqabaqlardan ibarət data sıralarını görəcəksiniz. + +### Amma gözləyin! Ediləsi daha bir işimiz var + +Hər sıraya görə buşelin miqdarının fərqləndiyinin fərqinə vardınız? Hər buşel başına düşən qiyməti göstərə bilməyiniz üçün riyaziyyatdan istifadə edərək normallaşdırma etməlisiniz. + +1. new_pumpkins adlı datafreymi yaratdığınız hissədən sonra bu sətirləri əlavə edin: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ [The Spruce Eats-ə](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) görə bir buşelin ağırlığı, həcm ölçülməsi olduğu üçün məhsulun növündən asılı olaraq dəyişir. "Misal üçün, 1 buşel pomidor təxminən 56 funt gəldiyi halda, yarpaqlar və göyərtilər az çəki ilə daha çox yer tutduqları üçün, 1 buşel ispanaq 20 funt gəlir." Kifayət qədər mürəkkəbdir! Gəlin özümüzü buşeldən-funta köçürməsi ilə yükləməyək. Bunun əvəzinə, buşelə görə qiymət təyin edək. Bu buşellə balqabaq araşdırması sizə öz datanızın təbiətini başa düşməyinizin nə qədər vacib olduğunu göstərir. + +Artıq siz, buşel ölçülərinə əsasən qiymətləri analiz edə bilərsiniz. Dataları yenidən ekrana çap etdirsəniz, onların necə standartlaşdırıldığını görəcəksiniz. + +✅ Yarım buşel olaraq satılan balqabaqların çox baha olduğunun fərqinə vardınız? Səbəbini tapa bilərsiniz? İpucu: kiçik balqabaqların böyüklərdən qat-qat baha olmasının səbəbi, çox güman ki, bir böyük balqabağın buşeldə yaratdığı boş sahə ilə müqayisədə balaca balqabaqlardan həmin buşelə daha çox yerləşmələridir. + +## Vizuallaşdırma Texnikaları + +Data mühəndislərinin vəzifələrinin bir hissəsi də üzərində işlədikləri datanın keyfiyyət və təbiətini göstərə bilmələridir. Bunu etmək üçün onlar tez-tez maraqlı vizuallar, datanın müxtəlif aspektlərini göstərmək məqsədilə qrafiklər qururlar. Bu yolla onlar, tapılması çətin olan əlaqələri və boşluqları vizual olaraq göstərməyə çalışırlar. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Matplotlib ilə Datanın Vizuallaşdırılması](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "Yeni başlayanlar üçün maşın öyrənməsi - Matplotlib ilə Datanın Vizuallaşdırılması") + +> 🎥 Bu dərs üçün datanın vizuallaşdırılmasının üzərindən keçən qısa video üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Vizuallaşdırma data üçün ən uyğun maşın öyrənməsi texnikasının təyin olunmasında da yardımçı olur. Məsələn, düz xətt üzrə inkişaf edən paylanma qrafiki bu datanın xətti reqressiya üçün uyğun namizəd olduğuna işarə edir. + +Jupyter notbukları ilə əla formada işləyən data vizuallaşdırma kitabxanası [Matplotlib-dir](https://matplotlib.org/)(keçən dərsdə gördüyünüz). + +> [Bu təlimatlar](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) ilə data vizuallaşdırılması ilə bağlı təcrübənizi artırın. + +## Tapşırıq - Matplotlib ilə təcrübə + +Yaratdığınız datafreymi vizuallaşdırmaq üçün bir neçə qrafik yaratmağa çalışın. + +1. Faylın başlıq hissəsində, Pandas-ı köçürdüyünüz hissənin aşağısında Matplotlib-i köçürün: + + ```python + import matplotlib.pyplot as plt + ``` + +2. Yenilənmə üçün notbuku yenidən başladın. +3. Notbukun aşağı hissəsinə datanı qutu formasında təsvir etməsi üçün yeni xana əlavə edin: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Qiymətlə ay arasındakı əlaqəni göstərən paylanma qrafiki](../images/scatterplot.png) + + Bu qrafik faydalıdırmı? Sizi təəccübləndirən bir şey varmı? + + Etdiyi tək şey datanızı verilən aylar üzrə nöqtələr toplusu kimi göstərmək olduğu üçün o qədər də faydalı hesab olunmur. + +### Onu faydalı et + +Qrafiklərin yararlı informasiya göstərə bilməsi üçün adətən dataları hansısa yolla qruplaşdırmanıza ehtiyac yaranır. Gəlin y oxunun ayları, dataların isə məlumatın yayılmasını göstərdiyi bir qrafik qurmağa çalışaq. + +1. Qruplaşdırılmış barqraf yaratmaq üçün yeni xana yaradın: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Qiymətlə ay arasındakı əlaqəni göstərən barqraf](../images/barchart.png) + + Bu daha faydalı data vizuallaşdırılması oldu! Deyəsən, balqabağın ən yüksək qiyməti sentyabr və oktyabr aylarına təsadüf edir. Bu sizin gözləntilərinizi qarşılayırmı? Niyə hə və ya niyə yox? + +--- + +## 🚀 Məşğələ + +Matplotlib-in təklif etdiyi müxtəlif vizuallaşdırma tiplərini araşdırın. Hansılar reqressiya problemləri üçün ən uyğunudur? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Datanı vizuallaşdırmağın bir çox yolunu nəzərdən keçirin. Mövcud olan müxtəlif kitabxanaların siyahısını tərtib edin və verilən tapşırıq tipləri üçün ən yaxşısını qeyd edin. Məsələn, 2D və 3D vizuallaşdırma. Nə kəşf edirsiniz? + +## Tapşırıq + +[Vizuallaşdırmanın araşdırılması](assignment.az.md) \ No newline at end of file diff --git a/2-Regression/2-Data/translations/assignment.az.md b/2-Regression/2-Data/translations/assignment.az.md new file mode 100644 index 0000000000..db9a8c9824 --- /dev/null +++ b/2-Regression/2-Data/translations/assignment.az.md @@ -0,0 +1,9 @@ +# Vizuallaşdırmanın araşdırılması + +Datanı vizuallaşdırmaq üçün müxtəlif kitabxanalar mövcuddur. Nümunə notbukda matplotlib və seaborn ilə Balqabaq datasını bir neçə formada vizuallaşdırın. Kitabxanalardan hansı ilə işləmək daha rahatdır? + +## Qiymətləndirmə + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | 2 araşdırma/vizualizasiyadan ibarət notbuk göndərildi | 1 araşdırma/vizualizasiyadan ibarət notbuk göndərildi | Notbuk göndərilmədi | \ No newline at end of file diff --git a/2-Regression/3-Linear/translations/README.az.md b/2-Regression/3-Linear/translations/README.az.md new file mode 100644 index 0000000000..657b34fb39 --- /dev/null +++ b/2-Regression/3-Linear/translations/README.az.md @@ -0,0 +1,358 @@ +# Scikit-learn istifadə edərək reqressiya modeli qurun: reqressiyanın dörd yolu + +![Xətti və Polinom reqressiya infoqrafiki](../images/linear-polynomial.png) +> [Dasani Madipalli](https://twitter.com/dasani_decoded) tərəfindən çəkilmiş infoqrafik +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/?loc=az) + +> ### [Bu dərs R proqramlaşdırma dili ilə də mövcuddur!](../solution/R/lesson_3.html) + +İndiyədək və bu dərs ərzində istifadə edəcəyimiz balqabaq qiymətlərinin data seti ilə reqressiyanın nə olduğunu araşdırmısınız. Həmçinin, Matplotlib ilə də onu vizuallaşdırmısınız. + +Artıq maşın öyrənməsi üçün reqressiyanın dərinliklərinə enməyə hazırsınız. Vizuallaşdırma sizə datadan məna çıxarmaqda yardımçı olsa da, maşın öyrənməsi gücünü _öyrətmə modellərindən_ alır. Modellər, data asılılıqlarını avtomatik olaraq tutmaq üçün keçmiş datalar üzərində öyrədilir və sizə modelin daha əvvəllər görmədiyi yeni datalar üçün proqnozlar verməyə imkan verirlər. + +Bu dərsdə siz reqressiyanın daha 2 növü olan _sadə xətti reqressiya_ ilə _polinom reqressiya_, və onların arxasında dayanan riyazi texnikalar haqqında öyrənəcəksiniz. Bu modellər bizə fərqli giriş datalarından asılı olaraq balqabaq qiymətlərini proqnozlaşdırmağa imkan verəcək. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Xətti reqressiyanı başa düşmək](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "Yeni başlayanlar üçün maşın öyrənməsi - Xətti reqressiyanı başa düşmək") + +> 🎥 Xətti reqressiyanın qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +> Bu kurikulum boyunca biz sizin minimal riyazi biliklərə sahib olduğunuzu güman edirik və bunu digər sahələrdən gələn tələbələr üçün də əlçatan etməyə çalışırıq. Ona görə də başa düşmənizə yardımçı olacaq qeydlərə, 🧮 izahlara, diaqramlara və digər öyrənmə alətlərinə nəzər yetirə bilərsiniz. + +### İlkin Şərt + +Araşdırdığımız balqabaq datalarının strukturu ilə artıq tanış olmalısınız. Siz onu bu dərsin _notebook.ipynb_ faylında əvvəlcədən yüklənmiş və təmizlənmiş şəkildə tapa bilərsiniz. Faylda balqabağın qiyməti yeni datafreymdə buşel ilə göstərilmişdir. Bu notbukları Visual Studio Code-da işlədə bildiyinizdən əmin olun. + +### Hazırlıq + +Bu dataları sual vermək üçün yüklədiyinizi xatırlatmaq istəyirik. + +- Balqabaq almaq üçün ən yaxşı vaxt nə zamandır? +- Bir qab miniatür balqabaqdan nə qədər qiymət gözləyə bilərəm? +- Onları yarım buşellik səbətlərlə, yoxsa 1 1/9 buşellik qutularda almalıyam? +Gəlin bu dataları araşdırmağa davam edək. + +Bundan öncəki dərsdə siz Pandas-da yeni datafreym yaradaraq onu orijinal data setinin bir hissəsi ilə doldurdunuz və qiymətləri buşellə standartlaşdırdınız. Amma bunu etməklə siz ancaq payız ayları üçün təxminən 400 data nöqtəsi toplaya bildiniz. + +Bu dərsi müşayiət edən notbuka yüklədiyimiz datalara nəzər salın. Məlumatlar əvvəlcədən yüklənilmiş və paylanma qrafiki aylarla bağlı datanı göstərəcək formada çəkilmişdir. Bu datanı biraz da təmizləyərək onun təbiəti haqqında az da olsa əlavə məlumat ala bilərik. + +### Xətti reqressiya xətti + +1-ci dərsdə öyrəndiyiniz kimi, xətti reqressiya tapşırığının məqsədi aşağıdakılara bir xətt çəkə bilməkdir: + +- **Dəyişənlər arası əlaqəni göstərmək**. Dəyişənlər arasındakı əlaqəni göstərin. +- **Təxminlər irəli sürmək**. Yeni data nöqtəsinin həmin xəttlə əlaqədə olduğu yer haqqında dəqiq təxminlər irəli sürün. + +Bu tip bir xətt çəkmək **Ən Kiçik Kvadratlar Reqressiyasının** tipik bir nümunəsidir. 'Ən kiçik kvadratlar' ifadəsinin mənası reqressiya xəttini əhatələyən bütün nöqtələrinin kvadratlarının cəmlənməsi deməkdir. Az sayda xəta və ya `ən kiçik kvadratlar` istədiyimiz üçün, ideal formada, alınan cəm mümkün qədər kiçik olur. + +Bütün məlumat nöqtələrimizdən ən az məcmu məsafəyə malik olan xətti modelləşdirmək istədiyimiz üçün bunu edirik. Biz onun istiqaməti deyil, böyüklüyü ilə maraqlandığımıza görə şərtləri də əlavə etməzdən əvvəl kvadratlaşdırırıq. + +> **🧮 Mənə riyaziyyatı göstərin** +> +> _Ən uyğun xətt_ adlanan bu xətt, [tənliklə](https://en.wikipedia.org/wiki/Simple_linear_regression) ifadə oluna bilər: +> +> ``` +> Y = a + bX +> ``` +> +> `X` 'izahedici dəyişən', `Y` 'asılı dəyişəndir'. `b`, xəttin bucaq əmsalı, `a` isə `X = 0` olduqda `Y` dəyərinə istinad edən y-kəsənidir. +> +>![bucaq əmsalını hesablayın](../images/slope.png) +> +> İlk olaraq `b` bucaq əmsalını hesablayın. [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilmiş infoqrafik. +> +> Digər sözlə və balqabaq datasının orijinal sualına-"bir buşel balqabağın ay üzrə qiymətini təxmin edin" istinad etsək, `X` qiymətə, `Y` isə aylıq satışa istinad edə bilər. +> +>![tənliyi tamamlayın](../images/calculation.png) +> +> Y-in dəyərini hesablayın. Əgər 4$ ətrafında ödəyirsinizsə, bu Aprel ayı olmalıdır! [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilən infoqrafik. +> Xətti hesablayan riyazi əməliyyat kəsəndən və ya `X = 0` olduqda `Y`-in bərabər olduğu dəyərdən asılı olan bucaq əmsalını göstərməlidir. +> Bu dəyərlərin hesablanması üçün olan metodlara [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) vebsaytından baxa bilərsiniz. Ədədlərin sahib olduğu dəyərin xəttə necə təsir etməsinə baxmaq üçün isə [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) saytına keçid edin. + +## Korrelyasiya + +Başa düşməniz lazım olan daha bir ifadə isə X və Y dəyişənləri arasındakı **korrelyasiya əmsalıdır**. Paylanma qrafikindən istifadə edərək bu əmsalları tez bir şəkildə vizuallaşdıra bilərsiniz. Aydın bir xətt üzrə səpələnmiş data nöqtələri olan qarifikin yüksək korrelyasiyası, hər yerə səpələnmiş data nöqtələri olan qrafikin isə aşağı korrelyasiyası olur. + +Yaxşı bir reqresiyya modeli, reqressiya xətti ilə Ən Kiçik Kvadratlar Reqresiyyası metodundan istifadə olunmuş yüksək (0-dan fərqli, 1-ə yaxın) Korrelyasiya Əmsalı olan model hesab olunacaq. + +✅ Bu dərsi müşayiət edən notbuku işə salın və Ay-Qiymət paylanma qrafikinə baxın. Paylanma qrafikinin vizual təsvirinə əsasən balqabaq satışı üçün Ay ilə Qiyməti əlaqələndirən datanın yüksək yoxsa aşağı korrelyasiyası var? `Ay` əvəzinə daha dəqiq ölçüdən, məsələn *ilin günündən*(məsələn, il başlayandan keçən günlərin sayı) istifadə etsəniz dəyişiklik olacaqmı? + +Aşağıdakı kodda, biz datanı təmizlədiyimizi və aşağıdakı formaya bənzər `new_pumpkins` adlı datafreymini əldə etdiyimizi fərz edirik: + +ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price +---|-------|-----------|---------|------|---------|-----------|------------|------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 + +> Datanı təmizləmək üçün istifadə olunan kodlara [`notebook.ipynb`](../notebook.ipynb) faylından baxa bilərsiniz. Keçən dərsdəki eyni təmizləmə addımlarını icra etmişik və `DayOfYear` adlı sütunu aşağıdakı ifadə ilə hesablamışıq: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Artıq xətti reqressiyanın arxasında dayanan riyaziyyatı başa düşdüyünüz üçün, gəlin hansı balqabaq paketinin ən yaxşı qiymətə malik olduğunu Reqressiya modeli quraraq təxmin edək. Bu məlumatı bayram üçün balqabaq alan alıcı öz xərclərini optimallaşdırmaq üçün istəyə bilər. + +## Korrelyasiyanı axtarırıq + +[![Yeni başlayanlar üçün maşın öyrənməsi - Korrelyasiyanın axtarışında: Xətti Reqressiyanın açarı](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "Yeni başlayanlar üçün maşın öyrənməsi - Korrelyasiyanı axtarırıq: Xətti Reqressiyanın açarı") + +> 🎥 Korrelyasiyanın qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Keçən dərsdən çox güman ki, balqabağın aylar üzrə ortalama qiymətinin bu formada olduğunu görmüsünüz: + +Average price by month + +Bu şəkil bizə biraz korrelyasiyaya ehtiyac olduğuna işarə edir. Biz `Month` və `Price`, və yaxud `DayOfYear` və `Price` arasındakı əlaqəni təxmin etmək üçün reqressiya modellərimizi öyrədə bilərik. İkinci əlaqəni göstərən paylanma qrafiki: + +Price və Day of Year arasındakı əlaqəni göstərən paylanma qrafiki + +Gəlin `corr` funksiyasından istifadə etməklə korrelyasiyanın mövcud olub olmadığına baxaq: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Belə görünür ki, `Month` üzrə korrelyasiya -0.15, `DayOfMonth` üzrə isə -0.17 olmaqla çox kiçik dəyərə malikdir. Amma burada daha mühüm əlaqə ola bilər. Görünən odur ki, fərqli balqabaq növləri üzrə fərqli qiymət yığınları mövcuddur. Bu hipotezisi isbat etmək üçün, gəlin hər balqabaq kateqoriyasının qrafikini fərqli bir rənglə çəkək. `ax`-i `scatter` adlı qrafik çəkən funksiyaya ötürməklə biz eyni qrafik üzərində bütün nöqtələri göstərə bilərik: + +```python +ax=None +colors = ['red','blue','green','yellow'] +for i,var in enumerate(new_pumpkins['Variety'].unique()): + df = new_pumpkins[new_pumpkins['Variety']==var] + ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) +``` + +Price və Day of Year arasındakı əlaqəni göstərən paylanma qrafiki + +Gəlin bir müddət yalnız 'yeməli növ' balqabaq sortuna fokuslanaq and tarixin onun qiyməti üzərindəki təsirinə baxaq: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` + +Price və Day of Year arasındakı əlaqəni göstərən paylanma qrafiki + +Əgər indiki halda `corr` funksiyasında istifadə edərək `Price` və `DayOfYear` arasındakı korrelyasiyanı hesablasaq, təxminən `-0.27`-ə bərabər olan bir qiymət alarıq. Bu da o deməkdir ki, bizim təxminedici model daha məntiqli təxminlər verməyə başlayır. + +> Xətti reqressiyanı öyrətməzdən öncə datamızın təmiz olduğundan əmin olmalıyıq. Xətti reqressiya boş qiymətlərlə o qədər də yaxşı işləmədəyi üçün boş xanalardan qurtulmağımızda fayda var: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +Başqa bir yanaşma, həmin boş dəyərləri müvafiq sütundakı orta qiymətlərlə doldurmaq olardı. + +## Sadə xətti reqressiya + +[![Yeni başlayanlar üçün maşın öyrənməsi - Scikit-learn ilə Xətti və Polinom Reqressiyalar](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "Yeni başlayanlar üçün maşın öyrənməsi - Scikit-learn ilə Xətti və Polinom Reqressiyalar") + +> 🎥 Xətti və polinom reqresiyyaların qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Xətti Reqressiya modelimizi öyrətmək üçün **Scikit-learn** kitabxanasından istifadə edəcəyik. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +İlkin olaraq giriş(özəlliklər) və çıxış(label) dəyərlərini fərqli setlərə ayıraraq başlayırıq: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +Diqqət edin ki, Xətti Reqressiya paketinin giriş datasını düzgün başa düşməsi üçün onu `reshape`(yenidən formalaşdırmaq) etməli olduq. Xətti reqressiya giriş parametri olaraq hər sırasının giriş özəlliklərindən ibarət vektora uyğun olduğu 2 ölüçülü set gözləyir. Bizim situasiyada yalnız bir giriş olduğu üçün N×1 formalı setə ehtiyacımız olacaq. Buradakı N data setinin ölçüsünü bildirir. + +Öyrətmədən sonra modelimizi validasiya etməyimiz üçün datanı öyrətmə və test data setlərinə ayırmağa ehtiyacımız var: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Yekunda Xətti Reqressiya modelini öyrətmək 2 sətirlik kod tələb etmiş olur. `LinearRegression` adlı bir obyekt yaradaraq onu `fit` metodundan istifadə etməklə öz datamıza uyğunlaşdırırıq: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +`.coef_` istifadə edərək `LinearRegression` obyektinin `fit` ilə uyğunlaşdırılandan sonra özündə saxladığı bütün reqressiya əmsallarına baxa bilərsiniz. Bizim situasiyada yalnız bir əmsal var ki, o da `-0.017` civarında olmalıdır. Bu da o deməkdir ki, qiymətlər zamanla düşsə də, bu düşüş çox yox, təxminən günə 2 sent civarında dəyişir. Həmçinin reqressiyanın Y oxu ilə kəsişmə nöqtəsinə `lin_reg.intercept` ilə baxa bilərik. O isə bizim situasiyada `21` aralığında olacaq ki, bu da ilin əvvəlindəki qiyməti göstərir. + +Modelimizin nə dərəcə dəqiq olduğunu görmək üçün test data setində qiymətləri təxmin edib, daha sonra onların gözlənilən qiymətlərə nə dərəcə yaxın olduğunu ölçə bilərik. Bunu orta kvadratik xəta (OKX), daha aydın formada desək, bütün gözlənilən və təxmin olunan dəyərlər arasındakı fərqin kvadratları cəminin ədədi ortası ölçümü ilə həll edə bilərik. + +```python +pred = lin_reg.predict(X_test) + +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +``` + +Görünür ki, xətamız 2 xal civarındadır, bu da ~17%-dir. O qədər də yaxşı deyil. Modelin keyfiyyət göstəricilərindən biri olan **determinasiya əmsalı** isə bu formada əldə olunur: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` + +Əgər qiymət 0-a bərabərdirsə, bu o deməkdir ki, model giriş datalarını nəzərə almır və *ən pis xətti təxminedici* rolunu oynayaraq, nəticənin orta qiymətinə bərabər olur. 1 dəyəri isə bizim bütün gözlənilən dəyərləri mükəmməl bir şəkildə təxmin edə biləcəyimiz mənasına gəlir. Bizim situasiyada əmsal kifayət qədər aşağı, 0.06 civarındadır. + +Reqressiyanın necə işlədiyini görmək üçün reqressiya xətti ilə birgə test datasını da qrafikləşdirə bilərik: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +Xətti reqressiya + +## Polinom Reqressiya + +Xətti Reqressiyanın digər bir növü Polinom Reqressiyadır. Bəzən dəyişənlər arasındakı əlaqə xətti(balqabaq nə qədər böyük olarsa, qiyməti də o qədər yüksək olacaq) olsa da, bəzən düz xətt və ya müstəvi formasında qrafikləşdirilə bilinməyən əlaqələr də olur. + +✅ [Burada olan data nümunələrində](https://online.stat.psu.edu/stat501/lesson/9/9.8) Polinom Reqressiyadan istifadə oluna bilər. + +Date və Price arasındakı əlaqəyə fərqli bucaqdan baxmağa çalışın. Sizcə bu paylanma qrafiki mütləq şəkildə hansısa bir düz xətt ilə analiz olunmalıdırmı? Qiymətlər dəyişə bilməzmi? Bu durumda polinom reqressiyanı yoxlaya bilərsiniz. + +✅ Polinomlar bir və ya bir neçə dəyişən və əmsallardan ibarət olan riyazi ifadələrə deyilir. + +Polinom reqressiya qeyri-xətti datalara daha yaxşı uyğunlaşmaq üçün əyri xətt yaradır. İndiki situasiyada, `DayOfYear` dəyişəninin kvadratını giriş datasına daxil etsək, datamızı parabolik əyriyə uyğunlaşdıra bilərik. Bunun sayəsində il ərzindəki hansısa nöqtədə minimum dəyərə malik olacağıq. + +Scikit-learn-də data emalının müxtəlif addımlarını birləşdirmək üçün [payplayn API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) mövcuddur. **Payplayn**, **təxminedicilərdən** formalaşan bir zəncirdir. Bizim situasiyada ilk öncə polinom özəllikləri modelimizə əlavə edən payplaynı yaradacayıq və daha sonra reqressiyanı öyrədəcəyik: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +`PolynomialFeatures(2)` istifadə edilməsi, bizim giriş datasındakı bütün ikinci dərəcəli polinomları daxil edəcəyimizi bildirir. Bizim vəziyyətimizdə bu, sadəcə `DayOfYear`2 mənasını verəcək, amma iki giriş dəyişəni, X və Y verildikdə isə, bu, X2, XY və Y2-ni əlavə edəcək. İstəyə bağlı olaraq daha yüksək dərəcəli polinom da istifadə edə bilərik. + +Payplaynlar orijinal `LinearRegression` obyektində olduğu kimi, eyni üsulla istifadə oluna bilər. Məsələn, payplaynı `fit` ilə uyğunlaşdıra, daha sonra isə təxmin nəticələrini əldə etmək üçün `predict` istifadə edə bilərik. Aşağıdakı qrafikdə test datası və təxmin əyrisi göstərilmişdir: + +Polynomial regression + +Polinom Reqressiyadan istifadə etməklə biz nəzərəçarpacaq qədər olmasa da, nisbətən daha aşağı OKX(orta kvadratik xəta) və yüksək dəqiqlik əldə edə bilərik. Unutmayın ki, digər özəllikləri də nəzərə almalıyıq! + +> Artıq balqabağın Hellouin ərəfəsində minimum qiymətə düşdüyünü müşahidə edə bilərsiniz. Bunu necə izah edə bilərsiniz? + +🎃 Təbrik edirik, siz indicə yeməli növ balqabaqların qiymətini proqnozlaşdırmağa kömək edə biləcək bir model yaratdınız. Böyük ehtimalla eyni prosedurları digər balqabaq növləri üçün də təkrarlaya bilərsiniz. Amma bu yorucu olacaq. Gəlin balqabaq növünü modelimizdə necə nəzərə alacağımızı öyrənək! + +## Kateqorik Xüsusiyyətlər + +İdeal şəraitdə eyni modeldən istifadə edərək fərqli balqabaq növləri üçün təxminlər istəyə bilərik. Amma `Variety` sütunu qeyri-ədədi dəyərlərdən ibarət olduğu üçün `Month` sütunundan fərqlənir. Bu tip sütunlar **kateqorik** adlandırılır. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Xətti Reqressiya ilə Kateqorik Xüsusiyyətlərin Təxmini](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "Yeni başlayanlar üçün maşın öyrənməsi - Xətti Reqressiya ilə Kateqorik Xüsusiyyətlərin Təxmini") + +> 🎥 Kateqorik xüsusiyyətlərdən istifadəsi barədə qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Burada ortalama qiymətin növdən asılılığını görə bilərsiniz: + +Növlər üzrə ortalama qiymət + +Növləri nəzərə alsaq, ilk olaraq biz onu ədədi formaya çevirməli və yaxud **kodlaşdırmalıyıq**. Bunu etməyimiz üçün müxtəlif yollar vardır: + +* Sadə **ədədi kodlaşdırma** müxtəlif növlərdən ibarət bir cədvəl quracaq və növün adını həmin cədvəldəki indeksi ilə əvəzləyəcək. Bu xətti reqressiya üçün yaxşı fikir deyil, çünki xətti reqressiya indeksin cari qiymətini alaraq onu hansısa əmsala vurub, nəticəyə əlavə edir. Bizim situasiyada isə indeks və qiymət arasındakı əlaqə elementlərin hansısa bir yol ilə sıralansa belə, bariz şəkildə qeyri-xəttidir. + +* **Tək-aktiv kodlaşdırma** `Variety` sütununu, hər növ üçün bir ədəd olmaqla 4 fərqli sütunla əvəz edəcək. Hər sütun əgər müvafiq sıra verilən növə uyğundursa `1`-dən, deyilsə `0`-dan ibarət olacaq. Bu da o deməkdir ki, xətti reqressiyada hər balqabaq növü üçün həmin növün "başlanğıc qiymətindən" (və ya "əlavə qiymət") məsul olan 4 əmsal olacaq. + +Aşağıdakı kodda növü necə tək-aktiv kodlaşdıra biləcəyimiz göstərilmişdir: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +Xətti reqressiyanı tək aktiv kodlaşdırmanın giriş olaraq istifadə edərək öyrətmək üçün `X` və `y` datalarını düzgün formada başlatmalıyıq: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +Kodun qalan hissəsi yuxarıda Xətti Reqressiyanı öyrətməyimiz üçün istifadə olunan kodlarla eynidir. Əgər yoxlasanız, orta kvadratik xətanın eyni olduğunu, amma determinasiya əmsalının çox daha yüksək(~77%) olduğunu görəcəksiniz. Daha da dəqiq təxminlər əldə etmək üçün, `Month` və ya `DayOfYear` tipli ədədi özəllikləri də nəzərə ala bilərik. Özəlliklərdən ibarət böyük bir set əldə etmək üçün `join` istifadə edə bilərik: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) \ + .join(new_pumpkins['Month']) \ + .join(pd.get_dummies(new_pumpkins['City'])) \ + .join(pd.get_dummies(new_pumpkins['Package'])) +y = new_pumpkins['Price'] +``` + +Burada bizə 2.84 (10%) OKX (orta kvadratik xəta), 0.94 determinasiya qaytaran `City` və `Package` tiplərini də nəzərə alırıq! + +## Hamısını bir araya gətirərək + +Ən yaxşı modeli qurmaq üçün, biz mürəkkəb (tək-aktiv kodlaşdırılmış kateqorik + ədədi) dataları Polinom Reqressiya ilə birlikdə istifadə edə bilərik. İşinizi asanlaşdırmaq üçün kod nümunəsini aşağıda yerləşdirmişik: + +```python +# set up training data +X = pd.get_dummies(new_pumpkins['Variety']) \ + .join(new_pumpkins['Month']) \ + .join(pd.get_dummies(new_pumpkins['City'])) \ + .join(pd.get_dummies(new_pumpkins['Package'])) +y = new_pumpkins['Price'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Bu bizə 97%-lə ən yaxşı determinasiya əmsalını, və OKX=2.23 (~8% təxmin xətası) verəcək. + +| Model | MSE | Determination | +|-------|-----|---------------| +| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | +| `Variety` Linear | 5.24 (19.7%) | 0.77 | +| All features Linear | 2.84 (10.5%) | 0.94 | +| All features Polynomial | 2.23 (8.25%) | 0.97 | + +🏆 Əla! Siz bir dərsdə 4 Reqressiya modeli yaratdınız və modelin keyfiyyətini 97%-ə qədər artırdınız. Reqressiyanın final bölməsində kateqoriyaları müəyyənləşdirmək üçün olan Logistik Reqressiya haqqında öyrənəcəksiniz. + +## 🚀 Məşğələ + +Bu notbukda bir neçə fərqli dəyişəni test edərək korrelyasiyanın modelin dəqiqliyinə necə təsir etdiyini izləyin. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu dərsdə Xətti Reqressiya haqqında öyrəndiniz. Reqressiyanın başqa vacib növləri də mövcuddur. Stepwise, Ridge, Lasso və Elasticnet texnikaları barədə oxuyun. Daha ətraflı öyrənə biləcəyiniz yaxşı kurs [Stenford Statistik Öyrənmə kursudur.](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) + +## Tapşırıq + +[Model qurun](assignment.az.md) \ No newline at end of file diff --git a/2-Regression/3-Linear/translations/assignment.az.md b/2-Regression/3-Linear/translations/assignment.az.md new file mode 100644 index 0000000000..a6be8c94e8 --- /dev/null +++ b/2-Regression/3-Linear/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Reqressiya Modeli yaradın + +## Təlimatlar + +Bu dərsdə sizə Xətti və Polinom Reqressiyalardan istifadə olunaraq model qurulması göstərildi. Bu məlumatlardan istifadə etməklə Scikit-learn hazır setlərindən və ya başqa bir data seti tapmaqla yeni bir model qurun. Notbukunuzda istifadə etdiyiniz texnikadan istifadə səbəbinizi əsaslandırın və modelinizin dəqiqliyini göstərin. Əgər o dəqiq deyilsə, səbəbini izah edin. + +## Qiymətləndirmə + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | əla formada sənədləşdirilmiş notbuk təqdim edilib | həll yarımçıqdır | həll qüsurlu və ya səhvdir | \ No newline at end of file diff --git a/2-Regression/4-Logistic/translations/README.az.md b/2-Regression/4-Logistic/translations/README.az.md new file mode 100644 index 0000000000..4fde37a096 --- /dev/null +++ b/2-Regression/4-Logistic/translations/README.az.md @@ -0,0 +1,397 @@ +# Kateqoriyaları təxmin etmək üçün logistik reqressiya + +![Logistik və xətti reqressiya infoqrafiki](../images/linear-vs-logistic.png) + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/?loc=az) + +> ### [Bu dərs R proqramlaşdırma dili ilə də mövcuddur!](../solution/R/lesson_4.html) + +## Giriş + +Reqressiyanın bu final hissəsində, _klassik_ maşın öyrənmə texnikası olan Xətti Reqressiyaya nəzər salacayıq. Bu texnikadan ikili kateqoriyalardakı şablonları kəşf etmək üçün istifadə edə bilərsiniz. Bu qənnadı məmulatı şokoladdırmı? Bu xəstəlik yoluxucudurmu? Müştəri bu məhsulu seçəcəkmi? + +Bu dərsdə siz: + +- Məlumatların vizuallaşdırılması üçün yeni kitabxananı +- Logistik reqressiya texnikalarını + +öyrənəcəksiniz. + +✅ Bu [öyrənmə modulunda](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) olan reqressiya tipləri ilə işləyərək öz biliklərinizi təkmilləşdirin. + +### İlkin Şərt + +Balqabaq məlumatları ilə işlədikdən sonra artıq tanış olduq ki, onunla işləyə biləcəyimiz yalnız bir ədəd ikili kateqoriya-`Color` mövcuddur. + +Gəlin bir neçə dəyişən verilməklə _balqabağın hansı rəngdə(narıncı 🎃 və ya ağ 👻) olacağını_ təxmin edən logistik reqressiya modeli quraq. + +> Reqressiya barəsində olan dərsdə nə üçün ikili klassifikasiya haqqında danışırıq? Logistik reqressiya əslində, xətti əsaslı olsa da bir [klassifikasiya metodudur](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression). Növbəti bölmədə məlumatları təsnifləndirməyin yollarını öyrənəcəksiniz. + +## Sualı müəyyənləşdirin + +İstəklərimiz üzərindən gedərək bunu ikili formasında ifadə edəcəyik: 'Ağ' və ya 'Ağ olmayan'. Data dəstimizdə "zolaqlı" kateqoriya olsa da, bu tip bir neçə nümunə olduğu üçün ondan istifadə etməyəcəyik. Hər bir halda data setimizdən boş dəyərləri sildikdən sonra yox olacaqlar. + +> 🎃 Maraqlı fakt. Bəzən ağ balqabaqlara 'ruh' balqabaqlar da deyirlər. Onları çərtmək o qədər də asan olmadığı üçün narıncı balqabaqlar qədər məşhur deyillər. Amma çox gözəl görünürlər! Ona görə də biz sualımızı bir balaca yenidən formalaşdıra bilərik: 'Ruh olan' or 'Ruh olmayan'. 👻 + +## Logistik reqressiya haqqında + +Logistik reqressiya keçən dərslərdə haqqında öyrəndiyiniz xətti reqressiyadan bir neçə vacib yolla fərqlənir. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Maşın Öyrənməsində Klassifikasiya üçün Logistik Reqressiyanın başa düşülməsi](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "Yeni başlayanlar üçün maşın öyrənməsi - Maşın Öyrənməsində Klassifikasiya üçün Logistik Reqressiyanın başa düşülməsi") + +> 🎥 Logistik reqressiyanın qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +### İkili klassifikasiya + +Logistik reqressiya xətti reqressiyanın təklif etdiyi özəllikləri təklif etmir. Biri ikili kateqoriya ("narıncı olan və ya olmayan") haqqında təxminlər irəli sürsə də, digəri balqabağın mənşəyi və yığılma vaxtını nəzərə alsaq, _qiymətinin nə qədər yüksələcəyi_ tipli davamedici dəyərləri təxmin etmək potensialındadır. + +![Balqabaq qruplaşdırma modeli](../images/pumpkin-classifier.png) +> [Dasani Madipalli](https://twitter.com/dasani_decoded) tərəfindən çəkilmiş infoqrafik + +### Digər klassifikasiya + +Multinomial və ordinal daxil olmaqla logistik reqressiyanın digər növləri də mövcuddur: + +- **Multinomial** özündə daha çox kateqoriyanı ehtiva edir. Məsələn, "Narıncı, Ağ, and Zolaqlı". +- Sıralanmış kateqoriyalardan ibarət olan **Ordinal** isə limitli ölçülərə (mini,sm,med,lg,xl,xxl) görə sıralanmış balqabaqlarımız kimi nəticələrimizi məntiqi olaraq sıralamaq istədikdə faydalıdır. + +![Multinomial və ordinal reqressiya](../images/multinomial-vs-ordinal.png) + +### Dəyişənlər korrelyasiya etməli deyil + +Xətti reqressiyanın daha çox korrelyasiyalı dəyişənlərlə necə daha rahat işlədiyini xatırlayırsınızmı? Logistik reqressiyada bunun əksi baş verir. Belə ki, dəyişənlər uyğunlaşmasına ehtiyac yoxdur. Ona görə də, zəif korrelyasiyaları olan bu datamız üçün işə yarayır. + +### Çoxlu təmiz dataya ehtiyacınız var + +Xətti reqressiya daha çox data istifadə etdikcə daha dəqiq nəticələr verəcək. Bizim balaca data dəstimizin bu tapşırıq üçün o qədər də optimal olmadığını unutmayın. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Datanın Analizi və Logistik Reqressiya üçün hazırlanması](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "Yeni başlayanlar üçün maşın öyrənməsi - Datanın Analizi və Logistik Reqressiya üçün hazırlanması") + +> 🎥 Logistik reqressiya üçün datanın hazırlanması barədə qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +✅ Logistik reqressiya üçün tam uyğun olan data tipləri haqqında düşünün + +## Tapşırıq - datanı səliqəyə salın + +İlkin olaraq datanı biraz təmizləyək, boş dəyərləri kənarlaşdıraq və bəzi sütunları seçək: + +1. Aşağıdakı kodu əlavə edin: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Hər zaman öz datafreyminizə nəzər yetirə bilərsiniz: + + ```python + pumpkins.info + ``` + +### Vizuallaşdırma - kateqorik qrafik + +Artıq bir neçə dəfə [başlanğıc dəftərçəsini](../notebook.ipynb) yükləmiş və `Color` dəyişəni də daxil olmaqla bir neçə dəyişən qalacaq şəkildə onu təmizləmisiniz. Gəlin dəftərçədə datafreymimizi fərqli kitabxanadan - [Seaborn](https://seaborn.pydata.org/index.html)-dan istifadə edərək vizuallaşdıraq. Bu kitabxana əvvəlki dərslərdə istifadə etmiş olduğumuz Matplotlib kitabxanası üzərinə qurulmuşdur. + +1. `catplot` funksiyasından `pumpkins` adlı balqabaq datamızdan istifadə etməklə və hər balqabaq kateqoriyası (narıncı və ya ağ) üçün rəng xəritəsini təyin etməklə belə bir qrafik yaradın: + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Vizuallaşdırılmış dataların qrafiki](../images/pumpkins_catplot_1.png) + + Bu datanı müşahidə edərək rənglərlə növlərin bir birinə necə təsir etdiyini görə bilərsiniz. + + ✅ Bu kateqorik qrafikə nəzər yetirdikdə ağlınıza hansı maraqlı yeni fikirlər gəlir? + +### Datanın ön-emalı özəllik və etiket kodlaşdırılması +Bizim balqabaq datalarımızdakı bütün sütunlar mətni dəyərlərdən ibarətdir. Kateqorik datalarla işləmək insanlar üçün intuitiv olsa da, maşınlar üçün bu belə deyil. Maşın öyrənmə alqoritmləri rəqəmlərlə yaxşı işləyir. Buna görə də kodlaşdırma bizə kateqoriyalı məlumatları heç bir məlumatı itirmədən ədədi məlumatlara çevirməyə imkan verdiyi üçün dataların önemalı mərhələsində çox vacib bir addımdır. Yaxşı kodlaşdırma yaxşı bir model yaratmağa səbəb olur. + +Özəlliklərin kodlaşdırılması üçün kodlaşdırıcıların 2 əsas tipi var: + +1. Ordinal şifrələyicilər data dəstimizdəki `Item Size` sütununda olduğu kimi müəyyən məntiqi sıralamanı izləyən ordinal dəyişənlər üçün uyğundur. Bu şifrələyici hər kateqoriyanı aid olduğu sütun sırasına uyğun ədədlə ifadə edən bir əlaqə yaradır. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` +2. Kateqorik şifrələyicilər isə date dəstimizdə `Item Size` çıxmaq şərtilə digər özəlliklər kimi heç bir məntiqi qanunauyğunluğu izləməyən kateqorik dəyişlənlər üçün uyğundur. Bu tək-aktiv növ şifrələmədir. Bu növ şifrələmədə hər kateqoriya ikili sütunla ifadə olunur. Əgər balqabaq həmin növə aiddirsə 1, deyilsə şifrələnmiş dəyişən 0-a bərabər olur. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` + +Daha sonra bir neçə şifrələyicini 1 addımda birləşdirmək və müvafiq sütuna tətbiq etmək üçün `ColumnTransformer`-dən istifadə olunur. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` +Digər tərəfdən etiketi kodlaşdırmaq üçün onları yalnız 0 və siniflərin_sayı-1 (burada 0 və 1-dir) arasında olan dəyərlərlə normallaşdıran scikit-learn-ün `LabelEncoder` sinifindən istifadə edəcəyik. + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` + +Özəllikləri və etikətləri kodlaşdırdıqdan sonra onları yeni `encoded_pumpkins` adlı datafreymə birləşdirə bilərik. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` + +`Item Size` sütunu üçün ordinal şifrələyicilərdən istifadə etməyin üstünlükləri nədir? + +### Dəyişənlər arasındakı əlaqəni analiz edin + +Artıq dəyişənlərimizi öncədən emal etdiyimizə görə modelin verilən özəlliklərə uyğun etiketi nə qədər düzgün təxmin edə biləcəyi barədə fikir sahibi ola bilərik. Bunun üçün özəlliklərlə etiketlər arasındakı əlaqələri analiz edə bilərik. +Bu tip analizləri aparmağın ən yaxşı yolu onları qrafikləşdirməkdir. Bu dəfə də kateqorik qrafikdə `Item Size`, `Variety` və `Color` arasındakı əlaqəni vizuallaşdırmaq üçün Seaborn-un `catplot` funksiyasından istifadə edəcəyik. Datanı daha yaxşı vizuallaşdırmaq üçün şifrələnmiş `Item Size` və şifrələnməmiş `Variety` sütunlarını istifadə edirik. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` + +![Vizuallaşdırılmış məlumatların qrafiki](../images/pumpkins_catplot_2.png) + +### Sürü qrafikindən istifadə edin + +`Color` ikili kateqoriya(Ağ və ya Ağ olmayan) olduğu üçün vizuallaşdırma üçün [xüsusi yanaşmaya](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) ehtiyacı var. Bu kateqoriyanın digər dəyişənlərlə olan əlaqəsini vizuallaşdırmaq üçün başqa yollar da mövcuddur. + +Dəyişənləri yanaşı formada Seaborn qrafikləri ilə vizuallaşdıra bilərsiniz. + +1. Dəyərlərin paylanmasını göstərmək üçün 'swarm' qrafikini yoxlayın: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Vizuallaşdırılmış məlumatların sürü qrafiki](../images/swarm_2.png) + +**Diqqət edin**: Seaborn bu qədər çox məlumat nöqtəsini sürü qrafiki ilə göstərməyi bacara bilmədiyi üçün yuxarıdakı kod bir xəbərdarlıq göstərə bilər. Problemin potensial həlli, 'size' parametrindən istifadə edərək işarələyicinin ölçüsünü azaltmaqdır. Amma nəzərə alın ki, bu qrafikin oxunaqlılığını aşağı salacaq. + +> **🧮 Mənə riyaziyyatı göstərin** +> +> Logistik reqressiya [siqmoid funksiyalarından](https://wikipedia.org/wiki/Sigmoid_function) istifadə edilən 'maksimum bənzərlik' konseptinə əsaslanır. Qrafiki formada 'Siqmoid Funksiyası' 'S' hərfinə oxşayır. Bu funksiya bir dəyər götürür və onu 0 və 1 arasındakı bir qiymətə köçürür. Qrafiki əyrisi isə 'logistik əyri' də adlanır. Düsturu isə bu formadadır: +> +> ![logistic function](../images/sigmoid.png) +> +> siqmoidin orta nöqtəsi x-in 0 nöqtəsində olduğu nöqtədə L əyrinin maksimum dəyəri, k isə əyrinin dikliyidir. Əgər funksiyanın nəticəsi 0.5-dən çoxdursa, etiketə ikili seçimin '1' sinifi veriləcək, əks halda '0' olaraq sinifləndiriləcəkdir. + +## Modelinizi qurun + +Həmin ikili klassifikasiyanı tapmaq üçün bir model qurmaq Scikit-learn-də təəccüblü dərəcədə sadədir. + +[![Yeni başlayanlar üçün maşın öyrənməsi - Datanın Klassifikasiyası üçün Logistik Reqressiya](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "Yeni başlayanlar üçün maşın öyrənməsi - Datanın Klassifikasiyası üçün Logistik Reqressiya") + +> 🎥 Logistik reqressiya modelinin qurulmasını göstərən qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +1. Təsnifat modelində istifadə istifadə etmək istədiyiniz dəyişənləri seçin və `train_test_split()`-i çağıraraq onları öyrənmə və test dəstlərinə ayırın. + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. Artıq `fit()`-i öyrənmə dataları ilə çağıraraq modelinizi öyrədə və nəticəni ekrana çap edə bilərsiniz: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + Qiymətlər tablosuna nəzər yetirin. Yalnız 1000 sətirlik datanızın olduğunu nəzərə alsaq, o qədər də pis görünmür: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## Xəta matrisi vasitəsilə daha yaxşı başa düşmə + +Yuxarıdakıları ekrana çap edərək bir xal tablosu [reportu](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) əldə edə bilsəniz də, modelinizin necə bir performans göstərməsini [xəta matrisi](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) istifadə edərək daha rahat başa düşə bilərsiniz. + +> 🎓 '[Xəta matrisi](https://wikipedia.org/wiki/Confusion_matrix)' təxminlərin dəqiqliyini ölçən, modelinizin pozitiv və neqativ olmaqla, doğru və yanlışları göstərən bir cədvəldir. + +1. Xəta matirisini işlətmək üçün `confusion_matrix()`-i çağırın: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Modelinizin xəta matrisinə baxın: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +Scikit-learn-də xəta matrisində Cərgələr (0 oxu) əsl etiketlər, sütunlar (1 oxu) isə təxmin edilənləri göstərir. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Burada nə baş verir? Misal üçün modelimizdən balqabaqları 2 ikili kateqoriya- 'ağ' və 'ağ olmayan' üzrə qruplaşdırmağı istəmişik. + +- Modeliniz balqabağın ağ olmadığını təxmin edirsə və o reallıqda 'ağ olmayan' kateqoriyasına aiddirsə, biz onu yuxarı sol rəqəmlə göstərilən doğru neqativ (True Negative) adlandırırıq. +- Modeliniz balqabağı ağ kimi təxmin edirsə və o reallıqda 'ağ olmayan' kateqoriyasına aiddirsə, biz onu aşağı sol nömrə ilə göstərilən yanlış neqativ (False Negative) adlandırırıq. +- Modeliniz balqabağın ağ olmadığını təxmin edirsə və o reallıqda 'ağ' kateqoriyasına aiddirsə, biz onu yuxarı sağ nömrə ilə göstərilən yanlış pozitiv (False Positive) adlandırırıq. +- Modeliniz balqabağı ağ kimi təxmin edirsə və o reallıqda 'ağ' kateqoriyasına aiddirsə, biz onu aşağı sağ rəqəmlə göstərilən doğru pozitiv (True Positive) adlandırırıq. + +Təxmin etdiyiniz kimi, daha çox sayda doğru pozitiv və doğru neqativlərə və daha az sayda yanlış pozitiv və yanlış neqativlərə üstünlük verilir. Bu da modelin daha yaxşı performans göstərdiyini göstərir. + +Xəta matrisinin dəqiqlik və xatırlatma ilə necə bir əlaqəsi var? Yuxarıda çap edilmiş təsnifat hesabatın dəqiqliyini (0,85) və xatırlamanı isə (0,67) olaraq göstərdiyini unutmayın. + +Dəqiqlik = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Xatırlama = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ Sual: Xəta matrisinə əsasən bizim modelimiz necə işlədi? Cavab: O qədər də pis deyildi. Nəzərəçarpacaq qədər doğru neqativlər olmasına baxmayaraq, az da olsa yanlış neqativlər var. + +TP/TN və FP/FN-nin xəta matrisinin xəritələşdirilməsinin köməyi ilə əvvəllər gördüyümüz şərtlərə yenidən baxaq: + +🎓 Dəqiqlik: TP/(TP + FP) Alınmış nümunələr arasında müvafiq nümunələrin payı (məsələn, hansı etiketlər düzgün etiketlənib) + +🎓 Xatırlama: TP/(TP + FN) Yaxşı etiketlənmiş və ya etiketlənməmiş fərqi olmadan, əldə edilmiş müvafiq nümunələrin bir hissəsi + +🎓 f1-balı: (2 * dəqiqlik * xatırlama)/(dəqiqlik + xatırlatma) Ən yaxşısı 1, ən pisi isə 0 olmaqla dəqiqlik və xatırlatmanın çəkili ortalaması + +🎓 Dəstək: Alınan hər bir etiketin təkrarlanma sayı + +🎓 Dəqiqlik: (TP + TN)/(TP + TN + FP + FN) Nümunə üçün dəqiq proqnozlaşdırılmış etiketlərin faizi. + +🎓 Makro Ortalama: Etiket balanssızlığını nəzərə almadan hər bir etiket üçün ölçülməmiş orta göstəricilərin hesablanması. + +🎓 Çəkili Ortalama: Hər bir etiket üçün orta göstəricilərin hesablanması, etiket balanssızlığının hesaba qatılması və dəstəklərinə (hər etiket üçün doğru nümunələrin sayı) görə çəkiləndirilməsidir. + +✅ Modelinizin yanlış neqativlərinin sayını azaltmaq istədikdə hansı ölçümü izləməli olduğunuzu düşünürsünüz? + +## Bu modelin ROC əyrisini vizuallaşdırın + +[![Yeni başlayanlar üçün maşın öyrənməsi - ROC əyriləri ilə Logistik Reqressiyanın Performans Analizi](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "Yeni başlayanlar üçün maşın öyrənməsi - ROC əyriləri ilə Logistik Reqressiyanın Performans Analizi") + +> 🎥 ROC əyrilərinin qısa icmal videosu üçün yuxarıdakı şəkilin üzərinə klikləyin. + +'ROC' adlandırılan əyrini görmək üçün gəlin daha bir vizuallaşdırma edək: + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Matplotlib-dən istifadə edərək modelin [Receiving Operating Characteristic (Qəbul Əməliyyatlarının Xarakteristikası)](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) və ya ROC əyrisini qrafikləşdirək. ROC əyriləri daha çox bir klassifikatorun nəticəsinin doğru və ya yanlış pozitivləri baxımından bir təsvirini yaratmaq üçün istifadə olunur. "ROC əyrilərində doğru pozitivlərin nisbəti Y oxu üzrə, yanlış pozitivlərin nisbəti isə X oxu üzrə göstərilir." Əyrinin dikliyi və qrafikin orta xətti ilə əyri arasındakı məsafə önəm daşıdığına görə sürətlə yuxarı doğru çıxan və xətti keçən bir əyri istəyirsiniz. Bizim situasiyada, başlanğıcda yanlış pozitivlər var və daha sonra əyri düzgün bir şəkildə yuxarı və aşağı doğru gedir. + +![ROC](../images/ROC_2.png) + +Yekun olaraq 'Əyrinin Aşağısındakı Sahə'-ni (ƏAS) hesablamaq üçün Scikit-learn-ün [`roc_auc_score` metodundan](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) istifadə edin: + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` + +Nəticə `0.9749908725812341`-ə bərabərdir. ƏAS əmsalının 0 ilə 1 arasında dəyişdiyini və 100% düzgün işləyən modelin ƏAS əmsalının 1-ə bərabər olduğunu nəzərə alsaq, daha yüksək xal istəməyiniz normaldır. İndiki durumda modelimiz _çox yaxşıdır_. + +Klassifikasiya ilə bağlı gələcək dərslərdə, modelin balını yüksəltmək üçün necə iterasiyalar etməyi öyrənəcəksiniz. Amma indilik bu qədər bəsdir. Reqressiya dərslərini bitirdiyinizə görə sizi təbrik edirik! + +## 🚀 Məşğələ + +Logistik reqressiya mövzusunda öyrəniləsi hələ çox şey var. Amma ən yaxşı öyrənmə təcrübə etməkdir. Bunun üçün dərsdəki analizə bənzər bir dataset tapın və onunla bir model qurun. Nə öyrəndiniz? Maraqlı datasetlər üçün [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) yoxlaya bilərsiniz. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Logistik reqressiyanın praktiki istifadələri haqqında olan [bu məqalənin](https://web.stanford.edu/~jurafsky/slp3/5.pdf) ilk bir neçə səhifəsini oxuyun. İndiyə qədər öyrəndiyimiz bu və ya digər növ reqressiya tapşırıqları üçün daha uyğun olan istifadə halları haqqında düşünün. Ən yaxşısı hansı olardı? + +## Tapşırıq + +[Bəzi Reqressiyaların yenidən sınanması](assignment.az.md) \ No newline at end of file diff --git a/2-Regression/4-Logistic/translations/assignment.az.md b/2-Regression/4-Logistic/translations/assignment.az.md new file mode 100644 index 0000000000..98e43e5ff9 --- /dev/null +++ b/2-Regression/4-Logistic/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Bəzi Reqressiyaların yenidən sınanması + +## Təlimatlar + +Bu dərsdə siz balqabaqlarla bağlı olan məlumatların alt setindən istifadə etdiniz. İndi ilkin məlumatlara qayıdın və həmin dataların hamısının təmizlənmiş, standartlaşdırılmış formasından istifadə edərək Logistik Reqressiya modeli qurun. + +## Qiymətləndirmə + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | əla formada izah edilmiş və performansı güclü olan model təqdim edilib | minimal funksionallıqda bir model təqdim edilib | aşağı və ya qeyri funskionallıqlı model təqdim edilmişdir | \ No newline at end of file diff --git a/2-Regression/translations/README.az.md b/2-Regression/translations/README.az.md new file mode 100644 index 0000000000..44d9f817d9 --- /dev/null +++ b/2-Regression/translations/README.az.md @@ -0,0 +1,39 @@ +# Maşın Öyrənməsi üçün reqressiya modelləri +## Regional mövzu: Şimali Amerikada balqabaq qiymətləri üçün reqressiya modelləri 🎃 + +Şimali Amerikada balqabaqlar tez-tez Hellouin bayramı üçün qorxunc üz formasında çərtilirlər. Gəlin bu tərəvəz haqqında maraqlı faktları öyrənək! + +![jack-o-lanterns](../images/jack-o-lanterns.jpg) +>Beth Teutschmann tərəfindən çəkilmiş şəkil. Mənbə: Unsplash + +## Nə öyrənəcəksiniz + +[![Reqressiyaya giriş](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Reqressiya giriş videosu - İzləmək üçün klikləyin!") +> 🎥 Bu dərsə sürətli giriş videosu üçün yuxarıdakı şəkilə klikləyin. + +Bu bölmədəki dərslər maşın öyrənməsi konteksti çərçivəsində reqressiyaların növlərini əhatə edir. Reqressiya modelləri dəyişənlər arasındakı _əlaqəni_ təyin etməyə kömək edir. Bu model tipi dəyişənlər arası əlaqəni data nöqtələri vasitəsilə analiz edərək üzə çıxarır və bunun sayəsində uzunluq, temperatur və ya yaş kimi dəyərləri təxmin edə bilir. + +Bu dərslər seriyasında, xətti və məntiqi reqressiyalar arasındakı fərqi, nə zaman hansını seçməli olduğunuzu öyrənəcəksiniz. + +[![Yeni başlayanlar üçün ML- Maşın Öyrənməsi üçün reqressiya modellərinə giriş](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "Yeni başlayanlar üçün ML- Maşın Öyrənməsi üçün reqressiya modellərinə giriş") + +> 🎥 Reqressiya modellərinə giriş üçün yuxarıdakı şəkilin üzərinə klikləyin. + +Bu dərslər qrupunda siz data mühəndisləri üçün ümumi mühit olan notbukları maşın öyrənmə tapşırıqlarında idarə etmək üçün Visual Studio Code-u necə konfiqurasiya etməli olduğunuzu öyrənəcəksiniz. Siz maşın öyrənməsi üçün olan Scikit-learn kitabxanası haqqında öyrənəcək və bu fəsildə Reqressiya modellərinə diqqət yetirərək ilk modellərinizi quracaqsınız. + +> Reqressiya modelləri ilə işləmək haqqında məlumat almanıza kömək olacaq az-kod yanaşmalı alətlər də mövcuddur. Bu tapşırıq üçün olan [Azure ML-i](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) sınaqdan keçirin. + +### Dərslər + +1. [Ticarət alətləri](../1-Tools/translations/README.az.md) +2. [Datanın idarə olunması](../2-Data/transalations/README.az.md) +3. [Xətti and polinomial reqressiya](../3-Linear/translations/README.az.md) +4. [Logistik reqressiya](../4-Logistic/translations/README.az.md) + +### Təşəkkürlər + +"Reqressiya ilə ML" [Jen Looper](https://twitter.com/jenlooper) tərəfindən ♥️-lə yazılmışdır. + +♥️ Quizlərə töhvə verənlər: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) və [Ornella Altunyan](https://twitter.com/ornelladotcom) + +Balqabaq data seti [Kaagle-dakı bu proyekt](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) tərəfindən məsləhət görülmüşdür və datalar Amerika Birləşmiş Ştatlarının Kənd Təsərrüfatı Nazirliyi tərəfindən dərc olunmuş [Xüsusi Bitkilər Terminal Bazarlarının Standart Hesabatlarından](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) götürülmüşdür. Paylanmanı normallaşdırmaq üçün müxtəlifliyə görə rəng əsaslı bəzi nöqtələr əlavə etmişik. Bu məlumatlar publik domendədir. \ No newline at end of file diff --git a/3-Web-App/1-Web-App/translations/README.az.md b/3-Web-App/1-Web-App/translations/README.az.md new file mode 100644 index 0000000000..6725a8d215 --- /dev/null +++ b/3-Web-App/1-Web-App/translations/README.az.md @@ -0,0 +1,343 @@ +# ML modeli istifadə etmək üçün veb tətbiq yaradaq + +Bu dərsdə ML modelini dünyamızdan tamamilə kənar data toplusu ilə öyrədəcəyik: _Ötən əsrdə UFO müşahidələri_, nümunəsi NUFORC verilənlər bazasından mənbə götürmüşdür. + +Nələr öyrənəcəksiniz: + +- Öyrədilmiş modeli necə pikl etmək ("turşuya qoymaq") (uzunmüddətli istifadə üçün) olar. +- Bu modeli Flask proqramında necə istifadə etmək olar + +Məlumatları təmizləmək və modelimizi öyrətmək üçün noutbuklardan istifadəni davam etdirəcəyik. Prosesi bir addım irəli aparıb modeli “yabanı mühitdə” istifadə etməklə təcrübə apara bilərsiniz: Veb tətbiq daxilində bunu etmək üçün Flask istifadə edərək veb proqram qurmalısınız. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/?loc=az) + +## Proqram yaratmaq + +Maşın öyrənmə modellərini emal etmək üçün veb tətbiq yaratmağın bir neçə üsulu var. Veb arxitekturası modelin öyrədilməsinə birbaşa təsir göstərə bilər. Fərz edin ki, data ilə bağlı elmi qrupda proqram daxilində istifadə etməyinizi istədikləri modeli öyrədiblər. + +### Mülahizələr + +Soruşmalı olduğunuz çoxlu suallar var: + +- **Bu veb yoxsa mobil tətbiqdir?** Əgər mobil tətbiq yaradırsınızsa və tətbiqi IoT konteksində istifadə edəcəksinizsə, modeli Android və ya iOS tətbiqdə istifadə etmək üçün [TensorFlow Lite](https://www.tensorflow.org/lite/) istifadə edə bilərsiniz. +- **Model harada yerləşəcək?** Bulud yoxsa lokal yaddaşda? +- **Oflayn dəstək.** Tətbiq oflayn da işləməlidirmi? +- **Modeli öyrətmək üçün hansı texnologiya istifadə edilmişdir?** Seçilmiş texnologiya istifadə etməli olduğunuz alətlərə təsir göstərə bilər. + - **TensorFlow.** Məsələn, modeli TensorFlow istifadə edərək öyrədirsinizsə, ekosistem TensorFlow modelini veb proqramında istifadə etmək üçün çevirmək/dəyişdirmək imkanı verir. [TensorFlow.js](https://www.tensorflow.org/js/). + - **PyTorch.** Əgər modeli [PyTorch](https://pytorch.org/) ilə öyrədirsinizsə, onu [ONNX](https://onnx.ai/) istifadə edərək JavaScript veb tətbiqində [Onnx Runtime](https://www.onnxruntime.ai/) işlədə bilən xüsusi (Open Neural Network Exchange) formata eksport edə bilərsiniz. Bu seçim növbəti dərsdə Scikit tərəfindən öyrənilən model üçün araşdırılacaq. + - **Lobe.ai və ya Azure Custom Vision** Əgər modeli ML SaaS (Xidmət kimi Proqram) sistemi kimi [Lobe.ai](https://lobe.ai/) və ya [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) istifadə edərək öyrədirsinizsə, bu tip proqram təminatı bir çox platformalar üçün onu eksport etmək imkanı, həmçinin onlayn tətbiq tərəfindən buludda sorğulanan növbəli API yaradılmasını təmin edir. + +Bütöv bir Flask veb tətbiqi yaradaraq veb brauzerdə modeli öyrətmək imkanınız var. Bunu həm də JavaScript konteksində TensorFlow.js istifadə edərək də edə bilərsiniz. + +Məqsədə uyğun olaraq, Python əsaslı noutbuklarla işlədiyimizə görə öyrədilmiş modeli Python-da qurulmuş veb tətbiqi ilə oxuna bilən formatda daxil etmək üçün atmalı olduğunuz addımları araşdıraq. + +## Alət + +Bu tapşırığı yerinə yetirmək üçün iki alətə ehtiyacınız var: Python-da işləyən Flask və Pickle. + +✅ [Flask](https://palletsprojects.com/p/flask/) nədir? Yaradıcıları tərəfindən 'mikro-çərçivə' kimi adlandırılan Flask, Python istifadə edərək veb çərçivələrin əsas xüsusiyyətlərini və veb səhifələr yaratmaq üçün şablon mexanizmini təmin edir. Flask yaratmaq üçün [bu öyrənmə moduluna](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) nəzər yetirin. + +✅ [Pickle](https://docs.python.org/3/library/pickle.html) nədir? Pickle 🥒, Python obyekt strukturunu seriallaşdıran və deseriallaşdıran bir Python moduludur. Modeli 'pickle' etdiyiniz zaman, onun strukturunu veb üçün seriallaşdırır və dəqiqləşdirirsiniz. Diqqət edin ki pickle mahiyyətcə təhlükəsiz deyil. Bu səbəbdən faylı 'un-pickle' etməyə çağrıldıqda diqqətli olmaq lazımdır. 'pickle' edilmiş fayl `.pkl` uzantısına sahib olur. + +## Məşğələ - datanı təmizlə + +Bu dərsdə [NUFORC](https://nuforc.org) (Milli UFO Melumatlar Mərkəzi) tərəfindən toplanmış 80,000 UFO görülməsi məlumatlarından istifadə edəcəksiniz. Bu məlumatlar UFO görmələrin maraqlı təsvirlərini əhatə edir, məsələn: + +- **Əhatəli nümunə.** "Bir adam gecə otlu bir tarlada parlayan işıq şüasından çıxır və Texas Instruments dayanacağına tərəf qaçır". +- **Qısa nümunə.** "İşıq bizi təqib edir". + +[ufos.csv](../data/ufos.csv) cədvəli görülmənin baş verdiyi `şəhər`, `ştat` and `ölkə`, obyektin `forması`, `coğrafi enlik` və `çoğrafi uzunluq` sütunlarına bölün. + +Bu dərsə daxil olan boş [qeyd notbuk](../notebook.ipynb) verilmişdir. + +1. `pandas`, `matplotlib`, və `numpy` kitabxanalarını və ufolar cədvəlini keçən dərs olduğu kimi daxil edin. Sadə verilənlər toplusuna nəzər yetirin: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. UFO məlumatlarını yeni başlıqlarla kiçik dataframə çevirin. `Ölkə` sütununda unikal dəyərləri yoxlayın. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. İndi isə, prosesi işlənməli olan datada lazımsız null dəyərləri silməklə və ancaq 1-60 saniyə arası görülmələri daxil etməklə qısalda bilərik: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Scikit-learn `LabelEncoder` kitabxanası ölkələr üçün növbəli dəyərləri rəqəmlərə keçirtmək üçündür: + + ✅ LabelEncoder datanı əlifba sırası ilə kodlaşdırır. + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Datanız belə görünməlidir: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## Məşğələ - modelini yarat + +Artıq modeli öyrətmək üçün məlumatları tədris və sınaq qruplarına bölməyə başlaya bilərsiniz. + +1. X vektorunda öyrətmək istədiyiniz 3 xüsusiyyəti seçin, və Y vektoru `Ölkə` olacaq. `Saniyələr`, `Coğrafi enlik`, `Coğrafi uzunluq` daxil edə bilməli və ölkənin `id` dəyərini geri qaytara bilməlisiniz. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. Məntiqi reqressiya testi istifadə etməklə modelinizi öyrədin: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +Dəqiqlik o qədər də pis deyil **(təxminən 95%)**. Təəcüblü deyil ki `Ölkə` və `Coğrafi enlik, Coğrafi uzunluq` məlumatları əlaqəlidir. + +Yaratdığımız model o qədər də inqilabi deyil, çünki `Ölkə`ni `Coğrafi enlik` və `Coğrafi uzunluq`dan çıxara bilməliyik. Bununla belə, təmizlədiyiniz, daxil etdiyiniz, daha sonra ilkin məlumatlardan öyrətməyə çalışdığımız məlumat datanı məşq etdirmək üçün faydalıdır. Bu modeli veb proqramında istifadə edək. + +## Məşğələ - modelini 'pikl' edək + +İndi, modelinizi _pikl_ etməyin vaxtıdır! Bunu bir neçə kod sətiri ilə edə bilərsiniz. Pikl(turşu) halına gələndən sonra, pikl modelinizi yükləyin və onu saniyə, coğrafi enlik və coğrafi uzunluq dəyərlərini ehtiva edən məlumat massivi ilə sınaqdan keçirin. + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +Model **'3'** qaytarır, hansıki Birləşmiş Krallığın kodudur. İnanılmaz! 👽 + +## Məşğələ - Flask tətbiq yarat + +İndi isə modeli çağırmaq və oxşar nəticələri qaytarmaq üçün Flask proqramı yarada bilərsiniz, lakin vizual olaraq daha xoşagəlimli olmalıdır. + +1. **web-app** adlanan bir qovluq yaratmaqla başlayın. Qovluq _notebook.ipynb_ faylının yanında _ufo-model.pkl_ faylınızın yerləşdiyi yerdə olmalıdır. + +1. Həmin qovluqda daha üç qovluq yaradın: daxilində **css** olan **static** qovluğu və **templates**. İndi aşağıdakı formada fayl və istiqamətlər olmalıdır: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Yekunlaşmış tətbiq üçün mənbə faylına nəzər yetirin. + +1. _web-app_ qovluğunda yaratmalı olduğunuz ilk fayl **requirements.txt** faylıdır. JavaScript tətbiqində _package.json_ faylı kimi, tətbiq tərəfindən tələb olunan faylları sıralayır. **requirements.txt** faylında aşağıdakı sətirləri əlavə edin: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. İndi isə, _web-app_ faylına keçməklə tətbiqi işə salın: + + ```bash + cd web-app + ``` + +1. Terminalınızda _requirements.txt_ faylında qeyd olunmuş kitabxanaları yükləmək üçün `pip install` yazın: + + ```bash + pip install -r requirements.txt + ``` + +1. Artıq daha üç fayl yaradaraq tətbiqi hazırlamağı yekunlaşdıra bilərik: + + 1. **app.py** faylını əsas qovluqda yaradın. + 2. **index.html** faylını _templates_ kataloqunda yaradın. + 3. **styles.css** faylını _static/css_ kataloqunda yaradın. + +1. _styles.css_ faylını aşağıdakı bir neçə dizayn skriptləri ilə yaradın: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. Daha sonra, _index.html_ faylını yaradın: + + ```html + + + + + 🛸 UFO görülməsini öncədən müəyyən etmək! 👽 + + + + +
+ +
+ +

Saniyə dəyəri, coğrafi enlik və corafi uzunluğa görə, hansı ölkə UFO gördüyünü bildirmişdir?

+ +
+ + + + +
+ +

{{ prediction_text }}

+ +
+ +
+ + + + ``` + + Bu faylda şablonlaşdırmaya diqqət yetirin. Tətbiq tərəfindən dəyişənlər ətrafında 'saqqal' sintaksisini görəcəksiniz, məsələn təxmin mətni kimi: `{{}}`. Həmçinin təxminin `/predict` istiqamətinə göndərən xüsusi form da var. + + Yekunda modelin emalı və proqnozların göstərilməsini təmin edən python faylını yaratmağa hazırsınız: + +1. `app.py` faylında aşağıdakıları əlavə edin: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 Ipucu: Flask istifadə edərək veb tətbiqi işə salanda [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) əlavə edərkən proqramınıza etdiyiniz istənilən dəyişiklik ani olaraq tətbiq olunacaq. Serveri yenidən başlatmağa ehtiyac olmayacaq. Ehtiyyatlı olun! Bu formatı real mühitdə aktiv etmək doğru olmaz. + +Əgər `python app.py` və ya `python3 app.py` işlədirsinizsə - veb-serveriniz daxili serverdə (lokalda) işə başlayır və bu zaman UFO-ların harada göründüyü barədə sualınıza cavab almaq üçün qısa formanı doldura bilərsiniz! + +Bunu etmədən öncə, `app.py` faylına nəzər yetirək: + +1. Əvvəlcə lazımi resurslar yüklənir və proqram başlayır. +1. Sonra model daxil edilir. +1. Daha sonra index.html lokal mühitdə göstərilir. + +`/predict` istiqamətində form yerləşdirilərkən birdən çox proses baş verir: + +1. Forma dəyişənləri toplanır və numpy massivinə çevrilir. Daha sonra modelə göndərilir və proqnoz geri qaytarılır. +2. Göstərilməsini istədiyimiz ölkələr onların proqnozlaşdırılan ölkə kodundan istifadə etməklə oxunaqlı mətn kimi yenidən göstərilir və həmin dəyər şablonda göstərilmək üçün index.html-ə geri göndərilir. + +Flask və pikl model ilə bu şəkildə bir model istifadə etmək nisbətən sadədir. Ən çətini proqnoz almaq üçün modelə göndərilməli olan məlumatların hansı formada olduğunu başa düşməkdir. Bütün bunlar modelin necə öyrədildiyindən asılıdır. Proqnoz əldə etmək üçün daxil edilməli üç məlumat nöqtəsi var. + +Peşəkar şəraitdə modeli öyrədən insanlarla onu veb və ya mobil proqramda istifadə edənlər arasında yaxşı ünsiyyətin nə qədər zəruri olduğunu görmək olar. Bizim şərtlər daxilində bu yalnız bir nəfərdir, siz! + +--- + +## 🚀 Rubrika + +Noutbukda işləyərək modeli Flask proqramına daxil etmək yerinə onu birbaşa Flask proqramında öyrədə bilərsiniz! Modeli `train` adlı istiqamət üzrə proqram daxilində öyrətmək üçün, məsələn, məlumatlarınız təmizləndikdən sonra Python kodunuzu notbukda çevirməyə cəhd edin. Bu metodu tətbiq etməyin müsbət və mənfi tərəfləri nələrdir? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/?loc=az) + +## Təkrarla və özün öyrən + +ML modellərini dərk etmək üçün veb tətbiq yaratmağın bir çox üsulu var. Maşın öyrənməsində istifadə etmək üçün veb tətbiqi yaratmağa JavaScript və ya Python-dan istifadə edə biləcəyiniz üsulların siyahısını hazırlayın. Arxitekturaya nəzər salın: model proqramda qalmalıdır yoxsa buludda? Ən son versiyaya necə daxil olardınız? Tətbiq olunan ML veb həlli üçün arxitektura modelini çəkin. + +## Tapşırıq + +[Başqa bir model yoxlayın](assignment.az.md) diff --git a/3-Web-App/1-Web-App/translations/assignment.az.md b/3-Web-App/1-Web-App/translations/assignment.az.md new file mode 100644 index 0000000000..c13afc173b --- /dev/null +++ b/3-Web-App/1-Web-App/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Başqa bir model yoxlayın + +## Təlimatlar + +Artıq öyrədilmiş reqressiya modeli ilə veb tətbiq qurduqdan sonra bu veb tətbiqini yenidən qurmaq üçün əvvəlki reqressiya dərsindəki modellərdən birini istifadə edin. Balqabaq datalarını əks etdirmək üçün mövcud üslubu saxlaya və ya fərqli dizayn edə bilərsiniz. Modelinizin təlim metodunu düzgün əks etdirmək üçün daxil edilən məlumatları dəyişdirdiyinizdən əmin olun. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Veb tətbiq buluda yüklənilib və gözlənildiyi kimi işləyir | Veb tətbiqin işində qusurlar var və ya yalnış cavablar qaytarır | Veb tətbiq düzgün işləmir | diff --git a/3-Web-App/translations/README.az.md b/3-Web-App/translations/README.az.md new file mode 100644 index 0000000000..c6d3171167 --- /dev/null +++ b/3-Web-App/translations/README.az.md @@ -0,0 +1,21 @@ +# ML modelini istifadə etmək üçün veb tətbiq yarat + +Kurrikulumun bu bölməsində tətbiqi ML mövzusu ilə tanış olacaqsınız: Scikit-learn modelini veb proqram daxilində proqnozlar vermək üçün istifadə oluna bilən fayl kimi necə saxlamaq olar. Model yadda saxlandıqdan sonra onu Flask-da qurulmuş veb tətbiqdə necə istifadə edəcəyinizi öyrənəcəksiniz. Əvvəlcə, müəyyən məlumatlardan istifadə edərək UFO müşahidələri ilə bağlı model yaradacaqsınız! Daha sonra hansı ölkənin UFO gördüyünü bildirdiyini təxmin etmək üçün coğrafi enlik və coğrafi uzunluq dəyəri ilə birlikdə saniyələri daxil etmə imkan verən veb tətbiq quracaqsınız. + +![UFO Dayanacağı](../images/ufo.jpg) + +Michael Herren tərəfindən çəkilmiş şəkil. Mənbə: Unsplash + +## Dərslər + +1. [Veb tətbiq yarat](../1-Web-App/README.md) + +## Təşəkkürlər + +"Veb tətbiq yarat" [Jen Looper](https://twitter.com/jenlooper) tərəfindən ♥️-lə yazılmışdır. + +♥️ Quizlər Rohan Raj tərəfindən hazırlanıb. + +Dataset [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings) platformasından götürülmüşdür. + +Veb tətbiqin arxitekturası [bu məqalə](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) və [bu layihə](https://github.com/abhinavsagar/machine-learning-deployment) üzərində Abhinav Sagar tərəfindən təklif olunmuşdur. diff --git a/4-Classification/1-Introduction/translations/README.az.md b/4-Classification/1-Introduction/translations/README.az.md new file mode 100644 index 0000000000..9df0cd00ff --- /dev/null +++ b/4-Classification/1-Introduction/translations/README.az.md @@ -0,0 +1,299 @@ +# Qruplaşdırıcı bölməsinə giriş + +Bu bölmədəki 4 dərsdə ənənəvi maşın öyrənməsinin fundamental mövzusu olan _qruplaşdırıcı_ haqqında öyrənəcəksiniz. Biz Asiyanın və Hindistanın möhtəşəm mətbəxləri üçün olan data massivi istifadə edərək müxtəlif qruplaşdırıcı alqoritmlərinin üzərindən keçəcəyik. Ümid edək ki, acsınız! + +![sadəcə bir çimdik!](../images/pinch.png) + +> Bu dərslərdə pan-Asiya mətbəxlərini qeyd edin! [Jen Looper](https://twitter.com/jenlooper) tərəfindən təsvir + +Qruplaşdırıcı [nəzarətli öyrənmə](https://wikipedia.org/wiki/Supervised_learning)nin bir formasıdır və reqressiya texnikaları ilə çoxlu ortaq cəhətləri var. Əgər desək ki, maşın öyrənməsi dəyərləri proqnozlaşdırmaqdan və obyektləri etiketləməkdən ibarətdir, o zaman qruplaşdırıcını ümumi 2 qrupa ayıra bilərik: _ikili qruplaşdırıcı_ və _çox sinifli qruplaşdırıcı_. + +[![Qruplaşdırıcı bölməsinə giriş](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Qruplaşdırıcı bölməsinə giriş") + +> 🎥 Yuxarıdakı təsvirə klikləməklə videoya baxın: John Guttag MIT-də qruplaşdırıcı mövzusunu təqdim edir + +Yadda saxlayın: + +- **Xətti reqressiya** sizə dəyişənlər arasındakı əlaqəni proqnozlaşdırmağa və yeni məlumatın həmin xəttə nəzərən harada yerləşəcəyi barədə həqiqətə yaxın olan təxminlər etməyə kömək etdi. Beləliklə siz, _balqabağın Sentyabrdakı qiyməti ilə Dekabrdakı qiymətinin arasındakı fərq nə qədər olar_ kimi suallara təxmini cavablar verə biləcəksiniz. +- **Lojistik reqressiya** sizə "ikili kateqoriyaları" aydınlaşdırmağa kömək etdi: bu qiymət nöqtəsində _balqabaq narıncıdır, yoxsa narıncı deyil_? + +Qruplaşdırıcı müxtəlif alqoritmləri istifadə edərək verilənin etiketini və ya sinfini təyin etmək üçün başqa yollar tapmağa imkan verir. Gəlin inqrediyentləri analiz etməklə mətbəxin aid olduğu yeri tapa bilib-bilməyəcəyimizi görmək üçün mətbəx datası ilə işləyək. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/?loc=az) + +> ### [Bu dərs R proqramlaşdırma dili ilə də əlçatandır!](../solution/R/lesson_10.html) + +### Giriş + +Qruplaşdırıcı bir maşın öyrənmə tədqiqatçısının və bir data mühəndisinin ən əsas fəaliyyətlərindən biridir. İkili dəyərin qruplaşdırılması ("bu imeyl spamdır, yoxsa spam deyil?") kimi sadə məsələlərdən komputer görüşü istifadə edərək qarışıq şəkillərin qruplaşdırılması və seqmentasiyası məsələlərinə qədər datanı siniflərə ayırmaq və data haqqında suallar verə bilmək hər zaman faydalıdır. + +Prosesi daha elmi dildə izah etsək, sizin qruplaşdırıcı metodunuz praqnozlaşdırıcı bir model yaradaraq sizə giriş və çıxış dəyərləri arasında əlaqəni təsvir etməyə imkan verir. + +![ikili və çox sinifli qruplaşdırıcı](../images/binary-multiclass.png) + +> Qruplaşdırıcı alqoritmlərinin həll etməli olduğu ikili və çox sinifli qruplaşdırıcı problemləri. [Jen Looper](https://twitter.com/jenlooper) tərəfindən infoqraf + +Datanı təmizləməyə, vizuallaşdırmağa və ML tapşırıqlarımız üçün hazırlamağa başlamazdan əvvəl gəlin, maşın öyrənməsinin hansı üsullarla datanı qruplaşdırmaq üçün istifadə edilə biləcəyini öyrənək. + +Ənənəvi maşın öyrənməsi vasitəsilə qruplaşdırıcı əsasını [statistika](https://wikipedia.org/wiki/Statistical_classification)dan alır və _X xəstəliyinin yaranma ehtimalı_nı müəyyən etmək üçün `siqaret çəkən`, `çəki` və `yaş` kimi xarakteristikalardan istifadə edir. Nəzarətli öyrənmə metodu olduğuna görə daha əvvəl yerinə yetirdiyiniz reqressiya tapşırıqlarında olduğu kimi datanız etiketlənir və ML alqoritmləri datasetin siniflərini (ya da 'xarakteristikalar'ını) qruplaşdırmaq və proqnozlaşdırmaq, həmçinin onları qruplara bölmək və ya nəticə çıxarmaq üçün həmin etiketlərdən istifadə edir. + +✅ Bir anlıq mətbəxlər haqqında dataset təsəvvür edin. Çox sinifli model nələrə cavab verə bilərdi? İkili model nələrə cavab verə bilərdi? Əgər verilən mətbəxdə samanlıq güldəfnəsinin istifadə olunub olunmadığını müəyyən etmək istəsəniz nə baş verəcək? Deyək ki, bir ərzaq çantasında sizə ulduz anis, ənginar, gül kələmi və yaban turpu təqdim olunur və siz bu ərzaqlardan ənənəvi Hindistan yeməyi hazırlaya bilib bilməyəcəyinizi öyrənmək istəyirsiniz. Bu zaman nə baş verəcək? + +[![Çılğın sirli səbətlər](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Çılğın sirli səbətlər") + +> 🎥 Yuxarıdakı təsvirə klikləməklə videoya baxın. 'Chopped' proqramının xülasəsini belə verə bilərik: Aşpazlar 'sirli səbət'də olan təsadüfi seçilmiş inqrediyentlərdən yemək hazırlamalıdırlar. Şübhəsiz ki, burada ML modeli köməyə çatardı! + +## Salam 'qruplaşdırıcı' + +Bu mətbəx dataseti haqqında soruşmaq istədiyimiz sual həqiqətən də çox sinifli məsələ sualıdır, çünki biz bir neçə mümkün milli mətbəx ilə işləyə bilərik. İnqrediyentlər verilərsə, data bu siniflərdən hansına uyğun gələr? + +Scikit-learn, həll etmək istədiyiniz məsələdən asılı olaraq datanı qruplaşdırıcı üçün bir neçə müxtəlif alqoritm təklif edir. Növbəti iki dərsdə bu alqoritmlərdən bir neçəsi haqqında öyrənəcəksiniz. + +## Tapşırıq - datanı təmizləyin və balanslaşdırın + +Layihəyə başlamazdan öncə yerinə yetirilməli olan ilk tapşırıq - daha yaxşı nəticələr əldə etmək məqsədilə datanı təmizləmək və balanslaşdırmaqdır. Olduğunuz qovluqla eyni qovluqda olan boş _notebook.ipynb_ faylı ilə başlayın. + +Quraşdırılmalı olan ilk komponent [imblearn](https://imbalanced-learn.org/stable/)-dür. Bu, datanı daha yaxşı balanslaşdırmağa imkan verən Scikit-learn komponentidir (bu tapşırıq haqqında az sonra öyrənəcəksiniz). + +1. `imblearn` komponentini quraşdırmaq üçün, `pip install` komandasını icra edin: + + ```python + pip install imblearn + ``` + +2. Datanızı köçürmək və vizuallaşdırmaq üçün lazım olan komponentləri köçürün. Həmçinin `imblearn`-dən `SMOTE`-u köçürün. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Artıq datanı oxuyaraq köçürmək üçün hazırsınız. + +3. Növbəti tapşırıq datanı köçürmək olacaq: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + `read_csv()` funksiyasını çağırmaq _cusines.csv_ faylının içindəkiləri oxuyacaq və onları `df` verilənində yerləşdirəcək. + +4. Datanın formasına baxaq: + + ```python + df.head() + ``` + + İlk 5 sətir aşağıdakı kimidir: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +5. Bu data haqqında məlumat əldə etmək üçün `info()` funksiyasını çağırın: + + ```python + df.info() + ``` + + Nəticə aşağıdakı kimi olacaq: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Tapşırıq - mətbəxlər haqqında öyrənin + +Tapşırıq getdikcə maraqlı olmağa başlayır. Gəlin datanın mətbəxlər üzrə necə paylandığını tapaq + +1. `barh()` funksiyasını çağırmaqla datanın zolaqlı diaqram kimi təsvirini əldə edin: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![mətbəx datasının paylanması](../images/cuisine-dist.png) + + Datada olan mətbəxlərin sayı azdır, lakin data bərabər paylanmayıb. Bunu düzəldə bilərsiniz! Başlamazdan əvvəl biraz daha araşdırın. + +2. Hər mətbəx üçün nə qədər data olduğunu tapın və onları çap edin: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + Nəticə aşağıdakı kimi olacaq: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## İnqrediyentləri kəşf edin + +Artıq datanı daha dərindən analiz edib hər mətbəxdə daha çox istifadə olunan inqrediyentləri öyrənə bilərsiniz. Mətbəxlər arasındakı qarışıqlığı aradan qaldırmaq üçün təkrarlanan datanı təmizləməlisiniz, gəlin bunun haqqında öyrənək. + +1. İnqrediyentlərin cədvəlini yaratmaq üçün `create_ingredient_df()` adlı Python funksiyası yaradın. Bu funksiya lazımsız olan sütunu çıxarmaqla başlayacaq və inqrediyentləri saylarına görə sıralayacaq: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Bundan sonra bu funksiyanı mətbəx üzrə ən çox istifadə olunan 10 inqrediyenti tapmaq üçün istifadə edə bilərsiniz. + +2. `create_ingredient_df()` funksiyasını çağırın və nəticənin diaqramını əldə etmək üçün `barh()` funksiyasını çağırın: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![tay](../images/thai.png) + +3. Eynisini Yapon mətbəxi datası üçün edin: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![yapon](../images/japanese.png) + +4. Çin mətbəxində istifadə olunan inqrediyentlər üçün də: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![çin](../images/chinese.png) + +5. Hindistan mətbəxində istifadə olunan inqrediyentlər üçün də: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![hindistan](../images/indian.png) + +6. Son olaraq, Koreya mətbəxində istifadə olunan inqrediyentlər üçün: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![koreya](../images/korean.png) + +7. Növbəti addımda `drop()` funksiyasını çağıraraq ən çox istifadə olunan və ayrı mətbəxlər arasında qarışıqlıq yaradan inqrediyentləri çıxarın: + + Hamı düyünü, sarımsağı və zəncəfili sevir! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Dataseti balanslaşdırın + +Datanı təmizlədikdən sonra, onu balanslaşdırmaq üçün [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - istifadə edin. + +1. `fit_resample()` funksiyasını çağırın. Bu funksiya interpolyasiya üsulu ilə yeni nümunələr yaradır. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Datanı balanslaşdırdırdan sonra onu qruplaşdırarkən daha yaxşı nəticələr əldə edəcəksiniz. İkili qruplaşdırıcını nümunə götürün. Əgər datanızın böyük bir hissəsi bir sinfə aiddirsə, həmin sinfə aid daha çox data olduğu üçün ML modeli həmin sinfi daha yüksək tezliklə proqnozlaşdıracaq. Datanı balanslaşdırmaq bu data əyrilərini yox edərək tarazsızlığı aradan qaldırır. + +2. Artıq hər bir inqrediyent üzrə etiketlərin sayına baxa bilərsiniz: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Nəticəniz belə olacaq: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + Artıq data təmiz, balanslı və çox ləzzətlidir! + +3. Sonuncu addım balanslaşdırılmış datanı etiketlər və xarakteristikalar da daxil olmaqla fayla eksport oluna bilən bir halda saxlamaqdır: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +4. `transformed_df.head()` və `transformed_df.info()` funksiyalarını çağırmaqla dataya sonuncu dəfə nəzər sala bilərsiniz. Bu datanın bir nüsxəsini gələcək dərslərdə istifadə etmək üçün saxlayın: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Bu yeni faylı artıq data qovluğunda tapa bilərsiniz. + +--- + +## 🚀 Məşğələ + +Bu proqramda bir neçə maraqlı dataset var. `data` qovluqlarına baxın. Bu qovluqlardan hansısa birində ikili və çox sinifli qruplaşdırıcı üçün uyğun ola biləcək datasetlər varmı? Onlar haqqında hansı sualları verərdiniz? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +SMOTE API-ni tədqiq edin. Bu ən çox hansı hallarda istifadə olunur? Hansı problemləri həll edir? + +## Tapşırıq + +[Qruplaşdırıcı metodlarını tədqiq edin](assignment.az.md) diff --git a/4-Classification/1-Introduction/translations/assignment.az.md b/4-Classification/1-Introduction/translations/assignment.az.md new file mode 100644 index 0000000000..a2988c4798 --- /dev/null +++ b/4-Classification/1-Introduction/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Qruplaşdırıcı metodlarını tədqiq edin + +## Təlimatlar + +[Scikit-learn sənədlərində](https://scikit-learn.org/stable/supervised_learning.html) datanı qruplaşdırmağın çoxlu yollarını tapacaqsınız. Bu sənədlərdə kiçik bir axtarışa çıxın: məqsədiniz qruplaşdırma metodlarına nəzər salmaq və proqramda olan dataseti, bu dataset haqqında verə biləcəyiniz bir sualı və qruplaşdırma metodunu uyğunlaşdırmaqdır. Elektron cədvəl və ya .doc faylında bir cədvəl yaradıb həmin qruplaşdırma metodunun dataset üzərində necə işlədiyini izah edin. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Təqdim olunan sənəd 5 alqoritm ilə yanaşı qruplaşdırma metodunu da əhatə edir. İcmal detallıdır və yaxşı izah olunub. | Təqdim olunan sənəd 3 alqoritm ilə yanaşı qruplaşdırma metodunu da əhatə edir. İcmal detallıdır və yaxşı izah olunub. | Təqdim olunan sənəd 3-dən az alqoritmi, eləcə də qruplaşdırma metodunu əhatə edir və icmal nə detallıdır, nə də yaxşı izah olunub. | diff --git a/4-Classification/2-Classifiers-1/translations/README.az.md b/4-Classification/2-Classifiers-1/translations/README.az.md new file mode 100644 index 0000000000..20b22e4a3f --- /dev/null +++ b/4-Classification/2-Classifiers-1/translations/README.az.md @@ -0,0 +1,242 @@ +# Mətbəx qruplaşdırıcıları - hissə 1 + +Bu dərsdə əvvəlki dərsdən əldə etdiyimiz balanslı və təmizlənmiş mətbəx datasetindən istifadə edəcəksiniz. + +Bu dataseti müxtəlif qruplaşdırıcılarda istifadə edərək _inqrediyentlər əsasında milli mətbəxləri təxmin edəcəksiniz_. Bunu edərkən alqoritmi başqa hansı qruplaşdırma tapşırıqlarında istifadə edə biləcəyinizi də öyrənəcəksiniz. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/?loc=az) + +# Hazırlıq + +Sizin [1-ci dərsi](../../1-Introduction/translations/README.az.md) bitirdiyinizi güman edirik. Əlavə olaraq isə bu 4 dərsdə istifadə edəcəyimiz _cleaned_cuisines.csv_ faylının `/data` qovluğunda olduğundan əmin olun. + +## Tapşırıq - milli mətbəxi təxmin et + +1. Bu dərsin qovluğunda olan _notebook.ipynb_ faylını açın və aşağıdakı kodu (Pandas kitabxanasını) daxil edin: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Yuxarıdakı kod, məlumatları belə çap edəcəkdir: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. İndi isə digər kitabxanaları da əlavə edin: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. X və y koordinatlarını öyrənmək üçün iki data qrupuna ayırın. `cuisine` data qrupunun adı ola bilər: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Nəticə belə görünəcək: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. `Unnamed: 0` və `cuisine` sütunlarını `drop()` kodu ilə silin. Qalan məlumatları öyrənmə alqoritmi üçün saxlayın: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Artıq məlumatlar belə olacaq: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +Modelimizi öyrətməyə hazır sayılırıq! + +## Qruplaşdırıcı seçimi + +Artıq datanız təmizlənib və öyrədilmək üçün hazırdır. İndi siz bu iş üçün hansı alqoritmi seçməli olduğunuza qərar verməlisiniz. + +**Scikit-learn** kitabxanası qruplaşdırmanı "Supervised Learning (Nəzarətli öyrənmə)" adı altında qruplaşdırır və siz burada çoxlu qruplaşdırma üsullarını tapa bilərsiniz. [Seçimlər](https://scikit-learn.org/stable/supervised_learning.html) ilk baxışdan həddindən artıq çox görünəcəkdir. Aşağıdakı metodların hamısı qruplaşdırma texnikalarıdır: + +- **Linear Models** (Xətti modellər) +- **Support Vector Machines** (Dəstək Vektor Maşını) +- **Stochastic Gradient Descent** (Stoxastik qradient eniş) +- **Nearest Neighbors** (Yaxın qonşular) +- **Gaussian Processes** (Qauss emalları) +- **Decision Trees** (Qərar sxemləri) +- **Ensemble methods (voting Classifier)** Ansambl üsullar (səsvermə əsaslı qruplaşdırma) +- Çoxsaylı etiket və çoxsaylı çıxış alqoritmləri (multiclass and multilabel classification, multiclass-multioutput classification) + +> Siz həmçinin [qruplaşdırma üçün neyron şəbəkələr](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification) də istifadə edə bilərsiniz, lakin bu mövzu bizim dərsimizdən kənardır. + +### Hansı qruplaşdırıcı seçilməlidir? + +İndi siz hansı qruplaşdırıcı seçməlisiniz? Adətən bunun cavabını bir çox üsulu yoxlamaq və daha yaxşı nəticə göstərəni seçməklə tapmaq olur. Yaratdığınız data qruplarını **Scikit-learn** kitabxanasında [yanbayan müqayisə](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) edə bilərsiniz. Aşağıda nümunə kimi KNeighbors, SVC two ways, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB and QuadraticDiscrinationAnalysis alqoritmləri müqayisəsi göstərilib: + +![qruplaşdırıcıların müqayisəsi](../images/comparison.png) +> Qrafiklər Scikit-learn sənədlərindən yaradılmışdır + +> Auto ML platforması bulud mühitində belə nəticələri özü müqayisə edərək sizə ən yaxşı alqoritmi tapmaqda kömək edə bilər. [Buradan](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) pulsuz yoxlaya bilərsiniz. + +### Daha yaxşı yanaşma + +Özünüz təxmin etməkdənsə, [ML hazır cavablar siyahısından](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) ideyalara əməl edərək daha yaxşı seçim edə bilərsiniz. Misal üçün bizim çoxsaylı etiketləndirmə məsələmizdə bir neçə seçim vardır: + +![çoxsaylı etiketləmə problemlərinə hazır cavablar](../images/cheatsheet.png) +> Çoxsaylı etiket qruplaşdırma seçimləri üçün Microsoft Alqoritm Hazır Cavablar siyahısından bir fraqment + +✅ Bu hazır cavablar siyahısını yüklə, çap et və divardan as! + +### Əsaslandırma + +Gəlin baxaq biz seçimimizi aşağıdakı şərtlərə əsasən də əsaslandıra bilirikmi: + +- **Neyron şəbəkələr çox qəlizdir**. Bizim təmiz və sadə datasetimizi yalnız öz komputerimizdə öyrədəcəyimizi nəzərə alsaq, neyron şəbəkələr bu tapşırıq üçün çox çətin bir seçimdir. +- **İki-etiket qruplaşdırıcısına yox**. Biz iki-etiket qruplaşdırıcısı istifadə etmirik, buna görə də digər oxşar seçimləri nəzərə almırıq. +- **Qərar sxemləri və ya logistik reqressiya işi görə bilər**. Qərar sxemi işimizə yaraya bilər. Logistik reqressiyə isə çoxsaylı etiket datası üçün istifadə oluna bilər. +- **Çoxsaylı etiket gücləndirilmiş qərar sxemləri başqa problemləri həll edir**. Çoxsaylı etiket gücləndirilmiş qərar sxemləri parametirsiz tapşırıqlar üçün daha uyğundur, misal üçün sıralandırma tapşırıqları. Lakin bizim üçün uyğun deyil. + +### Scikit-learn istifadə etmək + +Data analizi üçün Scikit-learn istifadə edəcəyik. Scikit-learn kitabxanasında logistik reqressiyanın istifadəsi üçün bir çox üsul mövcuddur. Hansı parametrlərin ötürülməsinin lazım olduğunu bilmək üçün [sənədlə](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression) tanış olun. + +Scikit-learn kitabxanasında logistik reqressiyanı icra etmək üçün bizə əsas iki parametr ötürmək vacibdir - `multi_class` və `solver`. `multi_class` parametri müəyyən olunmuş davranışı bildirir. `solver` parametri isə istifadə olunacaq alqoritmi təyin edir. Nəzərə almaq lazımdır ki, hər alqoritm `multi_class` parametri ilə uyğunlaşmır. + +Sənədlərə əsasən `multi_class` seçimində aşağıdakı öyrənmə alqoritmləri seçilə bilər: + +- **one-vs-rest (OvR) sxemi istifadə edənlər**, əgər `multi_class` parametri `ovr` seçilmişdirsə. +- **cross-entropy loss (çarpaz-entropiya itkisi) istifadə edənlər**, əgər `multi_class` parametri `multinomial` seçilmişdirsə. (Hazırda `multinomial` seçimi yalnız ‘lbfgs’, ‘sag’, ‘saga’ və ‘newton-cg’ alqoritmləri tərəfindən dəstəklənir)" + +> 🎓 Burada `'scheme'` parametri 'ovr' (one-vs-rest) və ya 'multinomial' ola bilər. Logistik reqressiya əslində ikili qruplaşdırma üçün tərtib olunduğu üçün bu sxemlər çoxsaylı etiket qruplaşdırma tapşırıqları üçün daha uyğundur. [mənbə](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 `'solver'` parametri "optimizasiya üçün istifadə olunacaq alqoritmi" nəzərdə tutur. [mənbə](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Aşağıdakı cədvəldə Scikit-learn kitabxanasındakı alqoritmlərlə müxtəlif növ tapşırıqları və data strukturlarını necə idarə edə biləcəyiniz göstərilib: + +![alqoritmlər](../images/solvers.png) + +## Tapşırıq - datanı bölün + +Biz indi ilk öyrənmə cəhdimizdə logistik reqressiyasına fokuslana bilərik. `train_test_split()` istifadə etməklə datanı öyrətmə və test üçün iki qrupa ayırın: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Tapşırıq - logistik reqressiyanın tətbiqi + +Biz çoxsaylı etiket məsələsinə baxdığımız üçün _scheme_ və _solver_ parametrləri üçün müvafiq dəyərləri ötürməliyik. Bunun üçün çoxsaylı etiket (multiclass `ovr`) və **liblinear** alqoritmini seçin. + +1. Logistik reqressiya modeli yaradın və `ovr` dəyərini _multi_class_ parametri, `liblinear` dəyərini isə _solver_ parametri kimi ötürün: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Başqa bir alqoritmi seçib yoxlayın, misal üçün `lbfgs`. + + > Qeyd. Pandas kitabxanasında [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) funksiyasını istifadə edərək data modelinizi daha səthi (az-ölçülü) formaya keçirə bilərsiniz. + + Dəqiqliyin **80%**-dən yuxarı olması yaxşıdır! + +1. Siz bu modelin işlədiyini bir sətir data (#50-ci sıra) ilə yoxlaya bilərsiniz: + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Nəticə belə çap olunacaq: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Fərqli sıra nömrələrini yoxla və nəticəyə bax. + +1. Daha dərinə getsək, qruplaşdırma modelinin dəqiqliyini belə yoxlaya bilərsiniz: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + Nəticə çap olundu - Hindisdan mətbəxi ən yuxarı dəqiqliklə qruplaşdırılır: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Bu modelin Hindistan mətbəxini nə üçün seçdiyini izah edə bilərsən? + +1. Daha çox məlumat almaq üçün qruplaşdırma hesabatını çap edin: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀 Məşğələ + +Bu dərsdə siz təmizlənmiş data istifadə edərək inqrediyentlər əsasında milli mətbəxi təxmin edə biləcək maşın öyrənməsi modelini qurdunuz. Scikit-learn kitabxanası istifadə etməklə daha hansı üsullarla qruplaşdırma etmək mümkün olduğunu oxuyun. "Solver (alqoritm)" anlayışı üzərində daha dərinə gedərək arxa planda necə işlədiyini öyrənin. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Logistik reqressiya metodunda hansı riyazı modellər istifadə olunduğunu [bu dərsdə](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) daha dərindən öyrənin. + +## Tapşırıq + +[Qruplaşdırıcı alqoritmlərini araşdır](assignment.az.md) diff --git a/4-Classification/2-Classifiers-1/translations/assignment.az.md b/4-Classification/2-Classifiers-1/translations/assignment.az.md new file mode 100644 index 0000000000..de3da23d22 --- /dev/null +++ b/4-Classification/2-Classifiers-1/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Qruplaşdırıcı alqoritmlərini araşdır + +## Təlimatlar + +Bu dərsdə siz qruplaşdırıcı alqoritmlərin maşın öyrənməsi alqoritmləri ilə necə birlikdə dəqiq modellər qurulmasını öyrəndiniz. Qruplaşdırma alqoritmləri üzərindən keçin və ikisini seçin. Öz sözlərinizlə bu alqoritmləri bir-biri ilə müqayisə edin. Hansı növ problemləri həll etməyə nəzərdə tutulublar? Müxtəlif data strukturları ilə necə işləyirlər? Birini digəri əvəzinə nə üçün seçərsən? + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | .doc sənədində hərəsi bir qruplaşdırma alqoritminə aid iki paraqraf. Alqoritmlərin müqayisəsi də əhatə olunmalıdır. | .doc sənədində bir paraqraf | Natamam tapşırıq | diff --git a/4-Classification/3-Classifiers-2/translations/README.az.md b/4-Classification/3-Classifiers-2/translations/README.az.md new file mode 100644 index 0000000000..6659f621f9 --- /dev/null +++ b/4-Classification/3-Classifiers-2/translations/README.az.md @@ -0,0 +1,233 @@ +# Mətbəx Qruplaşdırıcıları - 2. hissə + +İkinci qruplaşdırma dərsində siz, ədədi dataları qruplaşdırmaq üçün olan əlavə yolları kəşf edəcəksiniz. Bundan əlavə olaraq isə bir qruplaşdırıcını digəri ilə əvəz etməyin nəticələri haqqında öyrənəcəksiniz. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/?loc=az) + +### İlkin şərt + +Əvvəlki dərsi bitirdiyinizi və 4-cü dərsin ana qovluğunda yerləşən `data` qovluğunda _cleaned_cuisines.csv_ adlı datasetinizin olduğunu güman edirik. + +### Hazırlıq + +_notebook.ipynb_ faylınızı təmizlənmiş dataset ilə yükləyib X və y datafreymlərinə bölərək model qurulması prosesi üçün hazır vəziyyətə gətirmişik. + +## Qruplaşdırma xəritəsi + +Öncədən, Microsoft-un yaddaş vərəqindən datanın qruplaşdırmağın müxtəlif növləri haqqında öyrənmisiniz. Scikit-learn də buna oxşar, amma təxminedicilərinizi(qruplaşdırıcıların digər adı) daha dəqiq təyin etmənizdə sizə yardım edəcək bir yaddaş vərəqəsi təklif edir: + +![Scikit-learn-dən ML Xəritəsi](../images/map.png) +> Tövsiyyə: [Bu xəritəyə onlayn formada](https://scikit-learn.org/stable/tutorial/machine_learning_map/) baxaraq cığırlar üzrə hərəkət edərkən üzərlərinə klik edərək sənədləri oxuya bilərsiniz. + +### Plan + +Datanız haqqında aydın fikirləriniz olduğu zaman bu xəritə sizə çox kömək edəcək. Cığırlar boyunca 'gəzdikcə' yekun nəticəyə gələcəksiniz: + +- 50-dən çox nümunəmiz var +- Kateqoriyanı təxmin etmək istəyirik +- Etiketlənmiş datamız var +- 100 mindən daha az nümunəmiz var +- ✨ Xətti SVC (Dəstək-Vektor Qruplaşdırıcı) seçə bilərik +- Ədədi datamız olduğuna görə əgər işinizə yaramazsa + - ✨ K-Qonşu Qruplaşdırıcını yoxlaya bilərik + - Əgər bu da işinizə yaramazsa, ✨ SVC və ✨ Ansambl Qruplaşdırıcılarını yoxlayın. + +Bu izləyə biləcəyiniz çox faydalı bir yoldur. + +## Tapşırıq - datanı ayırmaq + +Həmin cığırı izləyərək istifadə etmək üçün bəzi kitabxanaları daxil edərək başlamalıyıq. + +1. Tələb olunan kitabxanaları daxil edin: + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +2. Öyrətmə və test datalarını ayırın: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Xətti SVC (Dəstək-Vektor Qruplaşdırıcı) + +Dəstək-Vektor klasterləşmə ML texnikalarından(aşağıda bu haqda ətraflı öyrənə bilərsiniz) olan Dəstək-Vektor maşınları ailəsinin bir üzvüdür. Bu metodda siz etiketləri klasterləşdirmək üçün 'kernel(özək)' seçə bilərsiniz. 'C' parametri, parametrlərin təsirini nizamlayan 'regularization(nizamlama)'-ı bildirir. Özək [bunlardan](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) biri ola bilər. Burada biz xətti SVC istifadə edəcəyimizə görə onu da 'xətti' olaraq təyin etmişik. Ehtimalın özü standart olaraq təyin olunmuş dəyəri 'false(yanlış)'-dur. Amma burada ehtimal haqqında təxminlər toplamağımız üçün onu 'true(doğru)'-a dəyişmişik. Random state (Təsadüfi vəziyyəti) isə ehtimalları datanı qarışdıraraq əldə etmək üçün '0'-a bərabər etmişik. + +### Tapşırıq - xətti SVC tətbiq edin + +Qruplaşdırıcılardan ibarət bir massiv yaratmaqla başlayın. Testlər apardıqca, bu massivə əlavələr edəcəksiniz. + +1. Xətti SVC ilə başlayın: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Xətti SVC istifadə edərək modeli öyrədin və reportu ekrana çap edin: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + Nəticə kifayət qədər yaxşıdır: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` +## K-Qonşu qruplaşdırıcısı + +K-Qonşu ML metodlarının həm nəzarətli, həm də nəzarətsiz öyrənmə üçün istifadə edilən "qonşular" ailəsinin bir hissəsidir. Bu metodda öncədən təyin olunan sayda data nöqtələri yaradılır və datalar bu nöqtələr ətrafında məlumatlar üçün ümumiləşdirilmiş etiketlərin proqnozlaşdırıla bilinəcəyi formada toplanılır. + +### Tapşırıq - K-Qonşu qruplaşdırıcısını tətbiq edin + +Öncəki qruplaşdırıcı yaxşı idi və data ilə əla işlədi. Amma daha yuxarı dəqiqlik əldə edə bilərik. K-Qonşu qruplaşdırıcısını yoxlayın. + +1. Qruplaşdırıcı massivinizə yeni sətir əlavə edin (Xətti SVC-dən sonra vergül qoyun): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Nəticə bir az pisdir: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ [K-Qonşular](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) haqqında ətraflı öyrənin + +## Dəstək-Vektor Qruplaşdırıcısı + +Dəstək-Vektor qruplaşdırıcıları ML metodlarının qruplaşdırma və reqressiya tapşırıqları üçün istifadə edilən [Dəstək-Vektor Maşını](https://wikipedia.org/wiki/Support-vector_machine) ailəsinin bir hissəsidir. SCM-lər iki kateqoriya arasındakı məsafəni maksimallaşdırmaq üçün "öyrətmə nümunələrini fəzadakı nöqtələrə köçürür". Sonrakı datalar kateqoriyalarının müəyyən olunması üçün bu fəzaya köçürülür. + +### Dəstək Vektor Qruplaşdırıcısını tətbiq edin + +Gəlin Dəstək Vektor Qruplaşdırıcı ilə daha dəqiq nəticə əldə etməyə çalışaq. + +1. K-Qonşu-dan sonra vergül qoyun və bu sətri əlavə edin: + + ```python + 'SVC': SVC(), + ``` + + Nəticə kifayət qədər yaxşıdır! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ [Dəstək-Vektorları](https://scikit-learn.org/stable/modules/svm.html#svm) haqqında ətraflı öyrənin + +## Ansambl Qruplaşdrıcıları + +Gəlin cığırı əvvəlki testimiz kifayət qədər yaxşı olsa da axıra qədər izləyək. 'Ansambl Qruplaşdırıcılarını, xüsusilə Random Forest və AdaBoost-u' yoxlayaq: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Nəticələr kifayət qədər yaxşıdır. Xüsusilə Random Forest üçün: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ [Ansambl Qruplaşdırıcıları](https://scikit-learn.org/stable/modules/ensemble.html) haqqında ətraflı öyrənin + +Maşın Öyrənməsinin bu metodu modelin keyfiyyətini artırmaq üçün 'bir neçə təxminedicilərin təxminlərini özündə birləşdirir'. Nümunəmizdə, Random Forest və AdaBoost-u istifadə etdik. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest) ortalama hesablayan bir metod olaraq həddən artıq uyğunlaşmamaq üçün təsadüfiliklə doldurulmuş 'qərarvermə ağaclarından' təşkil olunmuş 'meşə' yaradır. n_estimators parametri ağacların sayını bildirir. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) isə qruplaşdırıcını datasetə uyğunlaşdırır və daha sonra öz surətlərini həmin datasetə uyğunlaşdırır. O, yanlış qruplaşdırılmış qruplaşdırıcıların çəkilərinə fokuslanır və bir sonrakı qruplaşdırıcının düzəltməsi üçün uyğunluğa düzəlişlər edir. + +--- + +## 🚀 Məşğələ + +Bu texnikaların hər birinin dəyişiklər edə biləcəyiniz çox sayda parametrləri mövcuddur. Hər birinin standart olaraq təyin edilmiş parametrlərini araşdırın və bu parametrlərin dəyişdirilməsinin modelin keyfiyyəti üçün önəmi haqqında düşünün. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu dərslərdə çoxlu jarqon sözlər mövcuddur. Ona görə də bir dəqiqənizi ayıraraq praktiki terminologiyaların olduğu [bu siyahıya](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) nəzər yetirin. + +## Tapşırıq + +[Parametr oyunu](assignment.az.md) \ No newline at end of file diff --git a/4-Classification/3-Classifiers-2/translations/assignment.az.md b/4-Classification/3-Classifiers-2/translations/assignment.az.md new file mode 100644 index 0000000000..7afdf7e9c4 --- /dev/null +++ b/4-Classification/3-Classifiers-2/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Parametr oyunu + +## Təlimatlar + +Bu qruplaşdırıcılarla işləyərkən standart olaraq təyin edilmiş bir çox parametrlər mövcuddur. VS Code-un Intellisense-i onları öyrənməyə kömək edə bilər. Bu dərsdə Maşın Öyrənmə Qruplaşdırma Metodlarından birini seçin və müxtəlif parametrlərin dəyərlərini dəyişdirərək modelləri yenidən öyrədin. Bəzi dəyişikliklərin niyə modelin keyfiyyətini yaxşılaşdırdığını, bəzilərinin isə onu azaltdığını izah edən bir notbuk hazırlayın. Cavabınızı ətraflı izah etməyə çalışın. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Notbuk tam qurulu, parametrləri dəyişdirilmiş və nəticələri paraqraflarda göstərilmiş qruplaşdrıcı ilə təqdim olunub | Dəftərçə yarımçıq formada və natamam şəkildə izahla təqdim olunub | Notbuk problemli və qüsurludur | \ No newline at end of file diff --git a/4-Classification/4-Applied/translations/README.az.md b/4-Classification/4-Applied/translations/README.az.md new file mode 100644 index 0000000000..a8803494b2 --- /dev/null +++ b/4-Classification/4-Applied/translations/README.az.md @@ -0,0 +1,315 @@ +# Mətbəx tövsiyyə edən Veb tətbiq yaradaq + +Bu dərsdə əvvəlki dərslərdə öyrəndiyimiz bəzi üsullar və bu bölmədə istifadə olunan ləzzətli mətbəx data seti ilə qruplaşdırıcı modeli quracağıq. Bundan əlavə, Onnx-in veb runtime versiyasından istifadə edərək yadda saxlanmış modeli tətbiq etmək üçün kiçik veb tətbiqi yaratmalıyıq. + +Maşın öyrənməsinin ən faydalı praktik istifadələrindən biri tövsiyə sistemlərinin qurulmasıdır və biz bu istiqamətdə ilk addımı atacağıq! + +[![Veb tətbiqin təqdimatı](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Tətbiqi MÖ") + +> 🎥 Video üçün yuxardakı şəklə klikləyin: Jen Looper qruplaşdırılmış mətbəx datası istifadə etməklə veb tətbiq yaradır. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/?loc=az) + +Bu dərsdə öyrənəcəksiniz: + +- Veb modeli necə yaratmalı və onu Onnx model kimi necə yadda saxlamalı +- Modeli nəzərdən keçirməklə Netron modeli necə istifadə etməli +- Veb tətbiqdə nəticə çıxarmaq üçün modeli necə istifadə etməli + +## Modelinizi yaradın + +Tətbiq olunan ML sistemlərinin yaradılması biznes sistemləri üçün bu texnologiyalardan istifadə etməyin vacib hissəsidir. Onnx-dən istifadə etməklə veb proqramlar daxilində modellərdən istifadə etmək olar (ehtiyac olduqda onları oflayn mühitdə istifadə etmək lazımdır). + +[Əvvəlki dərsdə](../../../3-Web-App/1-Web-App/translations/README.az.md) UFO ilə bağlı reqresiya modelini yaradıb, "pickle" edib Flask tətbiqi daxilində istifadə etmişdik. Bu arxitekturanı bilmək çox faydalı olsa da, tamamilə Python proqramıdır. Lakin, sizdən Javascript tətbiqi də yazmaq tələb oluna bilər. + +Bu dərsdə nəticə almaq üçün Javascript əsasında veb tətbiq yarada bilərik. Əvvəlcə modeli öyrətmək və Onnx ilə işləməsi üçün hazırlamaq lazımdır. + +## Tapşırıq - qruplaşdırıcı modelini öyrədin + +İlk öncə qruplaşdırıcı modeli təmizlənmiş mətbəxlər data dəstini istifadə etməklə öyrədək. + +1. Lazımi kitabxanaları əlavə etməklə başlayaq: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Scikit-learn modelini Onnx formatına keçirmək üçün '[skl2onnx](https://onnx.ai/sklearn-onnx/)' köməyinə ehtiyacımız var. + +1. CSV faylını oxumaq üçün `read_csv()` istifadə etməklə əvvəlki dərsdə etdiyimiz kimi dataset ilə işləməliyik: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. İlk iki lazımsız sütunu ləğv edərək yerdə qalan datanı 'X' kimi yadda saxlayaq: + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Etiketləri isə 'y' kimi qeyd edək: + + ```python + y = data[['cuisine']] + y.head() + ``` + +### Təlim rutininə başlayaq + +Biz yüksək dəqiqliyə malik "SVC" kitabxanasından istifadə edəcəyik. + +1. Scikit-learn vasitəsilə lazımlı kitabxanaları əlavə edək: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. Təlim və test setlərini ayıraq: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Əvvəlki dərsdə etdiyiniz kimi SVC təsnifat modelini yaradaq: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. `predict()` testini çağırmaqla modeli test edək: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Modelin keyfiyyətini yoxlamaq üçün qruplaşdırıcı hesabatını çap edək: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Daha əvvəl də gördüyümüz kimi dəqiqlik dərəcəsi çox yaxşıdır: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### Modeli Onnx-ə çevirək + +Düzgün Tensor nömrəsi ilə çevirmə etdiyimizə əmin olmalıyıq. Bu data dəstində 380 inqrediyent sadalanıb, ona görə də bu rəqəmi `FloatTensorType`-da qeyd etmək lazımdır: + +1. 380 tensor nömrəsindən istifadə edərək çevirməni həyata keçirək: + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. onx yaradıb faylı **model.onnx** kimi yadda saxlayaq: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Konvertasiya skriptində [options](https://onnx.ai/sklearn-onnx/parameterized.html) ötürə bilərik. Bu halda, 'nocl' True və 'zipmap' False olmasını təmin etdik. + Bu qruplaşdırıcı model olduğundan lüğətlərin siyahısını yaradan ZipMap-ı silmək seçimimiz var (vacib deyil). `nocl` modelə daxil edilmiş sinif məlumatlarına istinad edir. `nocl`-i 'True' olaraq təyin edərək modelinizin ölçüsünü azaldaq. + +Bütün notbuku işə salmaqla Onnx modelini yaradaraq onu bu qovluqda yadda saxlaya biləcəyik. + +## Modelə nəzər yetirək + +Onnx modelləri Visual Studio kodunda visual olaraq görünmür. Bir çox tədqiqatçı modelin düzgün qurulmasını təmin etmək üçün onu vizuallaşdırmağa istifadə olunan pulsuz proqramlardan istifadə edir. [Netron](https://github.com/lutzroeder/Netron) yükləyək və model.onnx faylını açaq. Sadə modelin 380 girişi və siyahıda göstərilən təsnifatı ilə vizuallaşdırıldığını görə bilərsiniz: + +![Netron vizualı](../images/netron.png) + +Netron modelləri vizual olaraq görmək üçün bir vasitədir. + +İndi bu səliqəli modeli veb proqramda istifadə etməyə hazırıq. Gəlin soyuducuya baxan zaman işimizə yarayacaq bir proqram yaradaq və modelə görə müəyyən edilmiş mətbəx növünü bişirmək üçün qalıq inqrediyentlərin hansı kombinasiyasından istifadə edə biləcəyinizi anlamağa çalışaq. + +## Tövsiyə verən bir veb tətbiq yaradaq + +Modeli birbaşa veb proqramında istifadə edə bilərik. Bu arxitektura həm də lazım olduqda onu lokal və ya oflayn rejimdə işə salmağa imkan verir. `model.onnx` faylını saxladığımız eyni qovluqda `index.html` faylı yaratmaqla başlayaq. + +1. Bu faylda _index.html_, aşağıdakı kodu əlavə edək: + + ```html + + +
+ Mətbəx Uyğunlaşdırıcısı +
+ + ... + + + ``` + +1. İndi isə `body` teqləri ilə işləyərək ingridientləri əks etdirən bölmələri əlavə edək: + + ```html +

Soyuducuya bax. Nə bişirə bilərsən?

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ ``` + + Qeyd edək ki, hər bir xanaya dəyər verilir. Bu, verilənlər bazasına uyğun olaraq tərkib hissəsinin tapıldığı indeksi əks etdirir. Məsələn, 'Alma' əlifba siyahısında beşinci sütundadır, ona görə də biz 0-dan saymağa başladığımız zaman verilmiş tərkib indeksinə görə onun dəyəri '4'dür. [inqrediyentlər cədvəli](../../data/ingredient_indexes.csv)ni nəzərdən keçirməklə verilmiş tərkib hissələrini görə bilərsiniz. + + index.html faylında işi davam etdirərək, `` yekunlaşdırıcı bağlandıqdan sonra modelin çağrıldığı skript blokunu əlavə edin. + +1. İlk öncə, [Onnx Runtime](https://www.onnxruntime.ai/) əlavə edək: + + ```html + + ``` + + > Onnx Runtime, Onnx modelləri optimallaşdırmaq və istifadə edə bilmək üçün API daxil olmaqla geniş çeşidli platformalarda işləməyə imkan vermək üçün istifadə olunur. + +1. Runtime yerini aldıqdan sonra işə sala bilərik: + + ```html + + ``` + +Bu kodda eyni anda bir neçə prosses baş verir: + +1. Mümkün 380 dəyərdən (1 və ya 0) ibarət massiv yaratdıq və inqrediyentin işarələnib göstərilməsindən asılı olaraq nəticə çıxarmaq üçün modelə göndəriləcək. +2. Qeyd qutuları massivinin proqram başlayanda çağırılan `init` funksiyasında yoxlanılıb-yoxlanılmadığını müəyyən etmək üçün bir üsul yaratdıq. Yoxlama qutusu işarələndikdə, `ingredients` massivi seçilmiş inqrediyenti əks etdirmək üçün yenilənir. +3. `testCheckboxes` funksiyası yaradaraq hansısa qeyd qutusunun işarələnib-işarələnmədiyini yoxlanılır. +4. `startInference` funksiyasını istifadə edərək hansısa düymə basılanda və ya hər hansı işarə qutusu seçiləndə hərəkətə keçilir. +5. Nəticə çıxarma ardıcıllığı aşağıdakıları əhatə edir: + 1. Modelin asinxron yükünün qurulması + 2. Modelə göndərmək üçün Tensor strukturunun yaradılması + 3. Modeli öyrədərkən yaratdığımız `float_input` daxiletməsini əks etdirən `feeds` datasının yaradılması (bu adı yoxlamaq üçün Netron-dan istifadə edə bilərsiniz) + 4. `feeds` məlumatını modelə göndərmək və ondan cavab gözləmək + +## Proqramı test edək + +index.html faylının yerləşdiyi qovluqda Visual Studio-da yeni terminal açaq və qlobalda quraşdırılmış [http-server](https://www.npmjs.com/package/http-server) mövcud olduğundan əmin olaq. Sorğuda `http-server` yazdıqdan sonra Localhost açılacaq. Beləliklə Veb tətbiqə nəzər yetirə bilərik. Müxtəlif inqrediyentlər əsasında hansı mətbəxin tövsiyə olunduğunu yoxlayaq: + +![ingrediyent veb tətbiq](../images/web-app.png) + +Təbriklər, 'tövsiyyə edən' veb tətbiq yaratdıq. İndi isə sistemi qurmaq üçün daha çox vaxt ayıraq! + +## 🚀 Məşğələ + +Hazırki veb tətbiq minimal səviyyədədir. Bu səbəbdən inqrediyentlər və onların indekslərinə əsasən [ingredient_indexes](../../data/ingredient_indexes.csv) datasından istifadə etməklə davam etmək lazımdır. Verilmiş milli yeməyi hazırlamaq üçün hansı dadlardan istifadə edilməlidir, müəyyən edək. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Biz bu dərsdə qida maddələri üçün tövsiyə sisteminin yaradılmasına səthi toxunsaq da, ML tətbiqlərinin bu sahədə töhvələri çox zəngindir. Bu sistemlərin necə qurulduğu haqqında daha ətraflı oxuyun: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Tapşırıq + +[Yeni tövsiyyə sistemi yaradın](assignment.az.md) diff --git a/4-Classification/4-Applied/translations/assignment.az.md b/4-Classification/4-Applied/translations/assignment.az.md new file mode 100644 index 0000000000..261228abaa --- /dev/null +++ b/4-Classification/4-Applied/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Yeni tövsiyə sistemi yaradın + +## Təlimatlar + +Bu dərslərdəki təcrübələrə əsasən Onnx Runtime və ya çevrilmiş bir Onnx modeli istifadə edərək JavaScript əsaslı veb tətbiqi necə yaratmağı artıq bilirik. Bu dərsdəki məlumatlardan və ya başqa mənbədən (zəhmət olmazsa, mənbəni göstərməklə) məlumatları istifadə edərək yeni bir tövsiyə sistemi yaratmaqda təcrübələr aparın. Fərqli şəxsiyyət xüsusiyyətlərinə görə müəyyən bir ev heyvanı tövsiyəçisi və ya şəxsin əhvalına uyğun musiqi janrı tövsiyə edən bir sistem yarada bilərsiniz. Yaradıcı olun! + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Veb tətbiq və ya notbuk verilib. Hər ikisi istifadəyə hazırdır. | İkisindən biri əskikdir və ya qüsurludur. | Hər ikisi ya əskikdir, ya da qüsurludur. | diff --git a/4-Classification/translations/README.az.md b/4-Classification/translations/README.az.md new file mode 100644 index 0000000000..fb6665f832 --- /dev/null +++ b/4-Classification/translations/README.az.md @@ -0,0 +1,27 @@ +# Qruplaşdırma bölməsinə başlayırıq + +## Regional mövzu: Ləzzətli Asiya və Hindistan Mətbəxləri 🍜 + +Asiyada və Hindistanda yeməklərlə bağlı olan adət-ənənələr son dərəcə çeşidli və çox ləzzətlidir! Gəlin regional mətbəxlər üçün olan dataya baxaraq hansı inqrediyentlərin istifadə olunduğunu başa düşməyə çalışaq. + +![Tay yeməkləri satıcısı](../images/thai-food.jpg) +> Unsplash platformasında Lisheng Chang tərəfindən çəkilmiş şəkil + +## Nə öyrənəcəksiniz? + +Bu bölmədə siz Reqressiya haqqında əvvəlki bölmələrdən öyrəndiklərinizi təkmilləşdirəcək və datanı daha yaxşı başa düşmək üçün istifadə edə biləcəyiniz digər qruplaşdırıcılar haqqında öyrənəcəksiniz. + +> Qruplaşdırıcı modelləri ilə işləmək haqqında məlumat almanıza kömək olacaq az-kod yanaşmalı alətlər də mövcuddur. Bu tapşırıq üçün olan [Azure ML](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) sınaqdan keçirin. + +## Dərslər + +1. [Qruplaşdırıcı bölməsinə giriş](../1-Introduction/translations/README.az.md) +2. [Daha çox qruplaşdırıcılar](../2-Classifiers-1/translations/README.az.md) +3. [Bir başqa qruplaşdırıcı](../3-Classifiers-2/translations/README.az.md) +4. [Tətbiqi ML: veb tətbiq qur](../4-Applied/translations/README.az.md) + +## Təşəkkürlər + +"Qruplaşdırıcı bölməsinə giriş" [Cassie Breviu](https://www.twitter.com/cassiebreviu) və [Jen Looper](https://www.twitter.com/jenlooper) tərəfindən ♥️-lə yazılmışdır + +Ləzzətli mətbəxlər data massivi [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines) platformasından götürülmüşdür. diff --git a/5-Clustering/1-Visualize/translations/README.az.md b/5-Clustering/1-Visualize/translations/README.az.md new file mode 100644 index 0000000000..a4ec4624cf --- /dev/null +++ b/5-Clustering/1-Visualize/translations/README.az.md @@ -0,0 +1,333 @@ +# Klasterləşdirmə bölməsinə giriş + +Klasterləşdirmə verilən datasetin etiketlənməmiş olduğunu və ya giriş dəyərlərinin öncədən müəyyən olunmuş çıxış dəyərləri ilə uyğunlaşdırılmış olmadığını fərz edən [nəzarətsiz öyrənmə](https://wikipedia.org/wiki/Unsupervised_learning)nin bir formasıdır. Klasterləşdirmə etiketlənməmiş datanı çeşidləmək və datada tapdığı təkrarlanan nümunələri təmin etmək üçün müxtəlif alqoritmlərdən istifadə edir. + +[![P-Square - No One Like You](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "P-Square - No One Like You") + +> 🎥 Videoya keçid üçün yuxarıdakı təsvirə klikləyin. Maşın öyrənməsində klasterləşdirmə bölməsini öyrənərkən Dance Hall janrında olan Nigeriya treklərindən zövq alın - bu mahnı 2014-cü ilin bəyənilən mahnısı olub, P-Square adlı musiqi ikilisinə aiddir. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/?loc=az) + +### Giriş + +[Klasterləşdirmə](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) datanın tədqiqi üçün çox faydalıdır. Gəlin bu üsulun Nigeriyalı auditoriyanın üstünlük verdiyi musiqidə tendensiyanı və təkrarlanan nümunələri kəşf etməyə kömək edə bilib-bilməyəcəyinə baxaq. + +✅ Bir az dayanıb klasterləşdirmənin hansı hallarda istifadə olunduğu haqqında düşünün. Real həyatda bir yığın paltardan ailə üzvlərinizin geyimlərini çeşidlədiyiniz zaman klasterləşdirmə etmiş olursunuz 🧦👕👖🩲. Data elmində klasterləşdirməyə nümunə olaraq istifadəçinin üstünlük verdiyi seçimləri analiz etməyi və ya etiketlənməmiş datasetin xarakteristikalarını müəyyən etməyi göstərmək olar. Klasterləşdirmə bir növ corab çəkməcəsi kimi qarmaqarışıqlığı anlamağa kömək edir. + +[![ML-ə giriş](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Klasterləşdirmə bölməsinə giriş") + +> 🎥 Yuxarıdakı təsvirə klikləməklə videoya baxın: John Guttag MIT-də klasterləşdirməni təqdim edir + +Klasterləşdirmənin daha professional istifadəsinə bazar seqmentasiyasının müəyyən edilməsini, məsələn, hansı yaş qrupunun daha çox nələri aldığını müəyyən etməyi aid etmək olar. Bundan başqa, kredit kartı transaksiyalarının datasetində dələduzluq və bu kimi başqa anomaliyaların aşkarlanmasında klasterləşdirmə faydalı ola bilər. Həmçinin, tibbi təsvirlərdə bədxassəli şişlərin aşkar olunmasında da klasterləşdirməni istifadə etmək mümkündür. + +✅ Bir az dayanıb real həyatda, bankçılıqda, elektron ticarətdə ya da biznes şəraitində klasterləşdirmənin istifadəsinə rast gəlmiş ola biləcəyiniz haqqında düşünün. + +> 🎓 Maraqlıdır ki, klaster analizi 1930-cu illərdə Antropologiya və Psixologiya sahələrində meydana çıxmağa başlamışdır. Necə istifadə olunduğunu xəyalınızda canlandıra bilərsinizmi? + +Alternativ olaraq, klasterləşdirmədən axtarış nəticələrini qruplaşdırmaq üçün istifadə edə bilərsiniz - məsələn, alış-veriş linkləri, şəkillər ya da rəylər ilə qruplaşdıraraq. Klasterləşdirmə böyük dataseti kiçiltmək və kiçildilmiş massivi detallı analiz etmək istədiyiniz zaman köməyə çatır, ona görə də bu üsul başqa modellər yaratmazdan öncə datanın tədqiqi üçün istifadə oluna bilər. + +✅ Datanı klasterlərə yerləşdirdikdən sonra onlara klaster identifikator təyin olunur və bu üsul datanın məxfiliyini qorumaq üçün də istifadə oluna bilər; hər hansı bir verilənə aşkarlana və müəyyən edilə bilən data ilə istinad etməkdənsə klaster identifikator vasitəsilə istinad edə bilərsiniz. Sizcə, başqa hansı səbəblərə görə klasteri fərqləndirmək üçün klaster identifikator istifadə etmək klasterin digər elementlərini istifadə etməkdən üstün tutula bilər? + +Bu [öyrənmə modulunda](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) klasterləşdirmə üsulları haqqında bildiklərinizi inkişaf etdirin. + +## Klasterləşdirmə bölməsinə başlayırıq + +[Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html) klasterləşdirməni icra etmək üçün müxtəlif üsullardan ibarət geniş spektr təklif edir. Seçəcəyiniz tip istifadə şərtlərindən asılı olacaq. Dokumentasiyaya əsasən hər bir metodun müxtəlif faydaları var. Scikit-learn tərəfindən dəstəklənən metodlar və onların müvafiq istifadə ssenariləri aşağıdakı sadələşdirilmiş cədvəldə verilib: + +| Metodun adı | Ssenari | +| :----------------------------| :------------------------------------------------------------------------- | +| K-Means | ümumi məqsəd, induktiv | +| Affinity propagation | çox, cüt olmayan klasterlər, induktiv | +| Mean-shift | çox, cüt olmayan klasterlər, induktiv | +| Spectral clustering | az, cüt klasterlər, transduktiv | +| Ward hierarchical clustering | çox, məhdudlaşdırılmış klasterlər, transduktiv | +| Agglomerative clustering | çox, məhdudlaşdırılmış, qeyri-Evklid məsafələr, transduktiv | +| DBSCAN | düz olmayan həndəsə, cüt olmayan klasterlər, transduktiv | +| OPTICS | düz olmayan həndəsə, cüt olmayan müxtəlif sıxlıqlı klasterlər, transduktiv | +| Gaussian mixtures | düz həndəsə, induktiv | +| BIRCH | istisnaları olan böyük dataset, induktiv | + +> 🎓 Klasterləri necə yaratmağımız data nöqtələrini qruplara necə ayırdığımızla çox bağlıdır. Gəlin bəzi terminlərə baxaq: +> +> 🎓 ['Transduktiv' və 'induktiv'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Transduktiv nəticə xüsusi test nümunələrinə uyğunlaşdırılan, müşahidə edilən təlim nümunələrindən əldə edilir. İnduktiv nəticə yalnız sonradan test nümunələrinə tətbiq edilən ümumi qaydalara uyğun gələn təlim nümunələrindən əldə edilir. +> +> Nümunə: Təsəvvür edin ki, sizdə yalnız qismən etiketlənmiş dataset var. Bəzi şeylər 'qeydlər', bəziləri 'cdlər' olaraq etiketlənmişdir, bəziləri isə boşdur. Öhdəliyiniz qalan hissəni də etiketləməkdir. Əgər induktiv yanaşmanı seçsəniz, modelinizə 'qeydləri' və 'cdləri' axtarmağı öyrədərdiniz və bu etiketləri etiketlənməmiş dataya tətbiq edərdiniz. Bu yanaşma əslində 'kaset' olan şeyləri təsnif etməkdə işə yaramayacaq. Digər tərəfdən transduktiv yanaşma isə bu naməlum məlumatları daha effektiv idarə edir, çünki o oxşar elementləri birlikdə qruplaşdırmağı hədəfləyir və sonra hər bir qrupa etiket tətbiq edir. Bu halda, klasterlər 'dəyirmi musiqi əşyaları' və 'kvadrat musiqi əşyaları'nı əks etdirə bilər. +> +> 🎓 ['Qeyri-Evklid' və 'Evklid' həndəsələri](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Riyazi terminlər olan qeyri-Evklid və Evklid həndəsələr nöqtələr arasındakı məsafələrin 'Evklid' ([Evklid](https://wikipedia.org/wiki/Euclidean_geometry)) və ya 'qeyri-Evklid' (qeyri-Evklid) həndəsi üsullarla ölçülməsinə aiddir. +> +> Bu kontekstdə 'düz' Evklid həndəsəsinə (hissələri 'müstəvi' həndəsə kimi də bilinir), 'düz olmayan' isə qeyri-Evklid həndəsəsinə aid edilir. Həndəsənin maşın öyrənməsi ilə nə əlaqəsi var? Riyaziyyatda kök salan iki sahə kimi, klasterlərdəki nöqtələr arasındakı məsafələri ölçmək üçün ümumi bir yol olmalıdır və bu, məlumatların xarakterindən asılı olaraq 'düz' və ya 'düz olmayan' şəkildə edilə bilər. [Evklid məsafələr](https://wikipedia.org/wiki/Euclidean_distance) iki nöqtə arasındakı xəttin uzunluğu ilə ölçülür. [Qeyri-Evklid məsafələr](https://wikipedia.org/wiki/Non-Euclidean_geometry) əyri vasitəsilə ölçülür. Əgər vizuallaşdırılmış data müstəvidə mövcud deyilsə, onun üçün xüsusi alqoritmdən istifadə etməli ola bilərsiniz. +> +![Evklid və qeyri-Evklid həndəsənin təsviri](../images/flat-nonflat.png) +> [Dasani Madipalli](https://twitter.com/dasani_decoded) tərəfindən təsvir +> +> 🎓 ['Məsafələr'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Klasterlər onların məsafə matrisi ilə müəyyən edilir, məs. nöqtələr arasındakı məsafələr. Bu məsafəni bir neçə yolla ölçmək olar. Evklid klasterləri nöqtə dəyərlərinin ortalaması ilə müəyyən edilir və onlara 'mərkəz' və ya mərkəz nöqtəsi daxildir. Beləliklə, məsafələr həmin mərkəzə olan məsafə ilə ölçülür. Qeyri-Evklid məsafələri digər nöqtələrə ən yaxın nöqtə olan 'klastroidlərə' aiddir. Klastroidlər öz növbəsində müxtəlif yollarla müəyyən oluna bilər. +> +> 🎓 ['Məhdudlaşdırılmış'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Məhdudlaşdırılmış Klasterləşdirmə](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) nəzarətsiz üsula 'qismən nəzarətli' öyrənməni tətbiq edir. Nöqtələr arasındakı əlaqələr 'bağlana bilməz' və ya 'bağlanmalıdır' kimi işarələnir, buna görə də bəzi qaydalar datasetdə məcburi olaraq tətbiq olunur. +> +> Nümunə: Əgər alqoritm etiketsiz və ya qismən etiketli verilənlər toplusunda sərbəst buraxılıbsa, onun yaratdığı klasterlər keyfiyyətsiz ola bilər. Yuxarıdakı nümunədə klasterlər 'dəyirmi musiqi əşyaları', 'kvadrat musiqi əşyaları', 'üçbucaqlı şeylər' və 'külçələri' qruplaşdıra bilər. Bəzi məhdudiyyətlər və ya riayət edilməli qaydalar ('əşya plastikdən hazırlanmalıdır', 'əşya musiqi səsi çıxara bilməlidir') verilərsə, bu daha yaxşı seçim etmək üçün alqoritmi 'məhdudlaşdırmağa' kömək edə bilər. +> +> 🎓 'Sıxlıq' +> +> 'Səs-küylü' olan data həmçinin 'sıx' hesab olunur. Belə klasterlərin hər birindəki nöqtələr arasındakı məsafələr yoxlama zamanı az və ya çox sıx və ya 'izdihamlı' ola bilər və buna görə də bu məlumatların müvafiq klasterləşdirmə metodu ilə təhlil edilməsi lazımdır. [Bu məqalə](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) qeyri-bərabər klaster sıxlığı ilə səs-küylü verilənlər toplusunu araşdırmaq üçün K-Ortalama klasterləşdirmə ilə HDBSCAN alqoritmlərindən istifadə arasındakı fərqi izah edir. + +## Klasterləşdirmə alqoritmləri + +100-dən çox klasterləşdirmə alqoritmi mövcuddur və onlardan hansının hansı halda istifadə olunması verilən datanın təbiətindən asılıdır. Gəlin ən vacib olanlarının üzərindən keçək: + +- **İyerarxik klasterləşdirmə**. Əgər obyekt daha uzaqda olan obyektə deyil, yaxınlıqdakı obyektə yaxınlığına görə təsnif edilirsə, klasterlər onların üzvlərindən başqa obyektlərə və başqa obyektlərdən onlara məsafəsinə görə formalaşır. Scikit-learn-ün aqlomerativ klasterləşməsi iyerarxikdir. + + ![İyerarxik klasterləşdirmə üçün təsvir](../images/hierarchical.png) + > [Dasani Madipalli](https://twitter.com/dasani_decoded) tərəfindən təsvir + +- **Mərkəzi klasterləşdirmə**. Bu məşhur alqoritm 'k' seçimini və ya formalaşacaq klasterlərin sayını tələb edir, bundan sonra alqoritm klasterin mərkəz nöqtəsini təyin edir və həmin nöqtə ətrafında datanı toplayır. [K-Ortalama klasterləşdirmə](https://wikipedia.org/wiki/K-means_clustering) mərkəzi klasterləşdirmənin məşhur növüdür. Mərkəz ən yaxın orta ilə müəyyən edilir, adını da elə buradan götürmüşdür. Klasterdən kvadratik məsafə minimuma endirilir. + + ![Mərkəzi klasterləşdirmənin təsviri](../images/centroid.png) + > [Dasani Madipalli](https://twitter.com/dasani_decoded) tərəfindən təsvir + +- **Paylanmaya əsaslanan klasterləşdirmə**. Statistik modelləşdirməyə əsaslanaraq, paylama əsaslı klasterləşmə məlumat nöqtəsinin çoxluğa aid olma ehtimalını müəyyən etmək və müvafiq olaraq təyin etmək üçün mərkəzlər yaradır. 'Gaussian mixture' metodları bu tipə aiddir. + +- **Sıxlığa əsaslanan klasterləşdirmə**. Data nöqtələri sıxlığına və ya bir-birinin ətrafında qruplaşmasına görə klasterlərə təyin edilir. Qrupdan uzaq olan data nöqtələri kənar və ya səs-küy hesab olunur. 'DBSCAN', 'Mean-shift' və 'OPTICS' bu növ klasterləşdirməyə aiddir. + +- **Şəbəkəyə əsaslanan klasterləşmə**. Çoxölçülü verilənlər dəstləri üçün şəbəkə yaradılır və məlumatlar şəbəkənin hüceyrələri arasında bölünür və bununla da klasterlər yaradılır. + +## Tapşırıq - datanızı klasterləşdirin + +Bir texnika olaraq klasterləşdirmə düzgün vizuallaşdırma olduqda çox daha dəqiq işləyir, ona görə də gəlin musiqi üçün olan datanı vizuallaşdırmaqla başlayaq. Bu tapşırıq datanın təbiətinə görə klasterləşdirmə üsullarından hansını istifadə etməyin daha səmərəli olduğunu qərar verməyə kömək edəcək. + +1. Hazırkı qovluqda olan [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) faylını açın. + +2. Datanı vizuallaşdırmaq üçün `Seaborn` komponentini əlavə edin. + + ```python + !pip install seaborn + ``` + +3. [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) faylından mahnı datasını köçürün. Mahnılar haqqında məlumatlar olan datafreymi yükləyin. Kitabxanaları köçürərək və məlumatları silməklə bu datanı araşdırmağa hazır olun: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Datanın bir hissəsinı nəzər salın: + + | | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | + | 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | + | 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | + | 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +4. `info()` metodunu çağıraraq datafreym haqqında məlumat əldə edin: + + ```python + df.info() + ``` + + Məlumat aşağıdakı kimi görünəcək: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +5. `isnull()` metodunu çağıraraq və cəmin 0 olmasını yoxlayaraq null dəyərlərin mövcud olub-olmadığını bir daha yoxlayın: + + ```python + df.isnull().sum() + ``` + + Looking good: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +6. Datanı təsvir edin: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 Əgər nəzarətsiz öyrənmənin bir forması olan və datanın etiketlənmiş olmağını tələb etməyən klasterləşdirmə üsulundan istifadə ediriksə, niyə bu datanı etiketlərlə göstəririk? Etiketlər datanın tədqiqi mərhələsində köməyə çatsa da, klasterləşdirmə alqoritmlərinin işləyə bilməsi üçün vacib deyil. Belə ki, sütunların başlıqlarını silə və dataya sütunun nömrəsi ilə istinad edə bilərsiniz. + +Datanın daha ümumi dəyərlərini nəzərdən keçirin. Nəzərə alın ki məşhurluq sütununda dəyər '0' ola bilər, bu mahnının heç bir reytinqi olmadığını bildirir. Gəlin bunu tezliklə silək. + +1. Ən məşhur janrları tapmaq üçün zolaqlı diaqramdan istifadə edin: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![ən məşhur](../images/popular.png) + +✅ Daha çox üstünlük təşkil edən dəyərləri görmək üçün yuxarıdakı `[:5]` daha böyük dəyər ilə dəyişdirilməlidir və ya hamısını görmək üçün silinməlidir. + +Nəzərə alın ki, əgər ən yaxşı janr "itkin" kimi təsvir olunubsa, bu o deməkdir ki, Spotify onu təsnif etməyib, ona görə də bu məlumatları filtrdən keçirmək lazımdır. + +1. Çatışmayan məlumatları filtrdən keçirin + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Janrları yenidən gözdən keçirin: + + ![ən məşhur](../images/all-genres.png) + +2. İndiyə qədər bu verilənlər bazasında ilk üç janr üstünlük təşkil edir. Gəlin diqqəti “afro dancehall”, “afropop” və “nigerian pop” üzərində cəmləşdirək, əlavə olaraq 0 populyarlıq dəyəri olan hər hansı bir şeyi silmək üçün verilənlər toplusunu filtrdən keçirək (bu o deməkdir ki, data populyarlıqla təsnif olunmayıb və tapşırıq üçün səs-küy hesab edilə bilər): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +3. Verilənlərin hər hansı birinin güclü şəkildə korrelyasiya olub-olmadığını test edin: + + ```python + corrmat = df.corr() + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![korrelyasiyalar](../images/correlation.png) + + Yeganə güclü əlaqə 'enerji' və 'səs' arasındadır; yüksək səsli musiqinin adətən olduqca enerjili olduğunu nəzərə alsaq, bu çox da təəccüblü deyil. Əks halda korrelyasiya nisbətən zəifdir. Bir klaster alqoritminin bu məlumatlardan hansı nəticəyə gələ biləcəyini görmək maraqlı olacaq. + + > 🎓 Yadda saxlayın ki, korrelyasiya səbəb-nəticəni nəzərdə tutmur! Korrelyasiya üçün sübut var, lakin səbəb-nəticə üçün sübut yoxdur. Bu [əyləncəli veb sayt](https://tylervigen.com/spurious-correlations)da sözü gedən məqamı vurğulayan bəzi vizuallar var. + +Bu datasetdə mahnının qəbul edilən populyarlığı və oynaqlığı ətrafında hər hansı uyğunluq varmı? FacetGrid göstərir ki, janrdan asılı olmayaraq sıralanan konsentrik dairələr var. Bunun səbəbi Nigeriyalı auditoriyanın zövqlərinin bu janr üçün müəyyən bir oynaqlıq dərəcəsində birləşməsi ola bilərmi? + +✅ Fərqli məlumat nöqtələrini (enerji, yüksəklik, nitq) və daha çox və ya fərqli musiqi janrlarını sınayın. Nə kəşf edə bilərsiniz? Məlumat nöqtələrinin ümumi yayılmasını görmək üçün `df.describe()` cədvəlinə nəzər salın. + +### Tapşırıq - datanın paylanması + +Bu üç janr populyarlıqlarına görə onların oynaqlıq dərəcəsini dərk etmək baxımından əhəmiyyətli dərəcədə fərqlənirmi? + +1. Verilən x və y oxu boyunca populyarlıq və oynaqlıq dərəcəsi üzrə ilk üç janr üçün datanın paylanmasını nəzərdən keçirin. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Nöqtələrin paylanmasını göstərən və ümumi yaxınlaşma nöqtəsi ətrafında olan konsentrik çevrələri görə bilərsiniz. + + > 🎓 Nəzərə alın ki, bu nümunədə davamlı ehtimal sıxlığı əyrisindən istifadə edərək datanı əks etdirən KDE (Kernel Density Estimate) qrafikindən istifadə olunub. Bu, birdən çox paylamalarla işləyərkən datanı şərh etməyə imkan verir. + + Ümumilikdə, bu üç janr populyarlıq və oynaqlıq dərəcəsi baxımından biraz sərbəst şəkildə uyğunlaşır. Belə sərbəst uyğunlaşan datada klasterləri müəyyən etmək çətin olacaq: + + ![paylanma](../images/distribution.png) + +2. Səpələnmə qrafiki yaradın: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", size=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Eyni oxların səpələnmə qrafiki onların yaxınlaşma modeli ilə oxşarlıq təşkil edir + + ![Facetgrid](../images/facetgrid.png) + +Ümumiyyətlə datada olan klasterləri müəyyən etmək üçün səpələnmə qrafiklərindən istifadə edə bilərsiniz. Ona görə də bu növ vizuallaşdırmanın mənimsənilməsi çox faydalıdır. Növbəti dərsdə K-Ortalama klasterləşdirməni bu filtrdən keçmiş data üzərində tətbiq edərək datada olan qrupları və onların maraqlı şəkildə üst-üstə düşməsini müşahidə edəcəyik. + +--- + +## 🚀 Məşğələ + +Növbəti dərsə hazırlıq üçün indiyə qədər haqqında öyrənmiş olduğunuz müxtəlif klasterləşdirmə alqoritmlərinin olduğu bir qrafik hazırlayın və onları real mühitdə istifadə edin. Klasterləşdirmə hansı qrup problemləri həll etməyə çalışır? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Öyrəndiyimiz kimi, klasterləşdirmə alqoritmlərini tətbiq etməzdən əvvəl yaxşı olar ki, əlinizdə olan datasetin təbiətini başa düşəsiniz. Bu mövzu haqqında daha ətraflı [bu keçidə](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) klikləyərək oxuyun. + +[Bu faydalı məqalədə](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) göstərilir ki, müxtəlif klasterləşdirmə alqoritmləri fərqli cür formalaşmış data üçün tətbiq edildikdə fərqli nəticələr verə bilir. + +## Tapşırıq + +[Başqa vizuallaşdırma texnikaları haqqında araşdırın](assignment.az.md) diff --git a/5-Clustering/1-Visualize/translations/assignment.az.md b/5-Clustering/1-Visualize/translations/assignment.az.md new file mode 100644 index 0000000000..e721e0ce90 --- /dev/null +++ b/5-Clustering/1-Visualize/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Başqa vizuallaşdırma texnikaları haqqında araşdırın + +## Təlimatlar + +Bu dərsdə siz datanı klasterləşdirməyə çalışarkən onun planını qurmağı başa düşmək üçün bəzi vizuallaşdırma üsulları ilə işləmisiniz. Səpələnmə qrafikləri xüsusən obyekt qruplarını tapmaq üçün faydalıdır. Səpələnmə qrafikləri yaratmaq və işinizi notbukda sənədləşdirmək üçün müxtəlif yolları və müxtəlif kitabxanaları araşdırın. Siz bu dərsdən, digər dərslərdən və ya özünüzün əldə etdiyiniz məlumatlardan istifadə edə bilərsiniz (zəhmət olmasa onun mənbəyini notbukda qeyd edin). Səpələnmə qrafikləri istifadə edərək datanı vizuallaşdırın və necə başa düşdüyünüzü izah edin. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Notbuk beş yaxşı sənədləşdirilmiş səpələnmə qrafiki ilə təqdim olunub | Notbuk beşdən az səpələnmə qrafiki ilə təqdim olunub və ya daha zəif sənədləşdirilib | Natamam notbuk təqdim olunub | diff --git a/5-Clustering/2-K-Means/translations/README.az.md b/5-Clustering/2-K-Means/translations/README.az.md new file mode 100644 index 0000000000..8506a84b46 --- /dev/null +++ b/5-Clustering/2-K-Means/translations/README.az.md @@ -0,0 +1,244 @@ +# K-Ortalama Klasterləşməsi + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/?loc=az) + +Bu dərsdə siz Scikit-learn və Nigeriya musiqiləri data seti ilə klasterlərin yaradılması öyrənəcəksiniz. Biz Klasterləşmə üçünü K-Ortalamanın əsaslarından bəhs edəcəyik. Unutmayın ki, əvvəlki dərslərdən də sizə tanış olduğu kimi, klasterlərlə işləməyin müxtəlif yolları var və istifadə metodunuz datanızdan bilavasitə asılıdır. Ən yayğın klasterləşmə texnikası olduğu üçün K-Ortalamanı istifadə edəcəyik. Gəlin başlayaq! + +Haqqında öyrənəcəyiniz anlayışlar: +- Siluet hesabı +- Dirsək üsulu +- Ətalət +- Fərqlilik + +# Giriş + +K-Ortalama Klasterləşməsi siqnal emalı sahəsindən törəmiş bir metoddur. Bir sıra müşahidələrdən istifadə edərək məlumat qruplarını 'k' klasterlərinə bölmək üçün istifadə olunur. Hər bir müşahidə ən yaxın “ortaya” və ya klasterin mərkəzi nöqtəsinə ən yaxın olan verilənlər nöqtəsini qruplaşdırmaq üçün işləyir. + +Klasterlər [Voronoy diaqramları](https://wikipedia.org/wiki/Voronoi_diagram) kimi vizuallaşdırıla bilər. Bunlara nöqtə (və ya "toxum") və ona uyğun bölgə daxildir. + +![voronoy diaqramı](../images/voronoi.png) + +> [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilmiş infoqrafik + +1. Alqoritm datasetdən seçmə yolu ilə mərkəz nöqtələrinin k-sayda seçir. Bundan sonra, aşağıdakı addımları dövri olaraq təkrar edir: + 1. O, hər bir nümunəni ən yaxın mərkəzə təyin edir. + 2. Əvvəlki mərkəzlərə təyin edilmiş bütün nümunələrin orta qiymətini alaraq yeni mərkəzlər yaradır. + 3. Sonra yeni və köhnə mərkəzlər arasındakı fərqi hesablayır və mərkəzlər sabitləşənə qədər təkrarlanır. + +K-Ortalama istifadə etməyin bir çatışmazlığı, 'k'-nı, yəni mərkəzlərin sayını qurmağınız lazım olacaq. Xoşbəxtlikdən "dirsək üsulu" "k" üçün yaxşı başlanğıc dəyərini tapmağa kömək edir. Bir dəqiqədən sonra sınayacaqsınız. + +## İlkin şərt + +Siz bu dərsin [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) faylında işləyəcəksiniz. Faylda son dərsdə etdiyiniz məlumatların idxalı və ilkin təmizləmə artıq mövcuddur. + +## Məşq - hazırlıq + +Mahnı məlumatlarına bir daha nəzər salmaqla başlayın. + +1. Hər bir sütun üçün `boxplot()` çağıraraq boxplot yaradın: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + Bu məlumatlar bir az səs-küylüdür: hər sütunu bir boxplot şəklində müşahidə etməklə kənar göstəriciləri görə bilərsiniz. + + ![kənar göstəricilər](../images/boxplots.png) + +Siz datasetə göz gəzdirə və oradan kənar göstəriciləri silə bilərsiniz, amma belə olduqda datalar olduqca minimal olacaqdır. + +1. Hələlik klasterləşdirmə tapşırığınız üçün hansı sütunlardan istifadə edəcəyinizi seçin. Oxşar diapazonlu olanları seçin və `artist_top_genre` sütununu rəqəmsal data kimi kodlayın: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. İndi siz neçə klasteri hədəf alacağınızı seçməlisiniz. Datasetdən çıxardığımız 3 mahnı janrının olduğunu bilirsiniz, gəlin 3-ü də sınayaq: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Hər bir nöqtə üçün klasteri təxmin edin + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +Siz data setdəki hər bir sətir üçün proqnozlaşdırılan klasterlərlə (0, 1 və ya 2) çap edilmiş massivi görürsünüz. + +1. 'Siluet xalını' hesablamaq üçün bu massivdən istifadə edin: + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Siluet xalı + +Siluet hesabı 1-ə yaxın olanı axtarın. Bu xal -1-dən 1-ə qədər dəyişir və əgər xal 1-dirsə, deməli klaster sıx və digər çoxluqlardan yaxşı ayrılmışdır. 0-a yaxın dəyər isə qonşu klasterlərin qərar sərhədinə çox yaxın olan nümunələrlə üst-üstə düşən klasterləri təmsil edir. [(Mənbə)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Hesabımız **.53**-dür, yəni ortadadır. Bu, məlumatlarımızın bu tip klasterləşdirmə üçün o qədər də uyğun olmadığını göstərir, amma davam edək. + +### Tapşırıq - model qurun + +1. `KMeans` dəyərini daxil edin və klasterləşdirmə prosesinə başlayın. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Burada izah tələb edən bir neçə məqam var. + + > 🎓 diapazon: Bunlar klasterləşmə prosesinin dövrləridir + + > 🎓 random_state: "Mərkəzi nöqtənin ilkin təyini üçün təsadüfi ədəd generasiyasını müəyyən edir." [Mənbə](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "kvadratların çoxluqdaxili cəmi" çoxluqdakı bütün nöqtələrin klaster mərkəzinə olan orta məsafəsinin kvadratını ölçür. [Mənbə](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Ətalət: K-Ortalama alqoritmləri “ətalət”-i, daha dəqiq desək “daxili çoxluqların əlaqəliliyinin ölçülməsini” minimuma endirmək üçün mərkəzləri seçməyə çalışır. [Mənbə](https://scikit-learn.org/stable/modules/clustering.html). Dəyər hər dövrdə wcss dəyişəninə əlavə olunur. + + > 🎓 k-means++: [Scikit-learn]-də(https://scikit-learn.org/stable/modules/clustering.html#k-means) "k-means++" optimallaşdırmasından istifadə edə bilərsiniz. Mərkəzlərin (ümumiyyətlə) bir-birindən uzaq olması, təsadüfi başlanğıcdan daha yaxşı nəticələrə gətirib çıxarır. + +### Dirsək üsulu + +Əvvəllər hesab edirdiniz ki, 3 mahnı janrını hədəflədiyiniz üçün 3 klaster seçməlisiniz. Amma bu həqiqətən də belədirmi? + +1. Əmin olmaq üçün “dirsək üsulundan” istifadə edin. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(range(1, 11), wcss,marker='o',color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Dirsəkdəki 'əyilmə'-nin harada olduğunu göstərən diaqram yaratmaq üçün əvvəlki addımda qurduğunuz `wcss` dəyişənindən istifadə edin. Bu dəyişən optimal klaster sayını göstərir. Bəlkə də elə **3-dür**! + + ![dirsək üsulu](../images/elbow.png) + +## Tapşırıq - klasterləri göstərin + +1. Prosesi yenidən təkrarlayın, bu dəfə üç klaster təyin edin və klasterləri səpələnmə qrafiki kimi göstərin: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. Modelin dəqiqliyini yoxlayın: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + Bu modelin dəqiqliyi o qədər də yaxşı deyil və bunun niyəsi barədə klasterlərin forması sizə ipucu verir. + + ![klasterlər](../images/clusters.png) + + Bu məlumatlar çox balanssızdır, çox aşağı korrelyasiyalıdır və yaxşı qruplaşdırmaq üçün sütun dəyərləri arasında çoxlu fərq var. Əslində, formalaşan klasterlər, çox güman ki, yuxarıda müəyyən etdiyimiz üç janr kateqoriyasından çox təsirlənmiş və ya əyilmişdir. Bu, öyrənmə prosesi idi! + + Scikit-learn-in sənədlərində çox yaxşı demarkasiya edilməmiş çoxluqları olan bu kimi bir modelin "variasiya" problemi olduğunu görə bilərsiniz: + + ![problem modelləri](../images/problems.png) + > Scikit-learn-dən infoqrafik + +## Variasiya + +Variasiya "Ortalamadan kvadrat fərqlərin ortası" [(Mənbə)](https://www.mathsisfun.com/data/standard-deviation.html) kimi müəyyən edilir. Bu klaster problemi kontekstində datasetimizin nömrələrinin orta qiymətdən bir qədər çox ayrılmağa meyilli olduğu məlumatlara aiddir. + +✅ Hazırki problemi düzəltmək üçün mümkün olan bütün yollar haqqında düşünmək üçün əla vaxtdır. Məlumatları bir az daha dəyişək? Fərqli sütunlar istifadə olunur? Fərqli alqoritmdən istifadə edilir? İpucu: Normallaşdırmaq və digər sütunları yoxlamaq üçün [məlumatlarınızı miqyaslandırmağa](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) cəhd edin. + +> Konsepti bir az daha yaxşı başa düşmək üçün '[variasiya kalkulyatorunu](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' yoxlayın. + +--- + +## 🚀 Məşğələ + +Parametrləri düzəltmək üçün bu notbuk faylında bir az vaxt keçirin. Məlumatları daha çox təmizləməklə (məsələn, kənar göstəriciləri silməklə) modelin dəqiqliyini artıra bilərsinizmi? Verilmiş məlumat nümunələrinə daha çox çəki vermək üçün çəkilərdən istifadə edə bilərsiniz. Daha yaxşı klasterlər yaratmaq üçün başqa nə edə bilərsiniz? + +İpucu: Məlumatlarınızı ölçməyə çalışın. Notbukda məlumat sütunlarının diapazon baxımından bir-birinə daha çox bənzəməsi üçün standart miqyas əlavə edən şərhə alınmış kod var. Siz, siluet göstəricisi aşağı düşərkən dirsək qrafikindəki 'bilmə'-nin hamarlaşdığını tapa bilərsiniz. Bu, datanın miqyassız buraxılmasının daha az variasiya ilə daha çox çəki daşımasına imkan verməsinə görə baş verir. Bu problem haqqında bir az daha ətraflı [buradan](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226) oxuyun. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +[Bu kimi](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/) K-Ortalama Simulyatoruna nəzər salın. Nümunə məlumat nöqtələrini vizuallaşdırmaq və onların mərkəzlərini təyin etmək üçün bu alətdən istifadə edə bilərsiniz. Bundan əlavə, məlumatların təsadüfiliyini, klasterlərin və mərkəzlərin sayını dəyişə bilərsiniz. Bu, məlumatların necə qruplaşdırıla biləcəyi barədə fikir əldə etməyə kömək edirmi? + +Həmçinin, Stenforddan [K-Ortalama haqqında olan bu materiala](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) nəzər salın. + +## Tapşırıq + +[Müxtəlif klasterləşdirmə üsullarını sınayın](assignment.az.md) \ No newline at end of file diff --git a/5-Clustering/2-K-Means/translations/assignment.az.md b/5-Clustering/2-K-Means/translations/assignment.az.md new file mode 100644 index 0000000000..291434a186 --- /dev/null +++ b/5-Clustering/2-K-Means/translations/assignment.az.md @@ -0,0 +1,10 @@ +# Müxtəlif klasterləşdirmə üsullarını sınayın + +## Təlimatlar + +Bu dərsdə siz K-Ortalama klasterləşməsi haqqında öyrəndiniz. Bəzən K-Ortalama datanız üçün uyğun olmur. Bu dərslərdən və ya başqa yerdən götürdüyünüz datalardan istifadə edərək notbuk faylı yaradın (mənbənizi qeyd edin) və K-Ortalama-dan istifadə etmədən fərqli klasterləşdirmə metodunu göstərin. Nə öyrəndiniz? + +## Rubrika +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Notbuk yaxşı sənədləşdirilmiş klasterləşdirmə modeli ilə təqdim olunub | Notbuk yaxşı sənədləşdirilmə olmadan və/və ya yarımçıq təqdim olunub | Yarımçıq iş təqdim olunub | \ No newline at end of file diff --git a/5-Clustering/translations/README.az.md b/5-Clustering/translations/README.az.md new file mode 100644 index 0000000000..d4a2e8b17c --- /dev/null +++ b/5-Clustering/translations/README.az.md @@ -0,0 +1,28 @@ +# Maşın öyrənməsində modellərin klasterləşdirilməsi + +Klasterləşdirmə maşın öyrənməsi tapşırığı olub, məqsədi bir-birinə bənzəyən obyektləri tapmaq və onları klasterlər adlanan qruplarda toplamaqdır. Klasterləşdirməni digər maşın öyrənməsi yanaşmalarından fərqləndirən cəhət ondan ibarətdir ki, burada hadisələr avtomatik olaraq baş verir, hətta bunu da demək doğru olar ki, klasterləşdirmə yönləndirilmiş öyrənmənin əksidir. + +## Regional mövzu: Nigeriyalı auditoriyanın musiqi zövqünə görə modellərin klasterləşdirilməsi 🎧 + +Nigeriyanın çeşidli dinləyici auditoriyası çeşidli musiqi zövqünə sahibdir. Gəlin Spotify-dan əldə olunan datadan istifadə edərək ([bu məqalədən](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421) ilham alınmışdır) Nigeriyada məşhur olan musiqiyə nəzər salaq. Bu data massivdə müxtəlif mahnıların 'oynaqlıq' dərəcəsi, 'akustikliyi', gurluğu, 'sözlülüyü', məşhurluğu və enerjisi haqqında məlumat var. Burada təkrarlanan nümunələri kəşf etmək maraqlı olacaq! + +![turntable aləti](../images/turntable.jpg) + +> Unsplash platformasında Marcela Laskoski tərəfindən çəkilmiş şəkil + +Bu dərslərdə siz, klasterləşdirmə texnikalarından istifadə edərək datanı analiz etməyin yeni yolları ilə tanış olacaqsınız. Klasterləşdirmə, datasetdə etiketlərin çatışmayan hallarında xüsusilə faydalıdır. Əgər etiketlər mövcuddursa, o zaman əvvəlki dərslərdə öyrəndiyiniz təsnifatlandırma texnikaları daha faydalı ola bilər. Lakin məsələ etiketlənməmiş datanı qruplaşdıran zaman təkrarlanan nümunələri tapmaqdırsa, o zaman klasterləşdirmə əla üsuldur. + +> Klasterləşdirmə modelləri ilə işləmək haqqında məlumat almanıza kömək olacaq az-kod yanaşmalı alətlər də mövcuddur. Bu tapşırıq üçün olan [Azure ML](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) sınaqdan keçirin. + +## Dərslər + +1. [Klasterləşdirmə bölməsinə giriş](../1-Visualize/translations/README.az.md) +2. [K-Ortalama klasterləşməsi](../2-K-Means/translations/README.az.md) + +## Təşəkkürlər + +Bu dərslər [Jen Looper](https://www.twitter.com/jenlooper) tərəfindən 🎶 ilə və [Rishit Dagli](https://www.twitter.com/rishit_dagli) və [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) tərəfindən gələn faydalı rəylərin köməkliyi ilə yazılmışdır. + +[Nigeria Mahnıları](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) dataseti Spotify-dan əldə olunduğu formatda Kaggle-dan götürülmüşdür. + +Bu dərsin yaradılmasına kömək olan faydalı K-Ortalama nümunələrinə [süsənin tədqiqi](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), bu [başlanğıc üçün praktika notbuku](https://www.kaggle.com/prashant111/k-means-clustering-with-python), və bu [xəyali QHT nümunəsi](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering) daxildir. diff --git a/6-NLP/1-Introduction-to-NLP/translations/README.az.md b/6-NLP/1-Introduction-to-NLP/translations/README.az.md new file mode 100644 index 0000000000..1768affc66 --- /dev/null +++ b/6-NLP/1-Introduction-to-NLP/translations/README.az.md @@ -0,0 +1,168 @@ +# Təbii dil emalına giriş + +Bu dərs *komputer dilçiliyinin* alt bölməsi olan *təbii dil emalının* qısa tarixçəsini və vacib anlayışları əhatə edir. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/?loc=az) + +## Giriş + +NLP (Natural Language Processing - Təbii Dil Emalı) maşın öyrənməsinin tətbiq olunduğu və proqramlarda istifadə olunan ən yaxşı bilinən sahədir. + + +✅ Gündəlik istifadə etdiyin hansı proqramların daxilində NLP olması ilə bağlı təxmin edə bilərsən? Mütəmadi olaraq söz emalı edən proqramlar və ya mobil tətbiqlər istifadə edirsənmi? + +Bunlar barədə öyrənəcəksən: + +- **Dillər ideyası**. Dillər necə inkişaf edib və hansı sahələrdə vacib araşdırlmalar aparılıb. +- **Tərif və anlayışlar**. Sən həmçinin komputerlərin mətnləri necə emal etməsi (qrammatikanı anlamaq, isimləri və felləri seçmək daxil olmaqla) barədə tərifləri və anlayışları öyrənəcəksən. Bu dərsdə bəzi kodlaşdırma tapşırıqları var və növbəti dərslərdə digər vacib anlayışlarla bunun davamı gələcək. + +## Komputer dilçiliyi + +Komputer dilçiliyi on illərdir araşdırma və inkişaf etdirilən bir sahədir. Burada komputerlərin dillərlə necə işləyə işləyə biləcəyi, hətta anlaya, tərcümə edə və əlaqə qura biləcəyi öyrənilir. NLP bununla əlaqəli sahədir və burada komputerlərin insanların istifadə etdiyi təbii dili necə emal edəcəyi diqqət mərkəzindədir. + +### Nümanə - telefon imlası + +Əgər indiyə kimi telefonunda yazmaq əvəzinə imla demisənsə, və ya virtual köməkçiyə sual vermisənsə, sənin nitqin mətn formasına çevrilib və sonra emal olunub. Tapılmış açar sözlər yenidən telefonun və ya köməkçinin başa düşəcəyi, işini görə biləcəyi formaya çevrilir. + +![anlama](../images/comprehension.png) +> Həqiqi dilçiliyi anlamaq çətindir! [Jen Looper](https://twitter.com/jenlooper) təfədindən təsvir. + +### Bu texnologiya necə mümkündür? + +Biz bunu etməsi üçün komputer proqramı yazdığımıza görə mümkündür. Bir neçə onilliklər əvvəl bəzi elmi fantastika yazıçıları biz çox insanın komputerlə danışacağını, və komputerin onları həmişə doğru anlayacağını təxmin etmişdilər. Təəssüflər olsun ki, bu təsəvvür ediləndən daha çətin bir problem olduğu anlaşıldı, 'həqiqi' təbii dili emal etmək və cümlənin ifadə etdiyi mənanı başa düşmək üçün çox çətinliklər mövcuddur. Daxilində yumor və sarkazm daşıyan cümlələri başa düşmək xüsusilə çətin məsələdir. + +Biz burada məktəb dərslərində müəllimlərin cümlənin daxilində istifadə olunan qrammatikanı əhatə etməsini xatırlayırıq. Bəzi ölkələrdə tələbələr qrammatika və dilçilik mövzularını xüsusi bir fənn kimi keçirlər, və ya bu mövzular onların öyrənmə kurikulumuna daxil edilirlər: ya ibtidai sinifdə oxuma və yazmaq dərsi kimi, ya orta məktəbdə ikinci dil kimi, ya da ali məktəbdə. İsimləri fellərdən və ya zərfləri sifətlərdən ayırd etməkdə ekspert deyilsənsə, buna görə narahat olma! + +Əgər sən *indiki zaman* və *indiki davamedici* arasında fərqi anlamaqda çətinlik çəkirsənsə, tək deyilsən. Bu məsələ öz doğma dilində danışan bir çox insan üçün də çətindir. Yaxşı xəbər budur ki, komputerlər formal qaydaları tətbiq etməkdə çox yaxşıdırlar və sən cümləni insan kimi *oxmağı* bacaran kod yazmağı öyrənəcəksən. Əsas çətinliyin cümlənin *mənası* və *hissini* anlamaqda olduğunu görəcəksən. + +## İlkin şərtlər + +Bu dərsdə əsas tələb dərsin dilini oxuya və başa düşə bilməkdir. Burada həll olunmalı riyazi məsələ və ya tənliklər yoxdur. İlkin müəllif bu dərsi inglis dilində yazmış olsa da, bu həmçinin başqa dillərə tərcümə olunmuş ola bilər və sən tərcüməni oxumuş ola bilərsən. Burada müxtəlif dillərdə də istifadə olunan nümunələr vardır (müxtəlif dillərin qrammatika qaydalarını müqayisə etmək üçün). İzahedici mətnlərdən başqaları aydın başa düşülsün deyə tərcümə *olunmayıblar*. + +Kodlaşdırma tapşırığında Python 3.8 proqramlaşdırma dili və nümunə mətnlər istifadə edəcəksən. + +Bu bölmədə sənə lazım olacaq və istifadə edəcəksən: + +- **Python 3 anlamaq**. Python 3 dilində bəzi proqramlaşdırma paradiqmlərini anlamaq lazımdır. Bu dərsdə giriş (input), dövrlər (loops), fayl oxuma (file reading) və massivlər (arrays) istifadə olunmuşdur. +- **Visual Studio Code + extension**. Biz Visual Studio Code proqramını və Python əlavəsini (extension) istifadə edəcəyik. İstədiyin başqa Python IDE də istifadə edə bilərsən. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) Python dilində sadələşdirilmiş mətn emalı üçün kitabxanadır. TextBlob veb saytındakı təlimatları izləyərək proqramı öz sisteminə yüklə (corpora proqramını da aşağıda qeyd olunduğu kimi yüklə): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Məsləhət: Sən Python proqramını birbaşa VS Code mühitində də icra edə bilərsən. Əlavə məlumat üçün [sənədlərə](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) baxa bilərsən. + +## Maşınlarla danışmaq + +Komputerlərin insan dilini anlaması tarixçəsi bir neçə onilliklərə gedir və ilk təbii dil emalını reallaşdıran alim *Alan Turinq* hesab olunur. + +### 'Turinq testi' + +Turinq 1950-ci illərdə *süni intellekt* haqqında araşdırma apararkən insanın yazı vasitəsi ilə ünsiyyət qurduğu tərəfin başqa bir insan və ya komputer olduğunu fərqində olmamasının mümkünlüyü düşünürdü. + +Əgər müəyyən bir müddət söhbətdən sonra insan cavabları komputerdən, yoxsa insandan aldığını fərqləndirə bilməzsə, biz hesab bilərik ki komputer *düşünə bilir*? + +### İlham - 'təqlid oyunu' + +Bu ideya qrup daxili oynanılan *Təqlid oyunundan* götürülüb. Oyun zamanı otaqda olan bir şəxs (sorğu aparan) digər otaqda olan iki nəfərin uyğun olaraq oğlan və ya qız olduğunu tapması tələb olunur. +Sorğu aparan şəxs qeydlər göndərə bilər və yazılı cavablardan sirli şəxsin cinsini aşkar edə biləcək sualları düşünməyə çalışmalıdır. Təbii ki, digər otaqdakı oyunçular sorğuçunu səmimi cavablandırdıqlarına inandırmaqla çaşdırmağa da çalışırlar. + +### Elizanın yaradılması + +1960-cı illərdə *Cosept Veizenbaum* adlı MIT alimi insanlara sual verməklə onların cavabını başa düşdüyü görünüşü verən [*Eliza*](https://wikipedia.org/wiki/ELIZA) adlı komputer 'terapisti' yaratdı. Lakin Elizanın cümləndə bəzi açar sözləri və qrammatika quruluşunu oxuyaraq cavab verə bilməsi, onun cümləni həqiqətən *anladığı* demək olmaz. Əgər Elizaya "**Mən** pisəm" kimi cümlə daxil edilsə, o sözlərin yerini dəyişəcək və yeni cavab formalaşdıracaq - "**Sən** nə qədər müddətdir pissən?". + +Bu Elizanın cümləni anladığı hissi verib açıq suallarla davam etsə də, reallıqda o sadəcə cümlənin zamanını dəyişir və əlavə sözlər daxil edir. Əgər Eliza cavab verə biləcək açar söz tapa bilməsə, o fərqli mənalara gətirə biləcək təsadüfi cavab verəcək. Eliza rahatlıqla aldadıla bilər, misal üçün istifadəçi əgər "**Sən** velosipedsən" yazsa, o mənalı cavab yerinə "Nə qədər müddətdir **mən** velosipedəm?" kimi cavab verəcək. + +[![Eliza ilə danışmaq](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Eliza ilə danışmaq") + +> 🎥 Orijinal ELIZA proqramı barədə videoya baxmaq üçün yuxarıdakı şəkilə kliklə + +> Qeyd: Əgər ACM hesabın varsa, 1966-cı ildə nəşr edilmiş [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) haqqında orijinal məqaləni +oxuya bilərsən. Əlavə olaraq Eliza haqqında [wikipediada](https://wikipedia.org/wiki/ELIZA) da oxuya bilərsən. + +## Tapşırıq - sadə danışıq botu kodlaması + +Eliza kimi danışıq botu istifadəçi daxiletməsini qəbul edən, ağıllı şəkildə başa düşən və cavab verə bilən proqramdır. Elizadan fərqli olaraq bizim botun ağıllı söhbət apardığı görünüşü yaraqmaq üçün qaydaları olmayacaq. Bunun əvəzinə bizim botumuz hər bir sadə söhbətdə işlədilə biləcək təsadüfi cavabları verməklə söhbəti davam etdirməyə çalışacaq bir qabiliyyətə sahib olacaq. + +### Plan + +Danışıq botu yaratmaq üçün addımlar: + +1. İstifadəçinin botla necə əlaqə qura biləcəyi barədə təlimatı ekrana çıxar +2. Dövr (loop) başlat + 1. İstifadəçi daxiletməsini qəbul et + 2. İstifadəçi çıxmaq istəsə, tətbiqdən çıx + 3. İstifadəçi daxiletməsini emal et və cavab seç (bu halda cavab mümkün ola biləcək ümumi cavablar siyahısından birinin təsadüfi seçilməsidir) + 4. Cavabı çap et +3. Dövrün başlanğıcına geri dön (2-ci addım) + +### Bot yaratmaq + +Gəlin indi botu yaradaq. Bəzi ifadələri təyin etməklə başlayacağıq. + +1. Aşağıdakı təsadüfi cavablarla Python-da bu botu yaradın: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + Burada kömək üçün bir neçə cavabla (output) tanış ola bilərsən (istifadəçi daxiletmələri olan sətirlər `>` simvolu ilə başlayır): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + Tapşırıq üçün həllərdən biri ilə [buradan](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) tanış ola bilərsən. + + ✅ Dayan və düşün + + 1. Düşünürsən ki, təsadüfi cavablar istifadəçini 'aldadaraq' botun onu həqiqətən anladığına inandıra bilər? + 2. Bot daha effektiv olması üçün hansı funksiyalara ehtiyac vardır? + 3. Əgər bot həqiqətən cümlənin mənasını 'başa düşsə', onun söhbətdəki əvvəlki cümlələrdəki mənanı da 'xatırlaması' lazımdırmı? + +--- + +## 🚀 Məşğələ + +Yuxarıdakı "dayan və düşün" elementlərindən birini seç və onu kodda tətbiq etməyə və ya həlli kağızda kod planı (pseudocode) kimi yazmağa çalış. + +Növbəti dərsdə təbii dilin emalı və maşın öyrənməsi üçün bir neçə yanaşma öyrənəcəksən. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Əlavə oxumaq materialları üçün aşağıdakı istinadlara baxın. + +### İstinadlar + +1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . +2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. + +## Tapşırıq + +[Bot axtarışı](assignment.az.md) diff --git a/6-NLP/1-Introduction-to-NLP/translations/assignment.az.md b/6-NLP/1-Introduction-to-NLP/translations/assignment.az.md new file mode 100644 index 0000000000..a264ebee6f --- /dev/null +++ b/6-NLP/1-Introduction-to-NLP/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Bot axtarışı + +## Təlimatlar + +Botlar hər yerdədir. Sənin tapşırığın: birini tap və sahiblən! Sən onları veb saytlarda, bank tətbiqlərində, və həmçinin telefonda da tapa bilərsən - məsələn maliyyə xidməti verən şirkətə tövsiyyə və ya hesab barədə məlumat üçün zəng edən zaman. Botu analiz et və onu çaşdıra bilməyin yollarını axtar. Əgər botu çaşdıra bildinsə, bunun səbəbi nə oldu səncə? Təcrübən barədə kiçik bir esse yaz. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | 1 səhifəlik esse yazılmışdır, botun işləmə mexanizmi izahı və onunla olan təcrübən əhatə olunmuşdur | Esse yarımçıqdır və tam araşdırılma yerinə yetirilməyib | Esse hazırlanmayıb | diff --git a/6-NLP/2-Tasks/translations/README.az.md b/6-NLP/2-Tasks/translations/README.az.md new file mode 100644 index 0000000000..d5d07b7a5f --- /dev/null +++ b/6-NLP/2-Tasks/translations/README.az.md @@ -0,0 +1,210 @@ +# Çox işlənən təbii dil emalı tapşırıqları və texnikaları + +Əksər *təbii dil emalı* tapşırıqları üçün emal ediləcək mətn hissələrə ayrılmalı, tədqiq edilməli və nəticələr ya haradasa saxlanmalı, ya da qaydalar və data setləri ilə çarpaz istinad edilməlidir. Bu tapşırıqlar proqramçıya mətndəki termin və sözlərin _mənasını_, _niyyətini_ və yaxud da yalnız _tezliyini_ əldə etməyə imkan verir. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/?loc=az) + +Mətn emalında tez-tez istifadə olunan texnikaları kəşf edək. Maşın öyrənməsi ilə birlikdə bu üsullar böyük həcmdə mətni səmərəli şəkildə təhlil etməyə kömək edir. Bu tapşırıqlara ML tətbiq etməzdən əvvəl gəlin NLP mütəxəssisinin qarşılaşdığı problemləri anlayaq. + +## NLP-ə xas tapşırıqlar + +Üzərində işlədiyiniz mətni təhlil etməyin müxtəlif yolları var. Burada sizin yerinə yetirə biləcəyiniz tapşırıqlar mövcuddur. Həmin tapşırıqlar vasitəsilə siz mətni başa düşə və nəticələr çıxara bilərsiniz. Əksərən bu tapşırıqlar sıra ilə yerinə yetirilir. + +### Tokenləşdirmə + +Yəqin ki, əksər NLP alqoritmlərinin etməli olduğu ilk şey mətni tokenlərə və ya sözlərə bölməkdir. Bu sadə səslənsə də, durğu işarələrini və müxtəlif dillərin söz və cümlə ayırıcılarını nəzərə almaq onu çətinləşdirə bilər. Demarkasiyaları müəyyən etmək üçün müxtəlif üsullardan istifadə etməli ola bilərsiniz. + +![tokenləşdirmə](../images/tokenization.png) +> **Qürur və Qərəz**-dən bir cümlənin tokenləşdirilməsi. [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilmiş infoqrafik. + +### Yerləşdirmələr + +[Söz daxiletmələri](https://wikipedia.org/wiki/Word_embedding) mətn məlumatlarınızı ədədi olaraq çevirməyin bir üsuludur. Yerləşdirmə elə bir şəkildə edilir ki, oxşar mənalı sözlər və ya birlikdə istifadə olunan sözlər birləşsin. + +![söz daxiletmələri](../images/embedding.png) +> "I have the highest respect for your nerves, they are my old friends." - **Qürur və Qərəz**-dən bir cümlə üçün söz daxiletmələri. [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilmiş infoqrafik. + +✅ Söz yerləşdirmələr ilə sınaqlar keçirmək üçün [bu maraqlı aləti](https://projector.tensorflow.org/) sınayın. Bir sözə kliklədikdə oxşar sözlərdən ibarət qruplar görünür: 'oyuncaq' ilə 'disney', 'lego', 'playstation' və 'console' klasterləri. + +### Təhlil & Nitq hissələrinin etiketlənməsi + +Tokenləşdirilmiş hər bir söz nitq hissəsi olaraq isim, fel və ya sifət kimi qeyd edilə bilər. `The quick red fox jumped over the lazy brown dog` cümləsi POS(nitq hissəsinin ingiliscə qarşılığı olan "part-of-speech"-in qısaldılmış forması) olaraq fox = isim, jumped = fel kimi işarələnə bilər. + +![təhlil](../images/parse.png) + +> **Qürur və Qərəz**-dən bir cümlənin təhlili. [Jen Looper](https://twitter.com/jenlooper) tərəfindən infoqrafik. + +Hissələrə ayırma bir cümlədə hansı sözlərin bir-biri ilə əlaqəli olduğunu tanımaqdır - məsələn, `the quick red fox jumped`, `lazy brown dog` ardıcıllığından ayrı olan sifət-isim-fel ardıcıllığıdır. + +### Söz və ifadə tezlikləri + +Böyük bir mətni təhlil edərkən məsləhətdir ki, hər bir söz və ya söz birləşməsini və onun nə qədər tez rast gəlindiyini göstərən lüğət yaradılsın. `The quick red fox jumped over the lazy brown dog` cümləsindəki `the` 2 söz tezliyinə malikdir. + +Sözlərin tezliyini saydığımız nümunə mətnə baxaq. Rudyard Kiplinqin "Qaliblər" şeirində aşağıdakı bənd var: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Tələb olunduğu kimi ifadə tezliyi böyük və ya kiçik hərflərə həssas ola bildiyinə görə, `a friend` ifadəsinin tezliyi 2, `the` ifadəsinin tezliyi 6, `travels`-in tezliyi isə 2-dir. + +### N-qram + +Mətn müəyyən uzunluqdakı sözlər ardıcıllığına, tək sözə (uniqram), iki sözə (biqram), üç sözə (triqram) və ya istənilən sayda sözə (n-qram) bölünə bilər. + +Məsələn, n-qram balı 2 olan `the quick red fox jumped over the lazy brown dog` cümləsi aşağıdakı n-qramları əmələ gətirir: + +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +Onları cümlə üzərində sürüşmə qutusu kimi göstərmək daha asan ola bilər. Nümunə 3 sözdən ibarət n-qramlar üçündür və hər cümlədə n-qram qalın şriftlə göstərilmişdir: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** + +![n-qramların sürüşən pəncərə ilə təsviri](../images/n-grams.gif) + +> 3-ün N-qram dəyəri: [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilmiş infoqrafik. + +### İsimin çıxarılması + +Əksər cümlələrdə cümlənin subyekti və ya obyekti olan isim mövcud olur. İngilis dilində tez-tez həmin isimlərin qarşısında 'a', 'an' və ya 'the' görə bilərik. NLP-də cümlənin mənasını qavramağa çalışarkən "isimi çıxarmaq" yolu ilə cümlənin subyektinin və ya obyektinin müəyyən edilməsi tez-tez edilən bir üsuldur. + +✅ "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun." cümləsində olan isimləri müəyyənləşdirə bilərsinizmi? + +`the quick red fox jumped over the lazy brown dog` cümləsində 2 isim var: **quick red fox** və **lazy brown dog**. + +### Emosionallıq təhlili + +Cümlə və ya mətn onun emosionallığını təyin etmək və ya nə dərəcədə *müsbət* və ya *mənfi* olması üçün təhlil edilə bilər. Emosionallıq *qütblük* və *obyektivlik/subyektivlik* ilə ölçülür. Qütblülük -1.0-dən 1.0-ə (mənfidən müsbətə) və 0.0-dan 1.0-ə qədər (ən obyektivdən ən subyektivinə) ölçülür. + +✅ Sonradan öyrənəcəksiniz ki, maşın öyrənməsindən istifadə edərək emosionallığı müəyyən etməyin müxtəlif yolları var, lakin bunun bir yolu insan eksperti tərəfindən müsbət və ya mənfi olaraq təsnif edilən söz və ifadələrin siyahısına sahib olmaq və həmin modeli verilən mətnə tətbiq edərək qütbilik hesabını tapmaqdır. Bu üsulun bəzi hallarda necə işlədiyini və digərlərində daha az yaxşı olacağını görə bilərsinizmi? + +### Bükülmə + +Bükülmə verilən sözə görə həmin sözün tək və ya cəm halını əldə etməyə imkan verir. + +### Lemmatizasiya(Söz kökünün müəyyən olunması) + +*Lemma* sözlər qrupunun aid olduğu kök sözü bildirir. Məsələn *flew*, *flies*, *flying* sözləri *fly* felinin lemmasına malikdir. + +NLP tədqiqatçısı üçün faydalı data bazaları da mövcuddur, xüsusən: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) hər bir söz üçün müxtəlif dillərdə onların qarşılığı, sinonimləri, antonimləri və bir çox başqa təfərrüatları özündə saxlayan lüğət bazasıdır. Tərcümələr, orfoqrafik yoxlayıcılar və ya istənilən növ dil alətləri yaratmaq üçün inanılmaz dərəcədə faydalıdırlar. + +## NLP kitabxanaları + +Xoşbəxtlikdən bu texnikaların hamısını özünüzün yaratmasına ehtiyac yoxdur. Çünki təbii dil emalı və ya maşın öyrənməsi üzrə ixtisaslaşmamış tərtibatçılar üçün onu daha əlçatan edən əla Python kitabxanaları mövcuddur. Növbəti dərslərdə bunlara dair daha çox nümunə olacaq, lakin burada növbəti tapşırığı yerinə yetirməkdə sizə kömək etmək üçün bəzi faydalı nümunələr öyrənəcəksiniz. + +### Tapşırıq - `TextBlob` kitabxanasından istifadə etmək + +Gəlin bu tip tapşırıqların həlli üçün faydalı API-ləri ehtiva edən TextBlob adlı kitabxanadan istifadə edək. TextBlob, "[NLTK](https://nltk.org) və [pattern](https://github.com/clips/pattern)-in nəhəng çiyinləri üzərində dayanır və hər ikisi ilə yaxşı uyğunlaşır." Onun API-sinə daxil edilmiş xeyli miqdarda ML var. + +> Qeyd: Təcrübəli Python tərtibatçıları üçün tövsiyə olunan faydalı [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) bələdçisi TextBlob üçün mövcuddur. + +*İsimləri* müəyyən etməyə çalışarkən, TextBlob onları tapmaq üçün bir neçə ekstraktor variantı təklif edir. + +1. `ConllExtractor`a nəzər salın. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > Burada nə baş verir? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) "ConLL-2000 ilə öyrədilmiş toplu təhlilindən istifadə edən isim çıxarıcı öyrətmə korpusudur”. ConLL-2000 2000-ci ildə Hesabi Təbii Dil Öyrənmə Konfransına işarə edir. Hər il bu konfrans çətin bir NLP problemini həll etmək üçün seminar keçirir. 2000-ci ildə isə bu problem isim parçalanması olmuşdur. Həmin model Wall Street Journal-dakı "15-18-ci bölmələri öyrətmə datası (211727 token) və 20-ci bölməni isə test datası (47377 token)" kimi götürərək hazırlanmışdır. Siz istifadə olunan prosedurlara [burada](https://www.clips.uantwerpen.be/conll2000/chunking/), nəticələrə isə [buradan](https://ifarm.nl/erikt/research/np-chunking.html) baxa bilərsiniz. + +### Çağırış - NLP ilə botunuzun təkmilləşdirilməsi + +Əvvəlki dərsdə siz çox sadə bir sual-cavab botu yaratmışdınız. İndi əhval-ruhiyyə üçün daxil etdiyinizi təhlil edərək və əhval-ruhiyyəyə uyğun cavabı çap etməklə Marvini bir az daha anlayışlı etmiş olacaqsınız. Bundan əlavə, həmçinin siz `isimi` təyin etməli və bu barədə soruşmalısınız. + +Daha yaxşı danışıq botu qurarkən atmalı olduğunuz addımlar bunlardır: + +1. İstifadəçiyə botla necə qarşılıqlı əlaqə qurmağı tövsiyə edən təlimatları göstərin +2. Dövrün başlanğıcı + 1. İstifadəçi daxiletməsini qəbul edin + 2. Əgər istifadəçi çıxmağı xahiş edibsə, çıxın + 3. İstifadəçi daxiletməsini emal edin və müvafiq əhval-ruhiyyə cavabını təyin edin + 4. Hissdə isim aşkar edilərsə, onu cəm formasına çevirin və bu mövzuda əlavə məlumat tələb edin + 5. Cavabı çap edin +3. 2-ci addıma qayıdın + +TextBlob-dan istifadə edərək əhval-ruhiyyəni müəyyən etmək üçün nümunə kod budur. Nəzərə alın ki, yalnız dörd *qradient* əhval-ruhiyyə cavabı var (istəyərsinizsə, daha çoxunu əldə edə bilərsiniz): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Sizi istiqamətləndirmək üçün bir neçə nümunə çıxışı təqdim edirik (istifadəçi girişi > ilə başlayan sətirlərdədir): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Tapşırığın mümkün həlli [buradadır](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py). + +✅ Bilik yoxlanışı + +1. Sizcə anlayışlı cavablar kimisə botun həqiqətən də onları başa düşdüyünü düşünməyə 'inandıra biləcək'? +2. İsimi müəyyən etmək botu daha 'inandırıcı' edirmi? +3. Nəyə görə cümlədən 'isimi' çıxarmaq faydalı olardı? + +## 🚀 Məşğələ + +Əvvəlki bilik yoxlamasındakı tapşırığı götürün və onu həyata keçirməyə çalışın. Botu dostunuz vasitəsilə test edin. Onu aldada bilərmi? Botunuzu daha 'inandırıcı' edə bilərsinizmi? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Növbəti bir neçə dərsdə siz hisslərin təhlili haqqında daha çox məlumat əldə edəcəksiniz. Bu maraqlı texnikanı [KDNuggets] (https://www.kdnuggets.com/tag/nlp) saytındakı bu kimi məqalələrlə araşdırın. + +## Tapşırıq + +[Botun reaksiya bildirməsini təmin edin](assignment.az.md) \ No newline at end of file diff --git a/6-NLP/2-Tasks/translations/assignment.az.md b/6-NLP/2-Tasks/translations/assignment.az.md new file mode 100644 index 0000000000..cc269e2423 --- /dev/null +++ b/6-NLP/2-Tasks/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Botun reaksiya bildirməsini təmin edin + +## Təlimatlar + +Son bir neçə dərsdə söhbət etmək üçün sadə bir bot proqramlaşdırmısınız. Bu bot siz 'bye' deyənə qədər təsadüfi cavablar verir. 'Niyə' və ya 'necə' kimi konkret şeylər soruşsanız verməli olduğu cavabları daha az təsadüfi edə bilərsinizmi? Botunuzu genişləndirdiyiniz zaman maşın öyrənmənin bu cür işi necə daha az mexaniki edə biləcəyi haqqında bir az düşünün. Tapşırıqlarınızı asanlaşdırmaq üçün NLTK və ya TextBlob kitabxanalarından istifadə edə bilərsiniz. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Yeni bot.py faylı təqdim olunub və sənədləşdirilib | Yeni bot faylı təqdim olunsa da, səhvlər mövcuddur | Fayl təqdim edilməyib | \ No newline at end of file diff --git a/6-NLP/3-Translation-Sentiment/translations/README.az.md b/6-NLP/3-Translation-Sentiment/translations/README.az.md new file mode 100644 index 0000000000..ed13bdb7ad --- /dev/null +++ b/6-NLP/3-Translation-Sentiment/translations/README.az.md @@ -0,0 +1,189 @@ +# Tərcümə və mətn analizi ilə ML + +Əvvəlki dərslərdə əsas nitq birləşmələrinin çıxarılması kimi əsas NLP vəzifələrini yerinə yetirmək üçün səhnə arxasında ML istifadə edən TextBlob kitabxanası ilə bot yaratmağı öyrəndiniz. Hesablama dilçiliyində digər mühüm bir məsələ isə bir cümlənin danışıq və ya yazılı dildən digərinə dəqiq tərcümə edilməsidir. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/?loc=az) + +Tərcümə çox çətin bir məsələdir, çünki minlərlə dil var və hər birinin çox fərqli qrammatika qaydaları ola bilər. Bir yanaşma bir dili, məsələn, İngilis dilinin rəsmi qrammatika qaydalarını dilin özündən asılı olmayan bir struktura çevirmək və sonra başqa bir dilə tərcümə edərək geri çevirməkdir. Bu yanaşma aşağıdakı addımları atmağınızı tələb edir: + +1. **İdentifikasiya**. Daxil olan dildəki sözləri isim, fel və s. kimi müəyyənləşdirin və ya işarələyin. +2. **Tərcümə yaradın**. Hədəf dil formatında hər sözün birbaşa tərcüməsini hazırlayın. + +### Nümunə cümlə, İngilis dilindən İrland dilinə + +'İngilis', dilində cümlə _I feel happy_ üç ardıcıl sözdən ibarətdir: + +- **isim** (I) +- **feil** (feel) +- **sifət** (happy) + +Lakin, 'İrland' dilində eyni cümlə çox fərqli qrammatik quruluşa malikdir - "*xoşbəxt*" və ya "**kədərli" kimi hisslər sanki sənin üzərində imiş kimi ifadə edilir. + +İngilis dilindəki `I feel happy` ifadəsi İrland dilində `Tá athas orm` formasında olardı. *literal* tərcüməsi `Xoşbəxtlik mənim üstümdədir`. olaraq anlaşılır. + +İrland dilində danışan biri İngilis dilinə tərcümə edərkən `I feel happy` deyər, `Happy is upon me` (Xoşbəxtlik mənim üzərimdədir) deməz, çünki cümlənin mənasını fərqli formada başa düşülər, hətta sözlər və cümlə quruluşu fərqli olsa belə. + +İrland dilindəki cümlə quruluşu: + +- **fel** (Tá və ya is) +- **sifət** (athas, və ya xoşbəxt) +- **isim** (orm, or mənim üzərimdə) + +## Tərcümə + +Sadə tərcümə proqramları yalnız sözləri tərcümə edə bilir, cümlə strukturunu nəzərə almır. + +✅ Əgər sən yetişkin biri kimi ikinci (üçüncü və ya daha çox) dil öyrənmisənsə, çox güman ki, birinci öz doğma dilində fikirləşməyə başlamısan, fikrini beynində ikinci dilə sözbəsöz tərcümə etmisən və sonra öz tərcüməni səsləndirmisən. Tərcümə kompüter proqramları da bunun bənzərini edir. Səmərəliliyə nail olmaq üçün bu mərhələni keçmək vacibdir! + +Sadə tərcümə yanlış tərcümələrə (bəzən möhtəşəmlərinə) gətirib çıxara bilir: `I feel happy` (mən yaxşı hiss edirəm) irland dilinə hərfi olaraq `Mise bhraitheann athas` kimi tərcümə olunur. Bu (hərfi olaraq) `me feel happy` (mən yaxşı hiss edirəm) kimi mənaya gəlir, lakin irland dilində bu düzgün bir cümlə deyil. Baxmayaraq ki, inglis və irland dilləri iki yaxın adada danışılır, onlar çox fərqli qrammatik strukturları ilə çox fərqli dillərdir. + +> İrland dilçiliyi ənənələri barədə [bunun kimi](https://www.youtube.com/watch?v=mRIaLSdRMMs) bəzi videolara baxa bilərsən. + +### Maşın öyrənməsi yanaşmaları + +İndiyə kimi təbii dil emalına rəsmi qaydalarla yanaşmalarını öyrənmisən. Başqa yanaşma sözlərin mənasını nəzərə almamaq və _onun yerinə maşın öyrənmə istifadə etməklə modeli tapmaqdır_. Əgər həm başlanğıc, həm də təyinat dillərdə çox sayda söz (*corpus*) və ya sözləri (*corpora*) tərcümə etmək istəyirsənsə, bu metod yaxşı işləyir. + +Misal olaraq 1813-cü ildə Ceyn Austin tərəfindən yazılan məşhur inglis hekayəsi *Qürur və qərəzi* nəzərə alaq. Əgər sən kitabı inglis dilində analiz etsən və insan tərəfindən *fransız* dilinə tərcümə olunmuş versiyasını oxusan orada bəzi söz birləşmələrinin _idiomatik olaraq_ digər dilinə tərcümə olunduğuna şahid olacaqsan. Tezliklə bunu görəcəksən. + +Misal üçün inglis dilində `I have no money`(mənim pulum yoxdur) ifadəsi hərfi olaraq fransız dilinə tərcümə olunanda `Je n'ai pas de monnaie` çevrilir. "Monnaie" sözü fransız dilində 'yanlış qohum' sözdür, belə ki 'money' və 'monnaie' sözləri sinonim deyillər. İnsan tərəfindən daha yaxşı tərcümə olsunsa `Je n'ai pas d'argent` kimi olardı, çünki burda daha aydın şəkildə pulun olmadığı mənası verir (nəinki 'monnaie' sözünün mənası 'boş dəyişiklik' mənasını verir). + +![monnaie](../images/monnaie.png) + +> [Cen Luper](https://twitter.com/jenlooper) tərəfindən şəkil + +Əgər ML modeli kifayət qədər insan tərcümələrinə sahib olsa, o tərcübəli və hər iki dildə danışan insanların əvvəlki tərcümələri üzərindən ümumi qaydaları taparaq dəqiqliyini daha da inkişaf etdirə bilər. + +### Məşğələ - tərcümə + +Sən cümlələri tərcümə etmək üçün `TextBlob` istifadə edə bilərsən. **Qürur və qərəz**-dən olan ilk məşhur cümləni yoxla: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` tərcümədə yaxşı nəticə göstərir: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +TextBlob-un tərcüməsinin dəqiqlikdən biraz uzaq olduğu müzakirə oluna bilər, fakt olaraq V. Lakont və Ç. Pressorun 1932-ci kitabının fransızca tərcüməsi belədir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +Bu vəziyyətdə ML tərəfindən tərcümə tapşırığı daha yaxşı yerinə yetirir, nəinki insan tərcüməçi müəllifin original sözləri arasında 'dəqiqliyi' artırmaq üçün lazımsız sözlər daxil edir. + +> Burada nə baş verir? Nə üçün TextBlob tərcümədə çox yaxşıdır? O arxa planda tapşırığı yerinə yetirmək üçün ən yaxşı sətirləri proqnozlaşdırmaq üçün milyonlarla ifadəni təhlil edə bilən mürəkkəb AI - Google tərcümə proqramını istifadə edir. Burada heç bir iş əllə görülmür və sənin `blob.translate` istifadə edə bilməyin üçün internet əlaqəsinə ehtiyacın var. + +✅ Müxtəlif cümlələr yoxla. Ml yoxsa insan tərcüməsi daha yaxşıdır? Hansı hallarda? + +## Hiss analizi + +Maşın öyrənmənin çox yaxşı işləyə biləcəyi başqa bir sahə hiss analizidir. Hissələrə qeyri-ML yanaşma "müsbət" və "mənfi" olan söz və ifadələri müəyyən etməkdir. Sonra, yeni bir mətn parçası verilərkən ümumi əhval-ruhiyyəni müəyyən etmək üçün müsbət, mənfi və neytral sözlərin ümumi dəyərini hesablayın. + +Bu yanaşma Marvin tapşırığında gördüyümüz cümlə kimi çox rahatlıqla aldadıla bilər, `Əla, bu gözəl vaxt itkisi idi, bu qaranlıq yolda itdiyimiz üçün şadam` cümləsi sarkazm və neqativ hiss daşıyır, lakin sadə alqoritm 'əla', 'gözəl', 'şad' sözlərini müsbət, 'itki', 'itmiş' və 'qaranlıq' is mənfi kimi təyin edəcək. Ümumi hiss bu qarşılıqlı sözlərə görə qeyri-dəqiq olacaq. + +✅ Bir saniyə dayanın və insan kimi sarkazmı necə çatdırdığımızı düşünün. Ton oynaması böyük rol oynayır. Səsinizin mənanı necə çatdırdığını görmək üçün müxtəlif yollarla "Yaxşı, o film möhtəşəm idi" ifadəsini deməyə çalışın. + +### ML yanaşmaları + +ML yanaşması mətnin mənfi və müsbət hissələrini - tvitləri, film rəylərini və ya insanın xal *və* yazılı rəy verdiyi hər şeyi əl ilə toplamaq olardı. Sonra NLP texnikaları fikirlərə və xallara tətbiq oluna bilər, beləliklə nümunələr meydana çıxa bilər (məsələn, müsbət film rəylərində mənfi film rəylərindən daha çox "Oskara layiqdir" ifadəsi olur və ya müsbət restoran rəyləri "iyrənc"dən daha çox "gurme" sözü istifadə olunur.). + + +> ⚖️ **Nümunə**: Əgər siz siyasətçinin ofisində işləmisinizsə və yeni qanun müzakirə olunurdusa, seçicilər xüsusi yeni qanunu dəstəkləyən və ya əleyhinə olan e-poçtların daxil olduğunu görə bilərdiniz. Deyək ki, sizə e-poçtları oxumaq və onları *lehinə* və *əleyhinə* olmaqla 2 qrupa çeşidləmək tapşırılıb. Əgər çox e-məktublar olsaydı, onların hamısını oxumağa cəhd etmək sizə yorucu gələ bilər. Bir bot sizin üçün onların hamısını oxuyub başa düşsə və hər bir e-poçtun hansı qrupa aid olduğunu sizə bildirsə, gözəl olmazdımı? +> +> Buna nail olmağın bir yolu Maşın Öyrənməsindən istifadə etməkdir. Siz modeli e-poçtların bir hissəsi ilə *leyihə* və digər hissəsi ilə *əleyhinə* olaraq öyrədərdiniz. Model ifadələri və sözləri əleyhinə və lehinə tərəf ilə əlaqələndirməyə meylli olardı, *lakin o, məzmunun heç birini başa düşməyəcək*, yalnız müəyyən söz və nümunələri öz ehtimallarına əsasən *əleyhinə* və ya *leyinə* e-məktublarda olacaqdır. Siz modeli öyrətmək üçün istifadə etmədiyiniz bəzi e-poçt məktubları ilə sınaqdan keçirə və onun sizinlə eyni nəticəyə gəlib-gəlmədiyini görə bilərsiniz. Bundan sonra modelin dəqiqliyindən məmnun ola və oxumadan növbəti e-poçtların hər birini emal edə bilərsiniz. + +✅ Bu proses əvvəlki dərslərdə istifadə etdiyimiz proseslərə oxşar gəldimi? + +## Tapşırıq - sentimental cümlələr + +Hiss -1-dən 1-ə kimi olan *şkala* üzərində ölçülür, -1 ən mənfi hissi, 1 isə ən müsbəti bildirir. Hiss həçminin 0 - 1 arasında obyektivlik (0) və subyektivlik (1) üzrə də ölçülür. + +Ceyn Austinin *Qürur və qərəz* əsərinə yenidən baxaq. Mətn [Qutenberq layihəsində](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) də yerləşdirilib. Aşağıdakı nümunədə qısa proqram kitabdan birinci və son cümlələrini hiss analizi edir, hiss şkalası və subtektivlik/obyektivlik qiymətlərini çap edir. + +`TextBlob` kitabxanasını (yuxarıda qeyd olunan) `hissi` təyin etmək üçün (öz hiss hesablayıcını yazmağa ehtiyac olmamalıdır) aşağıdakı tapşırıqda istifadə etməlisən. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Aşağıdakı nəticəni görməlisən: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Məşğələ - hiss şkalasını yoxla + +Sənin tapşırığın hiss şkalaları istifadə etməklə *Qürur və Qərəz* mütləq sayda mənfidən daha çox müsbət cümlələrin olduğu halı təyin etməkdir. Bu tapşırıq üçün sən şkalanın 1 və ya -1 dəyərlərini müvafiq olaraq mütləq müsbət və ya mənfi kimi saya bilərsən. + +**Addımlar:** + +1. [Qürur və Qərəzin nüxsəsini](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) Qutenberq layihəsindən .txt faylı kimi yükləyin. Faylın əvvəlində və sonunda metadatanı silin, yalnız orijinal mətni saxla +2. Faylı Python-da açın və məzmunu string kimi çıxar +3. Kitab string dəyərini istifadə edərək TextBlob yarat +4. Kitabın hər cümləsini dövr içində analiz et + 1. Cümlənin müsbət və mənfi mənasına əsasən şkala dəyəri 1 və ya -1 kimi çoxluq içində saxla +5. Sonda bütün müsbət və mənfi cümlələri (ayrı-ayrı) və hər birinin sayını çap et + +Nümunə [həll](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb) burdadadır. + +✅ Bilik yoxlaması + +1. Hiss cümlədə istifadə olunan sözlərə əsaslanır, lakin kod sözləri *anlayırmı*? +2. Sizcə, hiss şkalası dəqiqdirmi, başqa sözlə, xallarla *razısan*? + 1. Xüsusilə aşağıdaki cümlələrin mütləq **müsbət** şkala ilə qiymətləndirilməsinə razısan, yoxsa razı deyilsən? + * “Nə gözəl atanız var, qızlar!” qapı bağlananda dedi. + * “Cənab Darsi ilə bağlı imtahanınız bitdi, məncə,” Miss Binqli dedi; "Və dua et, nəticəsi nə olacaq?" “Mən buna tam əmin oldum ki, cənab Darsinin heç bir qüsuru yoxdur”. + * Bu cür şeylər necə də gözəl baş verir! + * Dünyada bu cür şeylərə ən böyük nifrətim var. + * Seyə bilərəm ki, Şarlotta əla menecerdir. + * “Bu, həqiqətən də ləzzətlidir!“ + * Mən çox xoşbəxtəm! + * Ponilər haqqında təsəvvürünüz ləzzətlidir. + 2. Növbəti 3 cümlə mütləq müsbət əhval-ruhiyyə ilə qiymətləndirildi, lakin yaxından oxuduqda onlar müsbət cümlələr deyil. Nə üçün hisslərin təhlili onların müsbət cümlələr olduğunu düşündü? + * “Onun Niderfilddə qalması başa çatanda xoşbəxt olacağam!” Elizabet cavab verdi: “Kaş ki, sənə təsəlli verəcək bir şey deyə biləydim”; “Ancaq bu, mənim gücümdən tamamilə kənardır”. + * Səni xoşbəxt görə bilsəydim! + * Bizim əziyyətimiz, əzizim Lizzy, çox böyükdür. + 3. Aşağıdakı cümlələrin mütləq **mənfi** şkalası ilə razısan, yoxsa razı deyilsən? + - Onun qürurundan hamı iyrənir. + - "Mən onun yad insanlar arasında necə davrandığını bilmək istərdim." "Onu eşidəcəksən, amma özünü çox qorxunc bir şeyə hazırla." + - Fasil Elizabetin hissləri üçün qorxunc idi. + - Dəhşətli olardı! + +✅ Jane Austenin hər hansı bir həvəskarı başa düşəcək ki, o, tez-tez kitablarından İngilis Regency cəmiyyətinin daha gülməli aspektlərini tənqid etmək üçün istifadə edir. *Qürur və qərəz* əsərinin baş qəhrəmanı Elizabet Bennett (müəllif kimi) diqqətli sosial müşahidəçidir və onun danışığı tez-tez ağır sözlərlə dolu olur. Hətta cənab Darsi (hekayədəki sevgi marağı) Elizabetin oynaq və zəhlətökən dildən istifadə etdiyini qeyd edir: “Sizinlə uzun müddətli tanışlığımızdan həzz alıram və sizin hərdən özünüzə aid olmayan fikirləri söyləməkdən böyük həzz aldığınızı da bilirəm." + +--- + +## 🚀 Məşğələ + +İstifadəçi məlumatlarından digər xüsusiyyətləri çıxarmaqla Marvin-i daha da yaxşılaşdıra bilərsinizmi? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Mətndən hissləri çıxarmağın bir çox yolu var. Bu texnikadan istifadə edə biləcək biznes tətbiqlərini düşünün. Bunun necə pisləşə biləcəyini düşünün. [Azure mətn təhlili](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott) kimi korporativ istifadəyə hazır hiss analizi edən sistemlər barədə oxuyun. Yuxarıdakı Qurur və Qərəz əsərindən olan bəzi cümlələri yoxlayın və hissi düzgün təyin edə bildiyini müşahidə edin. + + +## Tapşırıq + +[Poetik lisenziya](assignment.az.md) \ No newline at end of file diff --git a/6-NLP/3-Translation-Sentiment/translations/assignment.az.md b/6-NLP/3-Translation-Sentiment/translations/assignment.az.md new file mode 100644 index 0000000000..9dcdeb7317 --- /dev/null +++ b/6-NLP/3-Translation-Sentiment/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Poetik lisenziya + +## Təlimatlar + +[Bu notbukda](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) Azure mətn analitikası istifadə edərək hiss analizi üçün istifadə edilən 500-dən çox Emili Dikinsonun şeirlərini tapa bilərsən. Bu dataseti istifadə edərək dərsdə bəhs olunan texnika ilə analiz et. Şeirlərdən çıxarılan hiss nəticəsi daha təkmil Azure xidmətlərinin qərarları ilə tutuşurmu? Sənin fikrincə nə üçün tutuşur və ya tutuşmur? Nəsə sənə müəmmalı gəldi? + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Müəllifin nümunə məlumatlarının tam analizi notbukda təqdim olunub | Notbuk natamamdır və ya analiz yerinə yetirilməyib | Notbuk təqdim olunmayıb | diff --git a/6-NLP/4-Hotel-Reviews-1/translations/README.az.md b/6-NLP/4-Hotel-Reviews-1/translations/README.az.md new file mode 100644 index 0000000000..357e4e761b --- /dev/null +++ b/6-NLP/4-Hotel-Reviews-1/translations/README.az.md @@ -0,0 +1,406 @@ +# Otel rəyləri ilə duyğu analizi - datanın emalı + +Bu bölmədə siz böyük verilənlər toplusunun kəşfiyyat xarakterli məlumat təhlilini aparmaq üçün əvvəlki dərslərdəki üsullardan istifadə edəcəksiniz. Müxtəlif sütunların necə faydalı olduğunu yaxşı başa düşdükdən sonra öyrənəcəksiniz: + +- lazımsız sütunları necə çıxarmağı +- mövcud sütunlar əsasında bəzi yeni məlumatları necə hesablamağı +- nəticədə əldə edilən dataseti son problemdə istifadə etmək üçün necə yadda saxlamağı + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/?loc=az) + +### Giriş + +İndiyə qədər siz mətn tipli datanın ədədi data növlərindən tamamilə fərqli olduğunu öyrəndiniz. Əgər bu data insan tərəfindən yazılmış və ya danışılan mətndirsə, nümunələri və tezlikləri, duyğuları və mənanı tapmaq üçün təhlil edilə bilər. Bu dərs sizə real bir məsələ ilə bağlı və [CC0: İctimai Domen lisenziyası](https://creativecommons.org/publicdomain/zero/1.0/) olan real dataset (**[Avropada 515 min otel rəyi](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**) təqdim edir. Bu dataset Booking.com saytındakı açıq mənbələrdən götürülüb və Jiashen Liu tərəfindən yaradılmışdır. + +### Hazırlıq + +Sizə lazım olacaq: + +* Python 3-dən istifadə edərək .ipynb noutbuklarını idarə etmək imkanı +* pandas +* [Cihazınızda quraşdırmalı olduğunuz](https://www.nltk.org/install.html) NLTK +* Kaggle-dan əldə edə biləcəyiniz [Avropada 515 min otel rəyi](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe) dataseti. Datanın orijinal halında ölçüsü təxminən 230 MB-dır. Datanı NLP dərsləri ilə bağlı olan `/data` qovluğuna endirin. + +## Kəşfiyyat xarakterli məlumat təhlili + +Bu məşğələ güman edir ki, siz duyğu analizi və qonaq rəylərindən istifadə edərək bir otel tövsiyə botu yaradırsınız. İstifadə edəcəyiniz datasetə 6 şəhərdə yerləşən 1493 müxtəlif otel haqqında rəylər daxildir. + +Python-dan, otel rəyləri üçün olan datasetdən və NLTK-nın duyğu analizindən istifadə edərək siz aşağıdakıları öyrənə bilərsiniz: + +* Rəylərdə ən çox istifadə olunan söz və ifadələr hansılardır? +* Oteli təsvir edən rəsmi *teqlər* rəy qiymətləri ilə əlaqələndirilirmi (məsələn, hansısa otel *Solo səyahət edənlər* ilə müqayisədə *Azyaşlı uşaqlı ailələr* tərəfindən daha mənfi qiymətləndirilib, bəlkə də, bu, otelin *Solo səyahət edənlər* üçün daha yaxşı olduğunu göstərir?) + * NLTK duyğu analizinin qiymətləndirməsi ilə otel rəylərindəki ədədi qiymətləndirmə arasında uyğunluq varmı? + +#### Dataset + +Gəlin cihazınıza endirdiyiniz və yaddaşda saxladığınız dataseti araşdıraq. Faylı VS Code redaktorunda və ya elə Excel-də açın. + +Datasetdəki başlıqlar aşağıdakı kimidir: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Burada onlar yoxlanması daha asan ola biləcək şəkildə qruplaşdırılıb: + +##### Oteli təsvir edən sütunlar + +* `Hotel_Name`, `Hotel_Address`, `lat` (en dairəsi), `lng` (uzunluq dairəsi) + * *lat* və *lng* sütunlarını istifadə edərək Python ilə otellərin olduğu yerləri göstərən xəritə çəkə bilərsiniz (mənfi və müsbət rəyli otelləri ayırmaq üçün seçilmiş rənglər də istifadə etmək olar) + * Hotel_Address sütunu bizim üçün çox da faydalı olmadığından yəqin ki, daha asan çeşidləmə və axtarış üçün bunu ölkə ilə əvəz edəcəyik + +**Otelin əsas rəy sütunları** + +* `Average_Score` + * Datasetin yaradıcısına görə bu sütun *Son bir ildəki ən son şərhə əsasən hesablanmış otelin orta qiymətidir*. Bu üsul qiyməti hesablamaq üçün olan ənənəvi üsullardan olmasa da, datanı birbaşa bu şəkildə əldə etdiyimizə görə biz onu hələlik nominal dəyər kimi qəbul edə bilərik. + + ✅ Bu datadakı digər sütunlara əsaslanaraq ortalama qiyməti hesablamaq üçün başqa yol düşünə bilərsinizmi? + +* `Total_Number_of_Reviews` + * Bu otel üçün olan rəylərin ümumi sayı - bu sayın datasetdəki rəylərə aid olub-olmadığını qısa kodlama etmədən müəyyən etmək olmur. +* `Additional_Number_of_Scoring` + * Bu o deməkdir ki, rəy qiyməti verilib, lakin qonaq tərəfindən müsbət və ya mənfi rəy yazılmayıb. + +**Rəy sütunları** + +- `Reviewer_Score` + - Bu, 2,5 (minimum) və 10 (maksimum) dəyərləri arasında ən çoxu 1 onluq kəsr hissəsi olan ədədi dəyərdir. + - 2,5-in niyə mümkün olan ən aşağı bal olduğu izah edilməyib +- `Negative_Review` + - Əgər qonaq rəy bildirməyibsə, bu xanada "**No Negative**" dəyəri olacaq + - Nəzərə alın ki, rəy sahibinin yazdığı müsbət rəy _mənfi rəy_ sütununda ola bilər (məs. "bu otel ilə bağlı pis heç nə yoxdur") +- `Review_Total_Negative_Word_Counts` + - Daha yüksək sayda mənfi sözlərin olmağı daha aşağı bala işarədir (əgər sentimentallığı yoxlamasaq) +- `Positive_Review` + - Əgər qonaq rəy bildirməyibsə, bu xanada "**No Positive**" dəyəri olacaq + - Nəzərə alın ki, rəy sahibinin yazdığı mənfi rəy _müsbət rəy_ sütununda ola bilər (məs. "bu otel ilə bağlı yaxşı heç nə yoxdur") +- `Review_Total_Positive_Word_Counts` + - Daha yüksək sayda müsbət sözlərin olmağı daha yüksək bala işarədir (əgər sentimentallığı yoxlamasaq) +- `Review_Date` və `days_since_review` + - Rəylərə yenilik və ya köhnəlik ölçü meyarları tətbiq oluna bilər (köhnə rəylər yeniləri qədər dəqiq olmaya bilər, çünki otel rəhbərliyi dəyişib, təmir işləri aparılıb və ya hovuz əlavə edilib və s.) +- `Tags` + - Teqlər rəy sahibinin olduğu qonaq növünü (məsələn, solo və ya ailə), qonaq olduğu otağın növünü, qalma müddətini və rəyin necə təqdim olunduğunu təsvir etmək üçün seçə biləcəyi qısa təsvirlərdir. + - Təəssüf ki, bu teqlərdən istifadə problemlidir, onların faydalılığını müzakirə edən aşağıdakı bölməni nəzərdən keçirin. + +**Rəy sahibləri ilə bağlı sütunlar** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Əgər daha çox rəy yazıb yüzlərlə rəyi olan rəy sahiblərinə məxsus olan rəylərin müsbət deyil, mənfi olma ehtimalının daha yüksək olduğunu müəyyən edə bilsəniz, bu, tövsiyyə modelində amillərdən biri ola bilər. Bununla belə, hər hansı bir rəyin sahibi unikal kodla müəyyən edilmir və buna görə də digər rəylər toplusu ilə əlaqələndirilə bilməz. 100 və ya daha çox rəyi olan 30 rəy sahibi var, lakin bunun tövsiyə modelinə necə kömək edə biləcəyini görmək çətindir. +- `Reviewer_Nationality` + - Bəzi insanlar düşünə bilər ki, müəyyən millətlərin milli meylinə görə müsbət və ya mənfi rəy vermə ehtimalı daha yüksəkdir. Modellərinizdə bu cür subyektiv fikirləri nəzərə alarkən diqqətli olun. Bunlar milli (və bəzən irqi) stereotiplərdir və hər bir rəy sahibi öz təcrübəsinə əsaslanaraq rəy yazan bir fərddir. Ola bilsin ki, bu, onların əvvəlki otel qonaqlamaları, qət etdikləri məsafə və şəxsi temperamentləri kimi bir çox amillərdən asılı olub. Onların milli mənsubiyyətinin rəy qiymətləndirmələrinə istiqamət verdiklərini düşünməyə haqq qazandırmaq çətindir. + +##### Nümunələr + +| Ortalama Bal | Ümumi rəy sayı | Rəy Sahibinin Qiymətləndirməsi | Mənfi
Rəy | Müsbət Rəy | Teqlər | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Bu hazırda otel deyil, tikinti sahəsidir. Uzun bir səfərdən sonra istirahət edərkən və otaqda işləyərkən səhər tezdən və bütün günü qəbuledilməz bina səs-küyü ilə dəhşətə gəldim. İnsanlar bütün günü bitişik otaqlarda çəkiclərlə işləyirdilər. Mən otağı dəyişmək istədim, amma səssiz otaq yox idi. Bütün bunların üzərinə məndən əlavə ödəniş də tutuldu. Növbəti gün uçuşum erkən olduğu üçün oteli gecədən tərk etdim və bunun üçün müvafiq ödəməni aldım. Bir gün sonra otel mənim razılığım olmadan rezervasiya edilmiş qiymətdən artıq ödəniş tutdu. Çox pis yerdir. Burada otaq bron etməklə özünüzə pislik etməyin | Söz yoxdur Çox pis yerdir Uzaq durun | İşgüzar səyahət Cütlük Standart İkili Otaq 2 gecə | + +Gördüyünüz kimi bu qonaq bu oteldən razı qalmayıb. Otelin yaxşı orta balı (7,8) və haqqında 1945 rəy var, lakin bu qonaq otelə 2,5 qiymət verib və onların qonaqlamasının nə qədər mənfi olduğuna dair 115 söz yazıb. Əgər onlar Positive_Review sütununda heç nə yazmasaydılar, pozitiv heç nə olmadığını təxmin etmək olardı, amma təəssüf ki, xəbərdarlıq üçün 7 söz yazıblar. Əgər sözlərin mənası və ya duyğusu əvəzinə sadəcə sözləri saysaq, rəy sahibinin niyyəti ilə bağlı yanlış istiqamətdə fikirlərə sahib ola bilərdik. Qəribədir ki, onların verdiyi 2,5 bal çaşqınlıq yaradır, çünki əgər o oteldə qalmaq belə pis idisə, niyə ümumiyyətlə, ona xal verirsiniz? Verilənlər toplusunu daha diqqətlə araşdırdıqda, mümkün olan ən aşağı balın 0 deyil, 2,5 olduğunu görəcəksiniz. Mümkün olan ən yüksək bal isə 10-dur. + +##### Teqlər + +Yuxarıda qeyd edildiyi kimi, ilk baxışdan məlumatları kateqoriyalara ayırmaq üçün `Teqlər`dən istifadə etmək fikri məntiqlidir. Təəssüf ki, bu etiketlər standartlaşdırılmayıb, yəni müəyyən bir oteldə seçimlər *Single room*, *Twin room*, və *Double room*, amma digər bir oteldə eyni otaqlar *Deluxe Single Room*, *Classic Queen Room*, və *Executive King Room* kimi fərqli adlandırılıb. Bunlar eyni şeylər ola bilər, lakin o qədər çox variasiya var ki, seçim belə olur: + +1. Bütün şərtləri vahid standarta dəyişdirməyə cəhd etmək, lakin bu çox çətindir, çünki bu halda müxtəlif növlər arasında uyğunluq bəlli deyil. (məs. *Classic single room*, *Single room* seçiminə uyğun gəlir, lakin *Superior Queen Room with Courtyard Garden or City View* seçimini standartlaşdırmaq çox daha çətindir) + +2. Biz NLP yanaşması ilə başlaya və *Solo*, *Business Traveller*, ya da *Family with young kids* kimi bəzi ifadələrin istifadə tezliyini ölçə bilər və onları tövsiyyə modelində amil olaraq nəzərə ala bilərik, çünki bunlar bütün otellər üçün uyğundur. + +Teqlər adətən (lakin həmişə deyil) *Səyahətin növü*, *Qonaqların növü*, *Otaq növü*, *Gecə sayı* və *Rəyin təqdim olunduğu cihazın növü* kimi kateqoriyalara uyğunlaşdırılan 5-6 vergüllə ayrılmış dəyərlərin siyahısından ibarət sahədir. Bununla belə bəzi rəy sahibləri hər bir sahəni doldurmadığına görə (bəzilərini doldurmaya bilirlər) dəyərlər həmişə eyni ardıcıllıqla olmur. + +Nümunə olaraq *Qrupun növü* kateqoriyasını götürək. `Teqlər` sütununda bu kateqoriya üçün 1025 unikal dəyər var və təəssüf ki, onlardan yalnız bəziləri qrup növünə istinad edir (bəziləri otaq növüdür və s.). Qrup növü olaraq yalnız ailə qeyd edənləri filtrləsəniz, nəticələrdə çoxlu *Ailə otağı* tipli otaq növü dəyərləri də olacaq. Əgər ailənin növünü də filtrə daxil etsəniz, bu zaman nəticə daha yaxşı olacaq, çünki 515 000 nəticədən 80 000-dən çoxunda "Gənc uşaqlı ailə" və ya "Yaşlı uşaqlı ailə" ifadəsi var. + +Bu o deməkdir ki, teqlər sütunu bizim üçün tamamilə yararsız deyil, lakin onu faydalı etmək üçün bir az iş lazımdır. + +##### Otelin ortalama balı + +Dataset ilə bağlı bir sıra qəribəliklər və ya uyğunsuzluqlar var ki, mən onları anlaya bilmirəm, lakin modellərinizi qurarkən onlardan xəbərdar olmanız üçün burada təsvir edilmişdir. Əgər başa düşsəniz, zəhmət olmasa müzakirə bölməsində bizə bildirin! + +Datasetdə ortalama bal və rəylərin sayı ilə bağlı aşağıdakı sütunlar var: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Bu datasetdə ən çox rəyi olan tək otel 515.000 rəydən 4789 rəylə *Britannia International Hotel Canary Wharf*-dır. Amma bu otel üçün `Total_Number_of_Reviews` dəyərinə baxsaq görərik ki, bu 9086-dır. Güman edə bilərsiniz ki, rəyi olmayan çoxlu qiymətləndirmə var, ona görə də bəlkə də `Additional_Number_of_Scoring` sütunundakı dəyəri bu dəyərə əlavə etmək lazımdır. Bu dəyər 2682-dir və onu 4789-a əlavə etməklə 7,471 əldə edirik ki, bu da hələ də `Total_Number_of_Reviews` sütun dəyərindən 1615 azdır. + +Əgər `Average_Score` sütun dəyərlərinə baxsaq, bunun datasetdəki balların ortalaması olduğunu güman edə bilərsiniz, lakin Kaggle-da verilən təsvir "*Otelin son bir ildəki ən son şərhə əsasən hesablanmış orta balı*" şəklindədir. Bu, o qədər də faydalı görünmür, lakin biz datasetdəki ballara əsaslanaraq öz ortalamamızı hesablaya bilərik. Nümunə olaraq eyni oteldən istifadə edərək orta otel balı 7,1 kimi verilir, lakin hesablanmış bal (datasetdə rəy sahibinin ortalama qiymətləndirməsi) 6,8-dir. Bu yaxındır, lakin eyni dəyər deyil və biz yalnız təxmin edə bilərik ki, `Additional_Number_of_Scoring` sütununda olan bal dəyərləri ortalama göstəricisini 7.1-ə yüksəldib. Təəssüf ki, bu iddianı sınamaq və ya sübut etmək üçün heç bir yol olmadığından `Average_Score`, `Additional_Number_of_Scoring` və `Total_Number_of_Reviews` sütun dəyərləri bizdə olmayan dataya əsaslandıqda və ya onlara istinad etdikdə onlardan istifadə etmək və ya onların doğruluğuna inanmaq çətindir. + +Bütün bunların üzərinə, ən çox rəy alan ikinci otelin hesablanmış orta balı 8,12 və datasetdəki `Average_Score` sütun dəyəri isə 8.1-dir. Bu düzgün hesab təsadüfdür yoxsa ilk otel datası doğru deyil? + +Bu otellərin istisna olmaları ehtimalı və bəlkə də dəyərlərin əksəriyyətinin üst-üstə düşməsi (niyəsə bəziləri üst-üstə düşmür) ehtimalı üzərinə datasetdəki dəyərlərin düzgün istifadə edilməsini (və ya edilməməsini) araşdırmaq üçün qısa proqram yazacağıq. + +> 🚨 Qeyd +> +> Bu verilənlər toplusu ilə işləyərkən siz mətni özünüz oxumadan və ya təhlil etmədən mətndən nəyisə hesablayan kod yazacaqsınız. NLP-nin mahiyyəti də elə bundan ibarətdir, insandan asılı olmadan məna və ya duyğuları analiz və şərh edir. Bununla belə, bəzi mənfi rəyləri oxumağınız mümkündür. Mən oxumamağınızın tərəfdarıyam, çünki buna məcbur deyilsiniz. Onlardan bəziləri mənasız və ya aidiyyatı olmayan mənfi otel rəyləridir, məsələn, "Hava əla deyildi", hansı ki, oteldən və ya həqiqətən də hər hansı birindən asılı olmadan baş verən bir şeydir. Ancaq bəzi rəylərin qaranlıq tərəfi də var. Bəzən mənfi rəylər irqçi, cinsiyyətçi və ya yaş ilə bağlı ayrı-seçkilik etməyə yönəlib. Bu təəssüf doğurur, lakin ictimai vebsaytdan əldə edilmiş verilənlər bazasında gözləniləndir. Bəzi rəy sahibləri xoşagəlməz, narahat və ya əsəbi hesab edə biləcəyiniz rəylər yazırlar. Kodunuzun duyğu analizi etməsinə icazə vermək, onları özünüz oxuyub üzülməkdən daha yaxşıdır. Bununla belə, bu tip rəylər azlıq təşkil edir, lakin həmişə mövcud olduğunu bilməkdə fayda var. + +## Məşğələ - Datanın təhlili +### Datanı yükləyin + +Datanı vizual olaraq bu qədər yoxlamaq kifayətdir, artıq biraz kod yazacaq və bəzi cavablar alacaqsınız! Bu hissə pandas kitabxanasını istifadə edir. İlk tapşırığınız CSV məlumatlarını yükləyə və oxuya bildiyinizə əmin olmaqdır. Pandas kitabxanasının sürətli CSV yükləyicisi var və əvvəlki dərslərdə olduğu kimi nəticə datafreymə yerləşdiriləcək. Yüklədiyimiz CSV-də yarım milyondan çox sətir, lakin cəmi 17 sütun var. Pandas sizə datafreym ilə qarşılıqlı əməliyyatlar aparmaq üçün çoxlu faydalı metodlar, o cümlədən hər sətirdə əməliyyatlar yerinə yetirmək imkanı verir. + +Bu hissədən etibarən bu dərs koddan fraqmentlər, kodun ümumi analizi və nəticələrin nə mənaya gəldiyi üzərinə aparılan müzəkirələrdən ibarət olacaq. Kodunuz üçün _notebook.ipynb_ noutbukunu istifadə edin. + +İstifadə edəcəyiniz data faylını yükləməklə başlayaq: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +Artıq data yükləndiyinə görə biz onun üzərində bəzi əməliyyatları yerinə yetirə bilərik. Növbəti hissə üçün bu kodu proqramınızın yuxarı hissəsində saxlayın. + +## Datanı təhlil edin + +Artıq data *təmizdir*, bu isə o deməkdir ki, data onunla işlənilməyə hazırdır və yalnız ingilis simvollarını gözləyən alqoritmləri poza biləcək başqa simvollar yoxdur. + +✅ NLP üsullarını tətbiq etməzdən əvvəl onu formatlaşdırmaq üçün bəzi ilkin emal tələb edən data ilə işləməli ola bilərdiniz, lakin bu dəfə buna ehtiyac yoxdur. Əgər olsaydı, ingiliscədə istifadə olunmayan simvolların öhdəsindən necə gələrdiniz? + +Data yükləndikdən sonra onu yazdığınız kodu istifadə edərək araşdıra biləcəyinizdən əmin olun. İlk baxışdan `Negative_Review` və `Positive_Review` sütunlarına diqqəti cəmləmək daha asan görünür. Həmin sütunlar sizin NLP alqoritmlərinizin rahatlıqla işləyə biləcəyi, təbii dildə yazılmış mətnlərdən ibarətdir. Lakin gözləyin! NLP və duyğu analizinə başlamazdan əvvəl, ilk addım kimi, aşağıdakı kodu istifadə edərək datasetdəki dəyərlər ilə pandas kitabxanasını istifadə edərək hesabladığınız dəyərlərin uyğunlaşdığına əmin olun. + +## Datafreym əməliyyatları + +Bu dərsdəki ilk tapşırıq datafreymi (dəyişdirmədən) yoxlayan kod yazaraq aşağıdakı iddiaların düzgün olub-olmadığını yoxlamaqdır. + +> Bir çox proqramlaşdırma tapşırıqları kimi bu tapşırığı da başa çatdırmağın bir neçə yolu var, lakin məsləhət odur ki, bunu edə biləcəyiniz ən sadə, ən asan şəkildə edəsiniz, çünki gələcəkdə bu koda qayıtdığınız zaman onu başa düşmək daha asan olacaq. Burda istədiyinizə bir çox hallarda səmərəli şəkildə nail olmağınıza kömək ola biləcək datafreym üçün olan API-lar var. + +Aşağıdakı suallara kodlaşdırma tapşırıqları kimi baxın və həllinə baxmadan onlara cavab verməyə çalışın. + +1. İndicə yüklədiyiniz datafreymin *formasını* çap edin (burada forma deyəndə sətir və sütunların sayı nəzərdə tutulur) +2. Müxtəlif milliyətlərdən olan rəy sahibləri üçün tezliyi hesablayın: + 1. `Reviewer_Nationality` sütunu üçün neçə fərqli dəyər var və hansılardır? + 2. Datasetdə ən çox hansı milliyyətdən olan rəy sahibi var (ölkəni və rəylərin sayını çap edin)? + 3. Növbəti 10 milliyət hansıdır və tezlikləri nə qədərdir? +3. Bu 10 milliyyətdən olan rəy sahiblərinin ən çox qiymətləndirdiyi otel hansıdır? +4. Datasetdə hər bir otel üçün neçə rəy var (otellərin rəy sıxlığı necədir)? +5. Baxmayaraq ki, datasetdə hər bir otel üçün `Average_Score` sütunu var, siz də ortalama balı hesablaya bilərsiniz (bunun üçün hər bir otelin datasetdəki rəy qiymətləndirmələrinin ortalamasını hesablamaq lazımdır). Datafreymə `Calc_Average_Score` başlıqlı və hesablanmış ortalamanı göstərən yeni sütun əlavə edin. +6. Hansısa otelin eyni `Average_Score` və `Calc_Average_Score` (kəsr hissəsi onluqlara yuvarlaqlaşdırılmış) dəyəri varmı? + 1. Giriş olaraq sətir götürən və dəyərləri müqayisə edən bir Python funksiyası yazmağa çalışın və dəyərlər eyni olmadıqda mesaj çap edin. Daha sonra isə `.apply()` funksiyasını istifadə edərək yazdığınız funksiyanı digər sətirlərə də tətbiq edin. +7. `Negative_Review` sütununda neçə sətrin "No Negative" dəyəri olduğunu hesablayın və nəticəni çap edin. +8. `Positive_Review` sütununda neçə sətrin "No Positive" dəyəri olduğunu hesablayın və nəticəni çap edin. +9. Neçə sətrin `Positive_Review` sütun və "No Positive" dəyəri, **və** neçəsinin `Negative_Review` sütun və "No Negative" dəyəri olduğunu hesablayın və nəticəni çap edin. + +### Kodlaşdırma tapşırıqlarına cavablar + +1. İndicə yüklədiyiniz datafreymin *formasını* çap edin (burada forma deyəndə sətir və sütunların sayı nəzərdə tutulur) + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Müxtəlif milliyətlərdən olan rəy sahibləri üçün tezliyi hesablayın: + + 1. `Reviewer_Nationality` sütunu üçün neçə fərqli dəyər var və hansılardır? + 2. Datasetdə ən çox hansı milliyyətdən olan rəy sahibi var (ölkəni və rəylərin sayını çap edin)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. Növbəti 10 milliyət hansıdır və tezlikləri nə qədərdir? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. Bu 10 milliyyətdən olan rəy sahiblərinin ən çox qiymətləndirdiyi otel hansıdır? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. Datasetdə hər bir otel üçün neçə rəy var (otellərin rəy sıxlığı necədir)? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + `Total_Number_of_Reviews` sütunundakı dəyərlərin *datasetdə tapılan* nəticələr ilə uyğunlaşmadığını görə bilərsiniz. Bizə məlum deyil ki, bu dəyər otelə aid olan bütün rəylərin sayını göstərir (lakin bütün rəylər saytdan əldə edilməmişdir), yoxsa başqa hesablamanın nəticəsidir. Bu qeyri-müəyyənliyə görə `Total_Number_of_Reviews` sütunu modeldə istifadə edilməmişdir. + +5. Baxmayaraq ki datasetdə hər bir otel üçün `Average_Score` sütunu var, siz də ortalama balı hesablaya bilərsiniz (bunun üçün hər bir otelin datasetdəki rəy qiymətləndirmələrinin ortalamasını hesablamaq lazımdır). Datafreymə `Calc_Average_Score` başlıqlı və hesablanmış ortalamanı göstərən yeni sütun əlavə edin. `Hotel_Name`, `Average_Score` və `Calc_Average_Score` sütunlarını çap edin. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + Sizə `Average_Score` sütunundakı dəyər və bu dəyərin bəzən niyə hesablanmış ortalama baldan fərqli olduğu maraqlı ola bilər. Niyə bəzi dəyərlərin üst-üstə düşüb, digərlərinin isə fərqləndiyini bilmədiyimiz üçün ortalama balını özümüzün hesablamalı olduğumuz rəy qiymətləndirmələrini istifadə etmək ən doğrusudur. Bununla belə, fərqliliklər adətən çox kiçikdir və aşağıda datasetdəki ortalama rəy dəyəri ilə hesablanmış ortalama rəy dəyəri ən çox fərqlənən otellər göstərilib: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + Sadəcə bir oteldə bu fərq 1-dən böyük olduğundan fərqi nəzərə almayıb hesablanmış ortalama qiymətləndirməni istifadə edə bilərik. + +6. `Negative_Review` sütununda neçə sətrin "No Negative" dəyəri olduğunu hesablayın və nəticəni çap edin. + +7. `Positive_Review` sütununda neçə sətrin "No Positive" dəyəri olduğunu hesablayın və nəticəni çap edin. + +8. Neçə sətrin `Positive_Review` sütun və "No Positive" dəyəri, **və** neçəsinin `Negative_Review` sütun və "No Negative" dəyəri olduğunu hesablayın və nəticəni çap edin. + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## Başqa üsul + +Digər bir üsul Lambdas istifadə etmədən sözügedən dəyərləri saymaq və cəmləməklə sətirləri saymaqdır: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + 127 sətr üçün `Negative_Review` və `Positive_Review` sütunlarında müvafiq olaraq həm "No Negative", həm də "No Positive" dəyərlərinin olduğunu görmüş ola bilərsiniz. Bu o deməkdir ki, qonaq oteli ədədi olaraq qiymətləndirib, lakin nə mənfi nə də müsbət rəy yazıb. Xoşbəxtlikdən belə sətirlərin sayı azdır (127/515738, hansı ki 0.02% təşkil edir), ona görə də böyük ehtimalla bu sətirlər bizim modeli hansısa yanlış istiqamətdə yönləndirməyəcək. Bununla belə, rəylərin datasetində rəy olmayan sətirlərin olması təbii olaraq gözlənilməz olduğundan, datanı təhlil etmək həmişə vacibdir. + +Datasetin təhlilini bitirdiyinizə görə artıq növbəti dərsdə datanı filtrləyəcək və data üzərində duyğu analizi aparacaqsınız. + +--- +## 🚀 Məşğələ + +Bu dərs, əvvəlki dərslərdə də gördüyümüz kimi data üzərində əməliyyatlar etməzdən əvvəl onun özünü və çatışmazlıqlarını başa düşməyin nə qədər vacib olduğunu nümayiş etdirir. Xüsusilə də mətnə əsaslanan data diqqətlə araşdırılır. Müxtəlif mətn ağırlıqlı datasetləri araşdırın və modeldə qərəzli və ya başqa istiqamətə yönəldən duyğu yarada biləcək hissələri aşkar edə bilib-bilmədiyinizə baxın. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Nitq və mətn ağırlıqlı modellər yaradarkən müxtəlif alətlərlə tanış olmaq üçün [NLP üzrə olan bu təlim toplusunu](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) sınayın. + +## Tapşırıq + +[NLTK](assignment.az.md) diff --git a/6-NLP/4-Hotel-Reviews-1/translations/assignment.az.md b/6-NLP/4-Hotel-Reviews-1/translations/assignment.az.md new file mode 100644 index 0000000000..d76dc377ef --- /dev/null +++ b/6-NLP/4-Hotel-Reviews-1/translations/assignment.az.md @@ -0,0 +1,5 @@ +# NLTK + +## Təlimatlar + +NLTK kompüter dilçiliyi və NLP üçün olan məşhur kitabxanadır. Fürsətdən istifadə edərək '[NLTK kitabını](https://www.nltk.org/book/)' oxuyun və məşğələləri nəzərdən keçirin. Bu tapşırıq qiymətləndirilməyəcək, lakin siz bu kitabxananı daha dərindən öyrənə biləcəksiniz. diff --git a/6-NLP/5-Hotel-Reviews-2/translations/README.az.md b/6-NLP/5-Hotel-Reviews-2/translations/README.az.md new file mode 100644 index 0000000000..d7f18383d8 --- /dev/null +++ b/6-NLP/5-Hotel-Reviews-2/translations/README.az.md @@ -0,0 +1,375 @@ +# Otel rəyləri ilə fikir analizi + +Sən artıq dataseti ətraflı kəşf etmisən və indi sütunları filtrasiya edərək yeni məlumatlar toplamaq üçün NLP texnikalarını tətbiq edəcəksən. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/?loc=az) + +### Filtrasiya və fikir analizi əməliyyatları + +Sən yəqin datasetin bəzi problemləri olduğuna şahid olmusan. Bəzi sütunlar mənasız və düzgün olmayan məlumatlarla doldurulub. Əgər onlar doğrudurlarsa, onları necə hesablamalı olduğumuz aydın deyil və azad şəkildə öz hesablamalarımızla cavab əldə edə bilməyəcəyik. + +## Tapşırıq: datanı biraz emal et + +Datanı biraz təmizlə. Sonradan faydalı ola biləcək sütunlar əlavə et, digər sütunlardakı məlumatları dəyiş və bəzi sütunları ümumiyyətlə ləğv et. + +1. İlkin sütun emalı + + 1. `lat` və `lng` sütunlarını silin + + 2. `Hotel_Address` dəyərlərini aşağıdakı dəyərlərlə dəyiş (əgər ünvanda seçilmiş şəhər və ölkə adından biri varsa, onları sadəcə şəhər və ölkə adı birləşməsinə dəyiş). + + Datasetdə yalnız bu şəhər və ölkələr vardır: + + Amsterdam, Netherlands + + Barcelona, Spain + + London, United Kingdom + + Milan, Italy + + Paris, France + + Vienna, Austria + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Bütün ünvanları daha qısa və yararlı dəyərlərlə əvəzlə + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # value_counts() cəmi yekun rəy sayına bərabər olmalıdır + print(df["Hotel_Address"].value_counts()) + ``` + + Artıq ölkə səviyyəsində sorğu yarada bilərsən: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. Otel rəyləri ilə əlaqəli sütunları emal et + + 1. `Additional_Number_of_Scoring` sütununu sil + + 1. `Total_Number_of_Reviews` sütunundakı dəyərləri otelin cari datasetdəki rəylərin ümumi sayı ilə əvəz et + + 1. `Average_Score` öz hesabladığımız orta bal ilə əvəz et + + ```python + # `Additional_Number_of_Scoring` sil + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # `Total_Number_of_Reviews` və `Average_Score` öz hesabladığımız dəyərlə əvəzlə + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. Rəy sütunlarını emal et + + 1. `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` və `days_since_review` sütunlarını sil + + 2. `Reviewer_Score`, `Negative_Review`, və `Positive_Review` olduğu kimi saxla, + + 3. `Tags` hələlik saxla + + - Biz növbəti fikirədə tqqlar üzərində bəzi filtrasiya əməliyyatları aparacağıq və spnra tqqları siləcəyik + +4. Rəybildirən sütununu sil + + 1. `Total_Number_of_Reviews_Reviewer_Has_Given` sil + + 2. `Reviewer_Nationality` saxla + +### Teq sütunları + +`Tag` sütunu daxilində mətnləri siyahı kimi saxladığı üçün problemlidir. Təəssüf ki, bu sütun daxilindəki dəyərlərin sırası və sayı həmişə eyni olmur. Bu halda insan tərəfindən ona maraqlı olan və düzgün sözü tapmaq çətinləşir, çünki burada 515,000 sətir, 1427 otel və hər birində rəybildirənin seçimləri çox az fərqlənir. Burada NLP öz sözünü deyir. Sən mətnləri skan edə və ən çox istifadə olunan sözləri seçə və saya bilərsən. + +Təəssüf ki, biz 1 söz yerinə çoxlu söz birləşməsi ilə maraqlanırıq (misal üçün, *Biznes səyahəti*). Çoxlu söz birləşmələrinin istifadə tezliyinin paylanma alqoritmini bu qədər böyük data (6762646 söz) üzərində icra etmək ağlasığmaz qədər vaxt aparar, lakin bütün data üzərindən keçmədən bunu etmək də mümkün deyil. Burada kəşfiyyatçı data analizi köməyimizə çata bilər, çünki bizim əlimizdə artıq `[' Biznes səyahəti ', ' Yalnız səyahətçi ', ' Tək otaq ', ' 5 günlük qalmaq ', ' Mobil cihazdan sorğulanıb ']` kimi nümunə teqlər var və bunlar bizim emal üçün lazım olan zamanı kifayət qədər aşağı salacaq. Bunu bildiyimiz üçün şanslıyıq, lakin bizə maraqlı olan teqlərı təyin etmək üçün bəzi addımları izləməliyik. + +### Teqlərin filtrasiyası + +Yadda saxlayaq ki, datasetin məqsədi sənin ən yaxşı oteli seçməyinə kömək etməsi üçün fikir və sütunlar əlavə etməkdir (özün və ya müştərin üçün otel tövsiyyəsi edəcək bot hazırlamaq kimi tapşırığın var). Özünə hansı teqlərin yekun datasetdə mənalı olub-olmayacağı barədə sual ver. Nümunə bir ssenari (əgər sənə başqa məqsəqlər üçün dataset lazımdırsa, hansı teqləri əlavə edə və ya çıxarmağın öz əlindədir): + +1. Hansı növ səyahət uyğundursa, onlar qalmalıdır +2. Qonaq qrupunun tipi vacibdirsə, onlar qalmalıdır +3. Qonağın qaldığı məkanın növü (otaq, ev, studio) maraqlı deyil (bütün otellərdə, demək olar ki, eyni otaqlar var) +4. Hansı cihazdan rəy bildirməsi maraqlı deyil +5. Əgər uzun müddətli səyahətlə maraqlanırsansa, rəybildirənin neçə gecə qaldığı maraqlı *ola bilər*, lakin bu əlavə məsələlərdir, çox güman ki, uyğun olmayacaq + +Yekun olaraq **2 teq növünü saxla və digərlərini sil**. + +İlkin olaraq teqlərin daha yaxşı formata salmamış saymaq istəməyəcəksən, yəni mötərizələri və dırnaq işarələrini silməyin lazımdır. Bunu bir neçə üsulla edə bilərsən, lakin sənə bu qədər çox datanı çox vaxt sərf etmədən sürətli həll etmək lazımdır. Pandas kitabxanasında bu addımların hər birini icra etmək üçün asan yollar var. + +```Python +# Açılan və bağlanan mötərizələri sil +df.Tags = df.Tags.str.strip("[']") +# Həmçinin dırnaqları da sil +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Hər teq buna bənzər bir hala çevriləcək: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. + +İndi başqa bir bir problemlə üzləşirik. Rəylərin (sətirlərin) bəzilərində 5, bəzilərində 3, digərlərində 6 sütun var. Dataset özü belə yaradılıb və bunu həll etmək çətindir. Hər bir sözün istifadə tezliyini saymaq istəyirsən, lakin onlar hər rəydə fərqli sıradadır. Sıralamanın standart olmaması otellərə daha layiqli olduğu teqləri mənsub etməkdə çətinlik yaradır. + +Bunun yerinə biz sıralamanı özümüzə sərf edən vəziyyətə çevirə bilərik. Belə ki, hər teq söz birləşməsindən ibarət olsa da vergüllə ayrılır! Ən sadə yolu müvəqqəti olaraq 6 sütun yaradıb hər birinə teq əlavə edə bilərik. Bundan sonra biz 6 sütunu böyük bir sütun içinə birləşdirə və `value_counts()` funksiyası ilə saya bilərik. Bunu icra etdikdən sonra 2428 vahid teq olduğunu görəcəksən. Kiçik nümunə: + +| Tag | Count | +| ------------------------------ | ------ | +| Leisure trip | 417778 | +| Submitted from a mobile device | 307640 | +| Couple | 252294 | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Solo traveler | 108545 | +| Stayed 3 nights | 95821 | +| Business trip | 82939 | +| Group | 65392 | +| Family with young children | 61015 | +| Stayed 4 nights | 47817 | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Family with older children | 26349 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Stayed 5 nights | 20845 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | +| 2 rooms | 12393 | + +`Submitted from a mobile device` kimi ümumi teqlərin bəziləri bizə əhəmiyyətli deyil. Belə teqləri silmək daha ağıllı bir addım kimi görünsə də, əməlliyyatlarımızın sürətinin çox olması bunu etməyi gərəksiz edir. + +### Qonaqlama günlərini silmək + +Bu teqləri silmək birinci addımdır və bizə lazım olan teqlərin sayını azaltmaqda kömək edəcək. Diqqətdə saxlamaq lazımdır ki, biz bu məlumatlarını datasetdən silmirik, sadəcə emal etdiyimiz rəylər datasetində ancaq saymaq üçün lazım olanları saxlayırıq. + +| Length of stay | Count | +| ---------------- | ------ | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Stayed 3 nights | 95821 | +| Stayed 4 nights | 47817 | +| Stayed 5 nights | 20845 | +| Stayed 6 nights | 9776 | +| Stayed 7 nights | 7399 | +| Stayed 8 nights | 2502 | +| Stayed 9 nights | 1293 | +| ... | ... | + +Burada müxtəlif sayda otaqlar, suitlər, evlər, studiyalar və s. var. Bunların hamısı demək olar ki, eyni məna daşıyırlar, buna görə onları da silək. + +| Type of room | Count | +| ----------------------------- | ----- | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | + +Yekun olaraq bu zövqlü emaldan sonra bizə aşağıdakı *faydalı* teqlər qaldı: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Leisure trip | 417778 | +| Couple | 252294 | +| Solo traveler | 108545 | +| Business trip | 82939 | +| Group (combined with Travellers with friends) | 67535 | +| Family with young children | 61015 | +| Family with older children | 26349 | +| With a pet | 1405 | + +`Travellers with friends` və `Group` teqləri bir-birinə çox yaxındır düşünə və ədalətli olması üçün bunları birləşdirə də bilərsən. Düzgün teqlərin təyin olması üçün yazılmış kodu [Teqlər notbukundan](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) əldə edə bilərsən. + +Son addımımız hər teq üçün yeni sütunun yaradılması olacaq. Bundan sonra hər bir rəy sətirində `Tag` sütununa uyğun gəldiyi halda 1 əlavə edəcəksən, gəlmədiyi zaman isə 0. Yekun nəticədə bu saylar istifadəçilərə otelin hansı məqsəd üçün daha uyğun olduğunu təyin etməyə faydalı olacaq, misal üçün daha işgüzar yoxsa istirahət səfərləri üçün uyğun olduğunu və ya ev heyvanına icazə verildiyini biləcəklər. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### Faylı yadda saxla + +Nəhayət ki, dataseti yadda saxlayıb yeni oyuna başlaya bilərsən + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# yeni datanın hesablanmış sütunlarla yadda saxlanılması +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## Fikir analizi əməliyyatları + +Bu son bölmədə rəy sütunlarına fikir analizi tətbiq edib nəticələri datasetdə saxlayacağıq. + +## Tapşırıq: filtrlənmiş datanı yüklə və yadda saxla + +Nəzərə al ki, sən indi son bölmədən əldə olunmuş filtrlənmiş dataseti yükləyirsən, orijinal dataseti **yox**. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# CSV faylından filtlənmiş otel rəylərini yüklə +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# Sənin kodun bura daxil edilməlidir + + +# Son olaraq xatırla ki, otel rəylərini yeni NLP data əlavə edib yadda saxlamalısan +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### Stop sözlərin silinməsi + +Əgər sən Mənfi və Müsbət rəy sütunları üzərində Fikir Analizi aparırsansa, bu çox çəkə bilər. Güclü notbukların sürətli CPU komponenti ilə test edilib ki, istifadə olunan fikir analizi kitabxanasından asılı olaraq bu 12-14 dəqiqə çəkə bilir. Bu (nisbətən) çox zamandır, buna görə əməliyyatları necə sürətləndirə biləcəyimiz barədə düşünməyə dəyər. + +Stop sözləri və ya cümlənin məqsədini dəyişdirməyən ümumi İnglis sözlərini silmək birinci addım olacaq. Bunları yığışdırmaqla fikir analizimiz daha sürətli icra olunacaq və dəqiqlikdə geri qalmayacaq (stop sözlər cümlənin əsas fikrini dəyişmir, sadəcə analizin sürətini yavaşladır). + +Ən uzun mənfi rəy 395 sözdür, lakin stop sözləri yığışdırdıqdan sonra bu 195 oldu. + +Stop sözləri silmək özü sürətli əməliyyatdır, 515,000 sətirlik data içində 2 rəy sütunundan stop sözlərin silinməsi test komputerində 3.3 saniyə çəkdi. Bu sənin cihazının CPU sürətindən, RAM və SSD olub-olmamasından və digər faktorlardan asılı olaraq aşağı-yuxarı cüzi olaraq fərq edə bilər. Əməliyyatın nisbi qısalığı fikir analizinin daha da yaxşılaşdırdığını və bunu etməyə dəydiyini göstərir. + +```python +from nltk.corpus import stopwords + +# CSV fayldan otel rəylərini yüklə +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Stop sözləri sil - çox sözlərə görə yavaş ola bilər! +# Ryan Xanın (ryanxjhan Kaggle-da) stop sözlərin silinməsində müxtəlif yanaşmaların performans fərqləri barədə dəyərli məqaləsi vardır +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # Ryanın tövsiyyəsinə uyğun olaraq bu yanaşmanı tətbiq edirik +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Stop sözləri hər iki sütundan sil +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### Fikir analizinin aparılması + +Artıq sən həm mənfi, həm də müsbət rəylərdə fikir analizi apara və nəticələri 2 yeni sütunda saxlaya bilərsən. Fikirlərin yoxlanılması rəy verənin həmin rəyə verdiyi bala uyğunluğunu müqayisə üçün istifadə olunacaq. Misal üçün, əgər fikir analizi nəticəsində mənfi rəyin fikrini 1 kimi qiymətləndirsə (çox müsbət fikir kimi) və ya müsbət rəyin fikrini 1 kimi qiymətləndirsə, lakin rəy verən otelə mümkün ən aşağı balı veribsə, deməli ya rəy verənin mətni verdiyi bala uyğun gəlmir, ya da bizim fikir analizimiz düzgün icra olunmayıb. Sən fikir analizindən çıxan nəticənin tam səhv ola biləcəyi ehtimalını qəbul etməlisən və bunu izah da etmək mümkündür. Misal üçün, rəyin özü çox kinayəli ola bilər - "Təbii ki mən istilik sistemi olmayan otaqda yatmağı ÇOX sevdim" və fikir analizimiz bunu təcrübəli insandan fərqli olaraq müsbət rəy kimi qəbul edə bilər. + +NLTK müxtəlif fikir analizi edən funksiyalar təmin edir və sən onların nəticələnin nə qədər yaxşı və ya pis olduğunuz yoxlayaraq öyrənə bilərsən. Burada VADER fikir analiz üsulu istifadə olunmuşdur. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Sosial Media Mətninin Fikir Təhlili üçün Parsimon Qaydaya əsaslanan Model. Vebloqlar və Sosial Media üzrə Səkkizinci Beynəlxalq Konfrans (ICWSM-14). Ann Arbor, MI, İyun 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` +Daha sonra fikir analizi hesablamasını hər rəy üçün aşağıdakı kimi tətbiq edə bilərsən: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +Bu bizim kompüterimizdə təxmini 120 saniyə çəkdi, lakin bu hər cihaza uyğun dəyişə bilər. Əgər nəticələri çap edib rəylərin fikirlərlə uyğunlaşmasını yoxlamaq istəyirsənsə, aşağıdakı kodu tətbiq edə bilərsən: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` +Bu faylı tapşırıqda istifadə etməzdən əvvəl ediləcək ən son şey bunun yadda saxlamaqdır! Sən həmçinin bütün yeni sütunları daha rahat istifadə edilə bilməsi üçün yerlərini dəyişə bilərsən (bu yalnız insanlar üçün olan kosmetik dəyişiklikdir). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +Sən bütün kodu [analiz notbukunda](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) icra etməlisən (yalnız [filtrasiya notbukunu](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) Hotel_Reviews_Filtered.csv faylını yaratmaq üçün icra etdikdən sonra). + +İzləmək üçün düzgün sıralanmış addımlar aşağıdakı kimidir: + +1. Original dataset faylı **Hotel_Reviews.csv** əvvəlki dərsdə [kəşfetmə notbukunda](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) analiz olunub +2. Hotel_Reviews.csv faylı [filtrasiya notbuku](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) ilə filtrlənib və nəticə **Hotel_Reviews_Filtered.csv** faylına yazılıb +3. Hotel_Reviews_Filtered.csv faylı [fikir analizi notbuku](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) ilə emal olunub və nəticə **Hotel_Reviews_NLP.csv** faylına yazılıb +4. Hotel_Reviews_NLP.csv faylını aşağldakı NLP məşğələsində istifadə olunacaq + +### Nəticə + +Başlayanda sənin sütunlarla datasetin var idi və onların hamısının nə doğruluğunu yoxlamaq mümkün idi, nə də istifadəsi. Sən datanı kəşf etdin, lazımsız hissələri filtrlədin, taqları faydalı formaya saldın, ortalama nəticəni hesabladın, fikirlərin analizini bəzi sütunlara yazdın və ümid edirik ki, təbii mətnləri emal etməklə bağlı maraqlı nələrsə öyrəndin. + +--- +## 🚀 Məşğələ + +Artıq sən bu datasetdə fikir analizini yerinə yetirdin, indi isə fikir ətrafında oxşarlıqları (modelləri) təyin etmək üçün bu kursda öyrəndiyin başqa hansı strategiyaları (klasterləşdirmə bəlkə?) tətbiq edə biləcəyini düşün. + +## [Müharizə sonrası quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +[Bu öyrənmə modulunu](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) götür və mətnlərdə fikir analizi üçün istifadə olunan müxtəlif alətləri öyrən. + +## Tapşırıq + +[Başqa dataset yoxla](assignment.az.md) diff --git a/6-NLP/5-Hotel-Reviews-2/translations/assignment.az.md b/6-NLP/5-Hotel-Reviews-2/translations/assignment.az.md new file mode 100644 index 0000000000..8a1d44a3bf --- /dev/null +++ b/6-NLP/5-Hotel-Reviews-2/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Başqa dataset yoxla + +## Təlimatlar + +Sənin artıq NLTK istifadə etməklə mətndən fikirləri təyin etməyi öyrəndiyini nəzərə alaraq indi başqa dataset üzərində tətbiq edək. Sən, çox güman ki, bunun üzərində bəzi data emalı edəcəksən, notbuk yaracaqsan və fikirlərindəki prosesləri sənədləşdirəcəksən. Nəyi kəşf etdiyini paylaş. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | ------------ | -------------- | -------------- | +| | Tamamlanmış notbuk və dataset təqdim olunub. Fikirlərin təyin olunması və sütunların məqsədi yaxşı sənədləşdirilmişdir | Notbukda izahlar yaxşı verilməyib | Notbuk işlək və ya yararlı deyil | diff --git a/6-NLP/translations/README.az.md b/6-NLP/translations/README.az.md new file mode 100644 index 0000000000..4de0bc0d3b --- /dev/null +++ b/6-NLP/translations/README.az.md @@ -0,0 +1,24 @@ +# Təbii dil emalı ilə ilkin tanışlıq + +Təbii dil emalı(NLP-Natural Language Processing) kompüter proqramının insan dilini danışıq və yazılı şəkildə başa düşmə qabiliyyətidir. O, süni intellektin(AI) tərkib hissəsidir. NLP 50 ildən artıqdır ki, mövcuddur və kökləri dilçilik sahəsinə gedib çatır. Bu sahə maşınlara insan dilini anlamağa və emal etməyə yönəlib. Bu da daha sonra orfoqrafik yoxlama və ya maşın tərcüməsi kimi tapşırıqları yerinə yetirmək üçün istifadə edilə bilər. Əlavə olaraq tibbi tədqiqatlar, axtarış motorları və biznes kəşfiyyatı kimi bir sıra real həyati tətbiqlərə də malikdir. + +## Regional mövzu: Avropa dilləri, onların ədəbiyyatı və Avropanın romantik otelləri ❤️ + +Dərs proqramının bu bölməsində siz maşın öyrənməsinin ən geniş yayılmış istifadələrindən biri ilə tanış olacaqsınız: təbii dil emalı (NLP). Hesablama dilçiliyindən irəli gələn bu süni intellekt kateqoriyası səs və ya mətn rabitəsi vasitəsilə insanlar və maşınlar arasında körpüdür. + +Bu dərslərdə biz maşın öyrənməsinin bu söhbətləri getdikcə daha "ağıllı" etməkdə necə kömək etdiyini öyrənmək üçün kiçik danışıq botları yaratmaqla NLP-nin əsaslarını öyrənəcəyik. Ceyn Ostinin 1813-cü ildə nəşr olunmuş klassik romanı **Qürur və Qərəz**-dən Elizabet Bennett və cənab Darsi ilə söhbət edərək keçmişə səyahət edəcəksiniz. Sonra isə Avropada otel rəyləri vasitəsilə təəssüratların təhlili haqqında öyrənərək biliklərinizi artıracaqsınız. + +![Qürur və Qərəz kitabı və çay](../images/p&p.jpg) +> Foto Unsplash platformasında Elaine Howlin tərəfindən çəkilmişdir. + +## Dərslər + +1. [Təbii dil emalına giriş](../1-Introduction-to-NLP/translations/README.az.md) +2. [Ümumi NLP tapşırıqları və texnikaları](../2-Tasks/translations/README.az.md) +3. [Maşın öyrənməsi ilə tərcümə və hisslərin təhlili](../3-Translation-Sentiment/translations/README.az.md) +4. [Məlumatlarınız hazırlanır](../4-Hotel-Reviews-1/translations/README.az.md) +5. [Sentiment Analizi üçün NLTK](../5-Hotel-Reviews-2/translations/README.az.md) + +## Tövhə verənlər + +Təbii dil emalı dərsləri [Stephen Howell](https://twitter.com/Howell_MSFT) tərəfindən ☕ ilə yazılmışdır. diff --git a/7-TimeSeries/1-Introduction/translations/README.az.md b/7-TimeSeries/1-Introduction/translations/README.az.md new file mode 100644 index 0000000000..6ac7a6de43 --- /dev/null +++ b/7-TimeSeries/1-Introduction/translations/README.az.md @@ -0,0 +1,185 @@ +# Zaman seriyalarının proqnozlaşdırılmasına giriş + +![Zaman seriyalarının eskiz üzərində icmalı](../../../sketchnotes/ml-timeseries.png) + +> [Tomomi Imura](https://www.twitter.com/girlie_mac) tərəfindən çəkilmiş eskiz + +Bu və sonrakı dərsdə siz ML mühəndisinin repertuarının digər mövzulardan bir qədər az tanınan maraqlı və dəyərli hissəsi olan zaman seriyalarının proqnozlaşdırılması haqqında öyrənəcəksiniz. Bu proqnozlaşdırma bir növ 'kristal kürə'-yə bənzəyir: məsələn, qiymət dəyişəninin keçmiş performansına əsaslanaraq, onun gələcək potensial dəyərini təxmin edə bilərsiniz. + +[![Zaman seriyalarının proqnozlaşdırılmasına giriş](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Zaman seriyalarının proqnozlaşdırılmasına giriş") + +> 🎥 Zaman seriyalarının proqnozlaşdırılması haqqında olan video üçün yuxarıdakı şəkilə klikləyin. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/?loc=az) + +Zaman seriyalarının proqnozlaşdırılması qiymət, inventar və təchizat zənciri problemlərinə birbaşa tətbiqi nəzərə alınmaqla biznes üçün real dəyərə malik faydalı və maraqlı sahədir. Gələcək performansı daha yaxşı proqnozlaşdırmaq üçün daha çox məlumat əldə etmək üçün dərin öyrənmə üsullarından istifadə edilməyə başlansa da, zaman seriyalarının proqnozlaşdırılması klassik ML texnikalarına əsaslanan bir sahə olaraq qalır. + +> Penn State-in faydalı zaman seriyası kurrikulumuna [burada](https://online.stat.psu.edu/stat510/lesson/1) baxa bilərsiniz. + +# Giriş + +Tutaq ki, siz onların nə qədər tez-tez istifadə edildiyi və zamanla nə qədər müddətə istifadə edildiyi barədə məlumat verən bir seriya ağıllı parkomatlara sahibsiniz. + +> Əgər tələb və təklif qaydalarına uyğun olaraq sayğacın keçmiş performansına əsaslanıb onun gələcək dəyərini proqnozlaşdıra bilsəydiniz, bunanla nə edərdiniz? + +Məqsədinizə çatmaq üçün nə vaxt hərəkət edəcəyinizi dəqiq proqnozlaşdırmaq zaman seriyalarının proqnozlaşdırılması ilə həll edilə bilən bir problemdir. Pik saatlarda dayanacaq yeri axtaran insanlardan daha çox ödəniş almaq onları sevindirməz, lakin bu, küçələri təmizləmək üçün gəlir əldə etməyin etibarlı yolu olardı! + +Gəlin zaman seriyaları alqoritmlərinin bəzi növlərini araşdıraq və notbuk yaratmaqla bəzi məlumatları təmizləmək və hazırlamağa başlayaq. Təhlil edəcəyiniz data GEFCom2014 proqnozlaşdırma müsabiqəsindən götürülmüşdür. Həmin data, 2012 və 2014-cü illər arasında 3 illik, saatlıq elektrik yükü və temperatur dəyərlərindən ibarətdir. Elektrik yükünün və temperaturun tarixi nümunələrini nəzərə alaraq elektrik yükünün gələcək dəyərlərini proqnozlaşdıra bilərsiniz. + +Bu nümunədə siz yalnız keçmiş yükləmə datasından istifadə edərək bir addım irəlini proqnozlaşdırmağı öyrənəcəksiniz. Başlamazdan əvvəl ekran arxasında nələrin baş verdiyini anlamaqda fayda var. + +## Bəzi təriflər + +"Zaman seriyaları" termini ilə qarşılaşarkən onun bir neçə fərqli kontekstdə istifadəsini başa düşməlisiniz. + +🎓 **Zaman seriyaları** + +Riyaziyyatda "zaman seriyası vaxt sırasına görə indeksləşdirilmiş(və ya siyahıya alınmış, yaxud da qrafikləşdirilmiş) data nöqtələrinin sırasıdır. Ən çox yayılmış zaman seriyası zamanın ardıcıl bərabər məsafəli nöqtələrində götürülən ardıcıllıqdır." Zaman seriyasına misal olaraq [Dow Jones Sənaye Ortalamasının](https://wikipedia.org/wiki/Time_series) gündəlik bağlanış dəyərini göstərmək olar. Zaman seriyalarının qrafiklərindən və statistik modelləşdirməsindən istifadəyə tez-tez siqnalların işlənməsi, hava proqnozu, zəlzələnin proqnozlaşdırılması və hadisələrin baş verdiyi müddətdə məlumat nöqtələrinin zamanla tərtib oluna biləcəyi digər sahələrdə rast gəlinir. + +🎓 **Zaman seriyalarının təhlili** + +Zaman seriyalarının təhlili yuxarıda qeyd olunan zaman seriyası məlumatlarının təhlilidir. Zaman seriyası dataları müxtəlif formalarda ola bilər. Onlardan biri fasilə verən hadisədən əvvəl və sonra bir zaman seriyasındakı qanunauyğunluqları aşkarlayan "kəsintili (diskret) zaman seriyası"-dır. Zaman seriyası üçün lazım olan analiz növü məlumatların xarakterindən asılıdır. Məlumatların özü isə nömrələr və ya simvollar seriyası formasında ola bilər. + +İcrası nəzərdə tutulan təhlildə tezlik-domen və zaman-domen, xətti və qeyri-xətti və s. daxil olmaqla müxtəlif üsullardan istifadə edilir. Bu tip dataların analiz üsulları barədə ətraflı məlumatı [buradan](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) öyrənə bilərsiniz. + +🎓 **Zaman seriyaları proqnozu** + +Zaman seriyalarının proqnozlaşdırılması, keçmişdə toplanmış dataların yaratdığı qanunauyğunluğa əsasən gələcək dəyərləri proqnozlaşdırmaq üçün hansısa bir modeldən istifadə etməkdir. Zaman seriyası datalarını tədqiq etmək üçün reqressiya modellərindən istifadə etmək mümkün olsa da, belə məlumatlar xüsusi model tiplərindən istifadə etməklə ən yaxşı şəkildə təhlil edilir. + +Zaman seriyası datası xətti reqressiya ilə təhlil edilə bilən məlumatlardan fərqli olaraq ardıcıl müşahidələrin siyahısıdır. Ən çox yayılmışı ARIMA-dır, açılışı "Autoregressive Integrated Moving Average" deməkdir. + +[ARIMA modelləri](https://online.stat.psu.edu/stat510/lesson/1/1.1) "seriyanın indiki dəyərini keçmiş dəyərlər və keçmiş proqnoz xətaları ilə əlaqələndirir." Onlar məlumatların zamanla seriyalandığı zaman-domen məlumatlarını təhlil etmək üçün ən uyğun variantdırlar. + +> ARIMA modellərinin bir neçə növü var ki, onlar haqqında [burada](https://people.duke.edu/~rnau/411arim.htm) öyrənə bilərsiniz. Növbəti dərsdə onlar barədə öyrənəcəksiniz. + +Növbəti dərsdə siz dəyərini zamanla yenilənən bir dəyişənə fokuslanan [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm) istifadə edərək ARIMA modeli quracaqsınız. Bu tip məlumatlara misal olaraq Mauna Loa Rəsədxanasında aylıq karbon qazı konsentrasiyasını qeyd edən [bu verilənlər bazası](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) ola bilər: + +| CO2 | YearMonth | Year | Month | +| :----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ Bu data setində zamanla yenilənən dəyişəni müəyyən edin. + +## Nəzərə alınmalı Zaman seriyası data xarakteristikaları + +Zaman seriyası məlumatlarına baxarkən onların daha yaxşı başa düşmək üçün nəzərə almalı və azaltmalı olduğunuz [müəyyən xüsusiyyətlərə](https://online.stat.psu.edu/stat510/lesson/1/1.1) malik olduğunu görə bilərsiniz. Əgər siz zaman seriyası datalarını analiz etmək istədiyiniz potensial 'sinqal' ötürücüsü olaraq görürsünüzə, bu xüsusiyyətlər “səs-küy” kimi düşünülə bilər. Siz tez-tez müxtəlif statistik üsullardan istifadə edərək həmin xüsusiyyətlərin bəzilərini əvəz etməklə 'səs-küyü' azaltmalı olacaqsınız. + +Zaman seriyaları ilə işləyə bilmək üçün bilməli olduğunuz bəzi anlayışlar bunlardır: + +🎓 **Trendlər** + +Trendlər zamanla ölçülə bilən artımlar və azalmalar kimi tərif edilir. [Ətraflı oxu](https://machinelearningmastery.com/time-series-trends-in-python). Zaman seriyaları kontekstində isə trendlər, onları necə istifadə etmək və lazım gələrsə, zaman seriyalarınızdan silmək haqqındadır. + +🎓 **[Mövsümilik](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Mövsümilik dedikdə, məsələn, satışlara təsir edə biləcək bayram ərəfəsi kimi dövri dalğalanmalar nəzərdə tutulur. Fərqli qrafiklərin datada mövsümiliyi necə göstərdiyinə [diqqət yetirin](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm). + +🎓 **Kənar göstəricilər** + +Kənar göstəricilər standart məlumat fərqindən çox uzaqdır. + +🎓 **Uzun müddətli dövr** + +Mövsümilikdən asılı olmayaraq məlumatlar bir ildən çox davam edən iqtisadi tənəzzül kimi uzunmüddətli dövrü göstərə bilər. + +🎓 **Daimi fərq** + +Zaman keçdikcə bəzi məlumatlar gecə və gündüz enerji istifadəsi kimi daimi dalğalanmaları göstərir. + +🎓 **Kəskin dəyişikliklər** + +Verilənlər əlavə təhlilə ehtiyac duyan qəfil dəyişikliklər göstərə bilər. Məsələn, COVID səbəbiylə müəssisələrin qəfil bağlanması məlumatların dəyişməsinə səbəb oldu. + +✅ Burada bir neçə il ərzində, günlük oyundaxili satışları göstərən bir [nümunə zaman seriyası qrafiki](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) verilmişdir. Göstərilən datada yuxarıda sadalanan xüsusiyyətlərdən hansılarını sezə bilərsiniz? + +![Oyundaxili satış xərcləri](../images/currency.png) + +## Tapşırıq - enerji istifadəsi datasının istifadəsinə başlamaq + +Keçmiş istifadəni nəzərə alaraq gələcək enerji istifadəsini proqnozlaşdırmaq üçün zaman seriyası modelini yaratmağa başlayaq. + +> Bu nümunədəki datalar GEFCom2014 proqnozlaşdırma müsabiqəsindən götürülmüşdür. 2012-2014-cü illər arasında 3 illik, saatlıq elektrik yükü və temperatur dəyərlərindən ibarətdir. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli və Rob J. Hyndman, "Ehtimallı enerji proqnozlaşdırılması: Qlobal Enerji Proqnozlaşdırma Müsabiqəsi 2014 və sonrası", Beynəlxalq Proqnozlaşdırma Jurnalı, cild 32, №3, səh 896 -913, iyul-sentyabr, 2016. + +1. Bu dərsin `working` qovluğundakı _notebook.ipynb_ faylını açın. Dataları yükləməyə və vizuallaşdırmağa kömək edəcək kitabxanalar əlavə etməklə başlayın + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Nəzərə alın ki, sizin tərtibat mühitinizi quran və məlumatların endirilməsini idarə edən `common` qovluğundakı fayllardan istifadə edirsiniz. + +2. Növbəti addım olaraq, `load_data()` və `head()` funksiyalarını çağıraraq dataları datafreym olaraq yoxlayın: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Tarixi və yükü təmsil edən iki sütun olduğunu görə bilərsiniz: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. İndi isə `plot()` funksiyasını çağıraraq datanın qrafikini qurun: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![enerji qrafiki](../images/energy-plot.png) + +4. İndi 2014-cü ilin iyul ayının ilk həftəsini, `[tarixdən]: [tarixə]` formasında `energy`-ə giriş dəyişəni formasında təqdim edərək qrafiki qurun: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![iyul](../images/july-2014.png) + + Gözəl qrafik alındı! Bu qrafiklərə nəzər yetirin və yuxarıda sadalanan xüsusiyyətlərdən hər hansı birini müəyyən edə bildiyinizə baxın. Verilənləri vizuallaşdırmaqla nəyi təxmin edə bilərik? + +Növbəti dərsdə bəzi proqnozlar yaratmaq üçün ARIMA modeli yaradacaqsınız. + +--- + +## 🚀 Məşğələ + +Zaman seriyalarının proqnozlaşdırılmasından faydalanacağını düşünə biləcəyiniz bütün sənaye və araşdırma sahələrinin siyahısını tərtib edin. Bu texnikaların incəsənətdə tətbiqi barədə düşünə bilərsinizmi? Ekonometrikada? Ekologiya? Pərakəndə satış? Sənaye? Maliyyə? Başqa harada? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Onları burada əhatə etməsək də, neyroşəbəkələr bəzən zaman seriyalarının proqnozlaşdırılmasının klassik üsullarını təkmilləşdirmək üçün istifadə olunur. Onlar haqqında daha ətraflı [bu məqalədə](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) oxuyun. + +## Tapşırıq + +[Daha bir neçə zaman seriyasını vizuallaşdırın](assignment.az.md) \ No newline at end of file diff --git a/7-TimeSeries/1-Introduction/translations/assignment.az.md b/7-TimeSeries/1-Introduction/translations/assignment.az.md new file mode 100644 index 0000000000..b7229a2a3b --- /dev/null +++ b/7-TimeSeries/1-Introduction/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Daha bir neçə Zaman Seriyasını vizuallaşdırın + +## Təlimatlar + +Bu xüsusi modelləşdirməni tələb edən data tiplərinə baxaraq Zaman Seriyasının Proqnozlaşdırılması haqqında öyrənməyə başlamısınız. Enerji ilə bağlı bəzi dataları artıq vizuallaşdırmısınız. İndi isə Zaman Seriyasının Proqnozlaşdırılmasından faydalana biləcək bəzi digər datalar baxın. Üç nümunə tapın ([Kaggle](https://kaggle.com) və [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)-i yoxlayın) və onları vizuallaşdırmaq üçün notbuk yaradın. Onların hər hansı xüsusi xüsusiyyətlərini (mövsümilik, qəfil dəyişikliklər və ya digər tendensiyalar) qeyd dəftərinizdə qeyd edin. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Üç datasetin qrafiki çəkilmiş və notbukda izah edilmişdir | İki datasetin qrafiki çəkilmiş və notbukda izah edilmişdir | Notbukda çox az datasetin qrafiki çəkilmiş və ya izah edilmiş, yaxud da təqdim olunan datalar kifayət qədər deyil | \ No newline at end of file diff --git a/7-TimeSeries/2-ARIMA/translations/README.az.md b/7-TimeSeries/2-ARIMA/translations/README.az.md new file mode 100644 index 0000000000..b6598034ab --- /dev/null +++ b/7-TimeSeries/2-ARIMA/translations/README.az.md @@ -0,0 +1,394 @@ +# ARIMA ilə zaman seriyalarının proqnozlaşdırılması + +Əvvəlki dərsdə siz zaman seriyalarının proqnozlaşdırılması haqqında öyrəndiniz. Əlavə olaraq isə zamanla elektrik yükünün dalğalanmalarını göstərən verilənlər toplusunu yüklədiniz. + +[![ARIMA-a giriş](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "ARIMA-a giriş") + +> 🎥 Video üçün yuxarıdakı şəkilə klikləyin: ARIMA modellərinə qısa giriş. Nümunə R dilində olsa da, anlayışlar universaldır. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/?loc=az) + +## Giriş + +Bu dərsdə siz [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) ilə modellər qurmağın xüsusi üsulunu kəşf edəcəksiniz. ARIMA modelləri [qeyri-stasionarlığı](https://wikipedia.org/wiki/Stationary_process) göstərən datalara uyğunlaşdırılmışdır. + +## Ümumi anlayışlar + +ARIMA ilə işləyə bilmək üçün bilməli olduğunuz bəzi anlayışlar var: + +- 🎓 **Stasionarlıq**. Statistik kontekstdən götürsək, stasionarlıq zaman dəyişsə də paylanması dəyişməyən datalara aid bir anlayışdır. Beləliklə, qeyri-stasionar data təhlil edilmək üçün transformasiya edilməli olan tendensiyalara görə dalğalanmaları göstərir. Məsələn, mövsümilik məlumatlarda dalğalanmalar yarada bilər və “mövsümi fərqləndirmə” prosesi ilə aradan qaldırıla bilər. + +- 🎓 **[Fərqləndirmə](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Fərqləndirmə, yenə də statistik kontekstdən götürsək, qeyri-stasionar məlumatların qeyri-sabit tendensiyasını aradan qaldıraraq stasionar hala gətirmək üçün çevrilməsi prosesinə deyilir. "Fərqləndirmə zaman seriyasının səviyyəsindəki dəyişiklikləri, trend və mövsümiliyi aradan qaldırır və nəticədə zaman seriyasının orta dəyərini sabitləşdirir." [Shixiong və digərlərinin müəllifi olduğu məqalə](https://arxiv.org/abs/1904.07632) + +## ARIMA zaman seriyası kontekstində + +ARIMA-nın vaxt seriyalarını modelləşdirməyə və ona qarşı proqnozlar verməyə necə kömək etdiyini araşdıraq. + +- **AR - AvtoReqressiv**. Avtoreqressiv modellər, adından da göründüyü kimi, məlumatlarınızdakı əvvəlki dəyərləri təhlil etmək və onlar haqqında fərziyyələr irəli sürmək üçün zamanda "geriyə" baxır. Həmin əvvəlki dəyərlər “geriləmiş” adlanır. Məsələn, qələmlərin aylıq satışını göstərən məlumatlar. Hər ayın ümumi satışları datasetdə "inkişaf edən dəyişən" hesab olunacaq. Bu model "inkişaf edən maraq dəyişəninin öz geridə qalmış (yəni əvvəlki) dəyərlərinə dönməsi" kimi qurulmuşdur. [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - İnteqrasiya**. Oxşar "ARMA" modellərindən fərqli olaraq, ARIMA-dakı "I" onun *[inteqrasiya edilmiş](https://wikipedia.org/wiki/Order_of_integration)* olmasına işarə edir. Qeyri-stasionarlığı aradan qaldırmaq üçün fərqli addımlar tətbiq edildikdə məlumatlar “inteqrasiya olunur”. + +- **MA - Moving Average(Dəyişkən Orta Dəyər)**. Bu modelin [dəyişkən orta dəyər](https://wikipedia.org/wiki/Moving-average_model) aspekti geriləmiş dəyərlərin cari və keçmiş qiymətlərini müşahidə etməklə müəyyən edilən çıxış dəyişəninə aiddir. + +Qeyd: ARIMA modeli zaman seriyası datalarının xüsusi formasına mümkün qədər yaxından uyğunlaşdırmaq üçün istifadə olunur. + +## Tapşırıq - ARIMA modelini qurun + +Bu dərsin [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) qovluğunu açın və [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb) faylını tapın . + +1. ARIMA modellərində sizə lazım olacaq `statsmodels` Python kitabxanasını yükləmək üçün notbuku işə salın. + +1. Lazımi kitabxanaları yükləyin + +1. İndi verilənlərin planlaşdırılması üçün faydalı olan daha bir neçə kitabxana yükləyin: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. `/data/energy.csv` faylından məlumatları Pandas datafreyminə yükləyin və nəzər salın: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. 2012-ci ilin yanvarından 2014-cü ilin dekabrına qədər mövcud olan bütün enerji məlumatlarının qrafikini tərtib edin. Son dərsdə bu dataları gördüyümüz üçün heç bir qaranlıq məqam olmamalıdır: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + İndi, modeli quraq! + +### Öyrətmə və test datasetlərini yaradın + +İndi datalarımız yükləndi, beləliklə siz onları öyrətmə və test setlərinə ayıra bilərsiniz. Modelinizi öyrətmə dəstində öyrədəcəksiniz. Həmişə olduğu kimi modelin öyrədilməsini bitirdikdən sonra siz test setindən istifadə edərək onun düzgünlüyünü qiymətləndirəcəksiniz. Modelin gələcək zaman dilimlərindən məlumat əldə etməməsini təmin etmək üçün test setinin öyrətmə setindən sonrakı dövrü əhatə etdiyinə əmin olmalısınız. + +1. Öyrətmə setinə 2014-cü il sentyabrın 1-dən oktyabrın 31-dək iki aylıq müddət ayırın. Data setinə 2014-cü il noyabrın 1-dən dekabrın 31-dək olan iki aylıq dövr daxildir: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Bu məlumatlar gündəlik enerji istehlakını əks etdirdiyi üçün güclü mövsümi model var, lakin istehlak son günlərdəki istehlakla daha çox oxşardır. + +1. Fərqləri vizuallaşdırın: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![öyrətmə və test dataları](../images/train-test.png) + + Buna görə də öyrətmə dataları üçün nisbətən kiçik bir zaman pəncərəsindən istifadə etmək bizə kifayət edəcək. + + > Qeyd: ARIMA modelinə uyğunlaşdırmaq üçün istifadə etdiyimiz funksiya uyğunlaşdırma zamanı nümunədaxili yoxlamadan istifadə etdiyi üçün təsdiqləmə məlumatlarını ortadan qaldıracağıq. + +### Dataları öyrədilmək üçün hazırlayın + +İndi siz datalarınızı filterləyərək və miqyasını dəyişdirərək onları öyrədilmək üçün hazırlamalısınız. Yalnız sizə lazım olan vaxt dövrləri və sütunları daxil etmək üçün data dəstinizi filtrləyin və məlumatların 0,1 intervalında proqnozlaşdırılmasını təmin etmək üçün miqyaslayın. + +1. Dataseti hər birində yalnız yuxarıda qeyd olunan vaxt dövrlərini və yalnız lazım olan "yük" sütununu özündə saxlayacaq şəkildə filtrləyin: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + Datanın formasını görə bilərsiniz: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Dataları (0, 1) intervalında miqyaslandırın. + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Orijinal və miqyaslı dataları vizuallaşdırın: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![orijinal](../images/original.png) + + > Orijinal data + + ![miqyaslı](../images/scaled.png) + + > Miqyaslanmış data + +1. Artıq miqyaslanmış datanı kalibrasiya etdiyimiz üçün test dalarını miqyaslaya bilərik: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### ARIMA-ın icrası + +ARIMA-nı icra etməyin vaxtı gəlib çatdı! İndi siz bir az əvvəl yüklədiyiniz `statsmodels` kitabxanasından istifadə edəcəksiniz. + +İzləməli olduğumuz bir neçə addım var + + 1. `SARIMAX()` çağırmaqla və p, d, q, P, D və Q parametrlərini daxil etməklə modeli təyin edin. + 2. fit() funksiyasını çağıraraq modeli öyrətmə dataları üçün hazırlayın. + 3. `forecast()` funksiyasını çağıraraq və təxmin etmək üçün addımların sayını (`horizon`) müəyyən etməklə proqnozlaşdırmanı icra edin. + +> 🎓 Bütün bu parametrlər nə üçündür? ARIMA modelində zaman seriyasının əsas aspektlərini modelləşdirməyə kömək etmək üçün istifadə olunan 3 parametr var: mövsümilik, trend və küy. Bu parametrlər bunlardır: + +`p`: *keçmiş* dəyərləri özündə birləşdirən modelin avtoreqressiv aspekti ilə əlaqəli parametr. +`d`: zaman seriyasına tətbiq etmək üçün *fərqlənmənin* (🎓fərqlənməni xatırlayırsınız 👆?) miqdarına təsir edən modelin inteqrasiya olunmuş hissəsi ilə əlaqəli parametr. +`q`: modelin orta hərəkətli hissəsi ilə əlaqəli parametr. + +> Qeyd: Əgər məlumatınızın mövsümi aspekti varsa - indi istifadə etdiyimiz mövsümi ARIMA modeli(SARIMA) bunu edir. Bu halda siz başqa parametrlər dəstindən istifadə etməlisiniz: `p`, `d` və `q` ilə eyni assosiasiyaları təsvir edən, lakin modelin mövsümi komponentlərə uyğun gələn `P`, `D` və `Q` dəsti. + +1. Üstün bildiyiniz üfüq dəyərini təyin etməklə başlayın. Gəlin saat 3-ü üfüq dəyəri olaraq yoxlayaq: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + ARIMA modelinin parametrləri üçün ən yaxşı dəyərləri seçmək bir qədər subyektiv olduğu və vaxt tələb etdiyi üçün çətin ola bilər. Bu hallarda [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html) kitabxanasının `auto_arima()` funksiyasından istifadə edə bilərsiniz. + +1. Yaxşı model tapmaq üçün hələlik əl ilə seçimləri yoxlayın. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + Nəticələrin cədvəli ekranda çap olunur. + +İlk modelinizi yaratdınız! İndi biz bunu qiymətləndirməyin yolunu tapmalıyıq. + +### Modelinizi qiymətləndirin + +Modelinizi qiymətləndirmək üçün siz `irəli gəzinti` deyilən yoxlamanı həyata keçirə bilərsiniz. Praktikada zaman seriyası modelləri hər təzə məlumat əldə edildikdə yenidən öyrədilir. Bu, modelə hər zaman addımında ən yaxşı proqnozu verməyə imkan verir. + +Həmin texnikadan istifadə edərək zaman seriyasının əvvəlindən başlayaraq öyrətmə datasetində modeli öyrədin. Sonra növbəti addım üçün proqnoz verin. Proqnoz bilinən dəyərlə qiymətləndirilir. Daha sonra öyrətmə seti məlum dəyəri daxil etmək üçün genişləndirilir və proses təkrarlanır. + +> Qeyd: Daha səmərəli öyrədilmə üçün siz öyrətmə setinin pəncərə ölçüsünü sabit saxlamalısınız ki, hər dəfə təlim setinə yeni müşahidə əlavə etdikdə müşahidəni setin əvvəlindən siləsiniz. + +Bu proses modelin praktikada necə işləyəcəyinə dair daha etibarlı təxmin verir. Bununla belə, bu qədər model yaratmağın hesablama xərcləri də var. Data kiçikdirsə və ya model sadədirsə, bu məqbuldur, lakin daha böyük miqyaslarda bu problemə səbəb ola bilər. + +İrəli gəzinti üsulu vaxt seriyası modelinin qiymətləndirilməsinin qızıl standartıdır və öz layihələriniz üçün də tövsiyə olunur. + +1. Əvvəlcə hər HORIZON addımı üçün test məlumat nöqtəsi yaradın. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + Məlumatlar üfüq nöqtəsinə uyğun olaraq üfüqi olaraq sürüşdürülür. + +1. Test datasının uzunluğunun döngü ölçüsündə sürüşən pəncərə yanaşmasından istifadə edərək test datalarınızla bağlı proqnozlar verin: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + Baş verən öyrədilməni izləyə bilərsiniz: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. Proqnozları faktiki yüklə müqayisə edin: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + Output + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + + Faktiki yüklə müqayisədə saatlıq məlumatın proqnozunu müşahidə edin. Nə dərəcədə dəqiqlik var? + +### Modelin düzgünlüyünü yoxlayın + +Bütün proqnozlar üzərində ortalama mütləq faiz xətasını (MAPE) tapmaqla modelinizin düzgünlüyünü yoxlayın. + +> **🧮 İşin riyazi tərəfini göstərin** +> +> ![MAPE](../images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) yuxarıdakı düsturla tapılmış proqnoz dəqiqliyini nisbət formasında göstərmək üçün istifadə olunur. Actualt(cari) ilə predictedt(proqnozlaşdırılan) arasındakı fərq actualt-ə bölünür. "Bu hesablamada mütləq dəyər hər bir proqnozlaşdırılan vaxt üçün cəmlənir və uyğunlaşdırılmış n nöqtələrinin sayına bölünür." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) + +1. Tənliyi kodla ifadə edək: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. Bir addımın MAPE-i hesablayın: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + Bir addımlı proqnoz MAPE: 0.5570581332313952 % + +1. Çox mərhələli MAPE proqnozunu ekrana çap edin: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Aşağı rəqəm ən yaxşısıdır: 10 MAPE olan bir proqnozun 10% azaldığını düşünün. + +1. Ancaq həmişə olduğu kimi, bu cür ölçmə dəqiqliyini vizual olaraq görmək daha asandır deyə qrafikini çəkək: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![zaman seriyası modeli](../images/accuracy.png) + +🏆 Yuxarı dəqiqlik göstərən gözəl qrafik alındı. Əla! + +--- + +## 🚀 Məşğələ + +Zaman Seriyası Modelinin düzgünlüyünü yoxlamaq yollarını araşdırın. Bu dərsdə MAPE-ə toxunduq, amma istifadə edə biləcəyiniz başqa üsullar varmı? Onları araşdırın və şərh edin. Yardımçı sənədi [burada](https://otexts.com/fpp2/accuracy.html) tapa bilərsiniz. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu dərs yalnız ARIMA ilə Zaman Seriyasının Proqnozlaşdırılmasının əsaslarına toxunur. Zaman seriyaları modellərini qurmağın digər yollarını öyrənmək və bilikləriniz dərinləşdirmək üçün [bu reponu](https://microsoft.github.io/forecasting/) və onun müxtəlif model növlərini araşdırmağa vaxtınızı ayırın. + +## Tapşırıq + +[Yeni ARIMA modeli](assignment.az.md) \ No newline at end of file diff --git a/7-TimeSeries/2-ARIMA/translations/assignment.az.md b/7-TimeSeries/2-ARIMA/translations/assignment.az.md new file mode 100644 index 0000000000..14d476b208 --- /dev/null +++ b/7-TimeSeries/2-ARIMA/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Yeni ARIMA modeli + +## Təlimatlar + +Artıq ARIMA modelini qurduğunuza görə yeni data ilə modelin yenisini yaradın.([Duke-un datasetlərindən](http://www2.stat.duke.edu/~mw/ts_data_sets.html) birini sınayın). Notbukdakı işinizə şərhlər əlavə edin, məlumatları və modelinizi vizuallaşdırın və MAPE-dən istifadə edərək onun düzgünlüyünü yoxlayın. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Notbuk qurulmuş, sınaqdan keçirilmiş, vizuallaşdırma və dəqiqliyi göstərilməklə izah edilmiş yeni ARIMA modeli ilə təqdim edilib. | Təqdim olunan notbukda şərhlər yoxdur və ya problemlər mövcuddur. | Yarımçıq notbuk təqdim edilib. | \ No newline at end of file diff --git a/7-TimeSeries/3-SVR/translations/README.az.md b/7-TimeSeries/3-SVR/translations/README.az.md new file mode 100644 index 0000000000..e0a43f9164 --- /dev/null +++ b/7-TimeSeries/3-SVR/translations/README.az.md @@ -0,0 +1,381 @@ +# Dəstək vektor reqressoru ilə zaman seriyalarının proqnozlaşdırılması + +Əvvəlki dərsdə ARIMA modeli istifadə etməklə necə zaman seriyalarını proqnozlaşdıra biləcəyini öyrəndin. İndi isə Dəstək vektor reqressor modeli ilə davamlı datanın gələcəyini təxmin etməyə baxacaqsan. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/51/?loc=az) + +## Giriş + +Bu dərsdə sən **DVM**: **D**əstək **V**ektor **M**aşını([**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine)) istifadə etməklə reqressiya və ya **SVR: Dəstək Vektor Reqressiyası** üçün xüsusi modellər qurmağı öyrənəcəksən. + +### Zaman seriyası məsələlərində SVR [^1] + +SVR-ın zaman seriyaları proqnozlarında vacibliyini başa düşməzdən əvvəl bəzi vacib anlayışları bilməyin lazımdır: + +- **Reqressiya:** Verilmiş dəyərlər toplusundan davamlı dəyərlərin proqnozlaşdırılması üçün nəzarətli öyrənmə texnikasıdır. Burda əsas məqsəd maksimum sayda data nöqtələrinin uyğunluq əyrisinə (və ya xəttinə) yaxın olmasıdır. Daha ətraflı məlumat üçün [bura klikləyin](https://en.wikipedia.org/wiki/Regression_analysis). + +- **Dəstək Vektor Maşını (SVM):** Bu qruplaşdırma, reqressiya və uyğunsuzluqların təyin olunması üçün istifadə olunan nəzarətli maşın öyrənmə modellərindən biridir. Bu model funksiya fəzasında hiperplandır, hansı ki, qruplaşdırma tətbiqində sərhəd kimi? reqressiyada isə ən uyğun xətt kimi rol oynayır. SVM-də Kernel funksiyası əsasən dataseti çox ölçülü fəzaya çevirmək üçün istifadə olunur, beləliklə onları bölmək daha asan olur. SVM-lər barədə daha ətralı məlumat üçün bura [bura klikləyin](https://en.wikipedia.org/wiki/Support-vector_machine). + +- **Dəstək Vektor Reqressoru (SVR):** Maksimum sayda data nöqtəsinin ən uyğun gələn xətti (SVM halında hiperplan) tapmaq üçün istifadə olunan SVM tiplərindən biridir. + +### Nə üçün SVR? [^1] + +Son dərsdə zaman seriya datalarının proqnozlaşdırılması üçün tətbiq olunan uğurlu statistik xətti üsul ARIMA barədə öyrəndin. Lakin bir çox hallarda zaman seriya dataları *qeyri-xətti* olurlar və onları xətti modellərlə uyğunlaşdırmaq olmur Bu hallarda SVM-in qeyri-xətti dataların reqressiya tapşırıqlarda bacarıqlarını nəzərə alaraq SVR-i zaman seriyası proqnozlaşdırılmasında da uğurla istifadə etmək olar. + +## Tapşırıq - SVR modeli qur + +Data hazırlanmasında ilk addımlar əvvəlki [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) dərsindəki kimidir. + +Bu dərsin [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) qovluğunu açın və [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb) faylını tapın.[^2] + +1. Notbuku icra edin və lazımi kitabxanaları daxil edin: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. `/data/energy.csv` faylından dataları Pandas datafreyminə yığın və nəticəyə baxın: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. 2012-ci il yanvar ayından 2014-ci il dekabr ayına kimi olan bütün enerji datalarının qrafikini çəkin: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![bütün data](../images/full-data.png) + + İndi isə SVR modelini quraq. + +### Öyrətmə və test datasetlərini yaradın + +İndi data yüklənib və sən onu öyrətmə və test setlərinə ayıra bilərsən. Sonra sənin datanı SVR üçün lazım olan zaman addımları ilə ayrılmış datasetə çevirməyin lazım olacaq. Modelini öyrətmə seti ilə öyrədəcəksən. Model öyrənməsi bitdikdən sonra onun dəqiqliyini əvvəlcə öyrənmə və test seti ilə, sonra isə bütün dataset ilə yoxlayıb ümumi performansını ölçəcəksən. Sən əmin olmalısan ki, test setin öyrənmə setin əhatə etdiyi zaman periodundan sonrakı gələcəyi də əhatə edir və modelin gələcək zamandan informasiya almır [^2] (bu vəziyyətə *Overfitting* deyilir). + +1. 2014-cü il sentabrın 1-dən oktyabrın 31-ə kimi 2 aylıq periodu öyrənmə seti kimi ayır. Test seti isə növbəti iki ayı, noyabrın 1-dən dekabrın 31-ə kimi olan dataları əhatə edəcək: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Fərqi göstər: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![öyrətmə and test setləri](../images/train-test.png) + +### Öyrətmə üçün data hazırla + +İndi sənin datanı filtrasiya və miqyasını dəyişmə əməliyyatları tətbiq etməklə öyrətmə üçün hazırlamağın lazımdır. Dataseti filtrasiya edərək yalnız lazım olan zaman periodları və sütunlarını saxla və datanın 0 ilə 1 arasında yerləşdiyinə əmin olacaq şəkildə miqyasını dəyiş. + +1. Verilən dataseti əvvəl nəzərdə tutulan zaman periodlarına əsasən filtr et və lazım olan 'load' və tarix sütunlarını saxla: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. Öyrətmə datasetini (0, 1) miqyasına çevir: [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. İndi isə test datasetinin miqyasını dəyiş: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Zaman addımları ilə data yarat [^1] + +SVR üçün verilən datanı `[batch, timesteps]` formatına çevirməyin lazımdır. İndi sən mövcud olan `train_data` və `test_data` datasetlərinin formasını yeni ölçüdə - zaman addımları ilə bölünmüş formaya çevirməyin lazımdır. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Bu nümunədə biz `timesteps = 5` parametrini istifadə edirik. Yəni verilən dataların ilk 4 zaman addımındakı datalar modelə giriş kimi istifadə olunacaq və nəticə 5-cü addım üçün data olacaq. + +```python +timesteps=5 +``` +Öyrətmə datasını iç-içə yığılmış siyahıdan istifadə etməklə 2D tensor formasına çeviririk: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +Test datasını 2D tensora çevirik: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +Öyrətmə və test datalarından giriş və çıxış dəyərlərini seçirik: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### SVR tətbiq et [^1] + +İndi SVR tətbiq etmək zamanıdır. Bu tətbiq barədə daha ətraflı məlumat üçün [bu sənədə](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html) baxa bilərsiniz. Bizim tətbiq üçün bu addımları izləmək lazımdır: + + 1. `SVR()` çağıraraq modeli təyin et və modelə bu hiperparametrləri ötür: kernel, gamma, c və epsilon + 2. `fit()` funksiyası ilə modeli öyrətmə datası üçün hazırla + 3. Proqnozları `predict()` funksiyasını çağırmaqla əldə edə bilərsən + +Biz artıq SVR modeli hazırladıq. Burada biz [RBF kerneli](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) istifadə etdik, gamma, C və epsilon hiperparametrlərinə 0.5, 10 və 0.05 dəyərlərini verdik. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Öyrətmə datasına modeli uyğunlaşdırmaq [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### Modeldən proqnozlar əldə edin [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +Sən SVR modeli yaratdın! Bizə onun dəqiqliyini ölçmək lazımdır. + +### Modelin dəqiqliyini ölç [^1] + +Yoxlama üçün biz birinci olaraq datanı əvvəlki miqyasına geri qaytarmalıyıq. Sonra, performansı yoxlamaq üçün biz əsl və proqnozlaşdırılan zaman seriyalarının qrafikini çəkəcəyik və MAPE nəticələrini konsola yazacağıq. + +Proqnozlaşdırılmış və orijinal datanın miqyasını dəyiş: + +```python +# proqnozların miqyasının dəyişdirilməsi +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# orijinal dəyərlərin miqyasının dəyişdirilməsi +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### Modelin performansını öyrətmə və test datası ilə yoxla [^1] + +Biz datasetdən zaman məlumatlarını qrafikin x xəttində göstərmək üçün götürmüşük. Nəzərə al ki, biz birinci `timesteps-1` dəyərlərini birinci çıxış dəyərlərini hesablamağa giriş kimi istifadə etmişik, yəni bundan sonrakı zaman dəyərləri əsas çıxış dəyərləri üçün istifadə olunacaq. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +Öyrətmə datası üzərindən proqnozları qrafikdə çək: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![Öyrətmə datasının proqnozlar](../images/train-data-predict.png) + +Öyrətmə datası üçün MAPE dəyərini çap et: + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Yoxlama datası üçün proqnozları qrafikdə çək: + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![Yoxlama datası proqnozları](../images/test-data-predict.png) + +Yoxlama datası üçün MAPE dəyərini çap et: + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Sən yoxlama dataseti üçün çox yaxşı nəticə əldə etmisən! + +### Modelin performansını bütün dataset üzərindən yoxla [^1] + +```python +# yüklənmiş datanı numpy array-ə çevrilməsi +data = energy.copy().values + +# miqyasın dəyişdirilməsi +data = scaler.transform(data) + +# modelin giriş tələblərinə uyğun 2D tensora çevirmək +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# datadan giriş və çıxış dəyərlərinin seçilməsi +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# model proqnozları hesabla +Y_pred = model.predict(X).reshape(-1,1) + +# miqyası geri qaytar və formasını dəyiş +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![bütün data proqnozları](../images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + + +🏆 Bu gözəl qrafiklər modelin yaxşı dəqiqlikdə olduğunu göstərir. Əla! + +--- + +## 🚀 Məşğələ + +- Model yaradarkən və data üzərində yoxlayarkən hiperparameterləri (gamma, C, epsilon) dəyişməyi yoxla və hansı dəyərlər çoxluğunun yoxlama datası ilə daha yaxşı nəticə əldə etdiyini gör. Bu hiperparametrlər barədə daha çox öyrənmək üçün [bu sənədə](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) baxa bilərsən. +- Model üçün fərqli kernel funksiyalarını yoxla və onların dataset üzərində performanslarını analiz et. [Bu sənəd]((https://scikit-learn.org/stable/modules/svm.html#kernel-functions)) çox faydalı ola bilər. +- `timesteps` üçün fərqli dəyərlər yoxla və modelin proqnozlarına diqqət et. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu dərs zaman seriyalarında proqnozlaşdırma üçün SVR modelinin tətbiqinə giriş idi. SVR haqqında daha çox oxumaq üçün [bu bloqa](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/) baxa bilərsən. [scikit-learn-də bu texniki sənəd](https://scikit-learn.org/stable/modules/svm.html) SVM-lər barədə ümumi olaraq çox detallı məlumatlar verir. Əlavə olaraq [SVR-lar](https://scikit-learn.org/stable/modules/svm.html#regression) və fərqli [kernel funksiyalarının](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) başqa tətbiqləri və parametrləri barədə ətraflı məlumatı da əldə edə bilərsiniz. + +## Tapşırıq + +[Yeni SVR modeli](assignment.az.md) + +## İstinadlar + +[^1]: Bu bölmənin mətni, kodu və nəticələri[@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) tərəfindən töhfə verilib +[^2]: Bu bölmənin mətni, kodu və nəticələri [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA)-dan götürülüb \ No newline at end of file diff --git a/7-TimeSeries/3-SVR/translations/assignment.az.md b/7-TimeSeries/3-SVR/translations/assignment.az.md new file mode 100644 index 0000000000..701334d113 --- /dev/null +++ b/7-TimeSeries/3-SVR/translations/assignment.az.md @@ -0,0 +1,14 @@ +# Yeni SVR modeli + +## Təlimatlar [^1] + +Sən yeni data ([Duke tərəfindən təqdim olunmuş datasetlərdən](http://www2.stat.duke.edu/~mw/ts_data_sets.html) birini yoxla) ilə SVR modeli qurmalısan. Öz işini notbukda lazımi qeydlərlə işarələ, datanın və modelinin qrafiklərini çək və onun dəqiqliyini müvafiq qrafik və MAPE dəyəri ilə yoxla. Həmçinin fərqli hiperparametrlər və zaman aralıqları istifadə edərək də modelini yoxla. + +## Rubrika [^1] + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Notbuk təqdim olunub, SVR modeli qurulub, qrafiki üsulla yoxlanılıb, izah və dəqiqlik qeyd olunub. | Notbuk təqdim olunub lakin bəzi xətala var. | Natamam notbuk təqdim olunub. | + + +[^1]: Bu bölmədəki mətn [ARIMA-dan tapşırığa](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) əsasən yaradılıb. diff --git a/7-TimeSeries/translations/README.az.md b/7-TimeSeries/translations/README.az.md new file mode 100644 index 0000000000..7aaaae4072 --- /dev/null +++ b/7-TimeSeries/translations/README.az.md @@ -0,0 +1,27 @@ +# Zaman seriyalarının proqnozlaşdırılmasına giriş + +Zaman seriyalarının proqnozlaşdırılması nədir? Burada keçmiş trendləri təhlil edərək gələcək hadisələrin proqnozlaşdırılması nəzərdə tutulur. + +## Regional mövzu: dünya miqyasında elektrik enerjisindən istifadə ✨ + +Bu iki dərsdə siz, digər sahələr arasında sənaye və biznes tətbiqləri üçün son dərəcə dəyərli olan, maşın öyrənməsinin bir qədər az tanınan sahəsi sayılan zaman sıralarının proqnozlaşdırılması ilə tanış olacaqsınız. Bu modellərin faydalılığını artırmaq üçün neyron şəbəkələrdən istifadə oluna bilsə də, biz onları klassik maşın öyrənməsi kontekstində araşdıracağıq. Çünki modellər keçmişə əsaslanaraq gələcək performansı proqnozlaşdırmağa kömək edir. + +Bizim regional diqqətimiz dünya elektrik istifadəsi ilə bağlı olan keçmiş istifadə yükü əsasında gələcək enerji istifadəsini proqnozlaşdırmaq üçün maraqlı məlumat toplusuna yönəlib. Bu tip proqnozların biznes mühitində nə qədər faydalı ola biləcəyini görə bilərsiniz. + +![elektrik şəbəkəsi](../images/electric-grid.jpg) + +[Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)-də Racastan yolundakı elektrik qüllələrinin [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) tərəfindən çəkilmiş fotosu. + +## Dərslər + +1. [Zaman seriyalarının proqnozlaşdırılmasına giriş](../1-Introduction/translations/README.az.md) +2. [ARIMA zaman seriyası modellərinin yaradılması](../2-ARIMA/translations/README.az.md) +3. [Zaman seriyalarının bölünməsi üçün Dəstək Vektor Reqressorunun yaradılması](../3-SVR/translations/README.az.md) + +## Təşəkkürlər + +"Zaman seriyalarının proqnozlaşdırılmasına giriş" [Francesca Lazzeri](https://twitter.com/frlazzeri) və [Jen Looper](https://twitter.com/jenlooper) tərəfindən ⚡️ ilə yazılmışdır. + +İlk dəfə [Azure "Deep Learning For Time Series" reposunda](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) yerləşdirilən dəftərçənin əsli Francesca Lazzeri tərəfindən yazılmışdır. + +SVR dərsi [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) tərəfindən yazılmışdır. \ No newline at end of file diff --git a/8-Reinforcement/1-QLearning/translations/README.az.md b/8-Reinforcement/1-QLearning/translations/README.az.md new file mode 100644 index 0000000000..2f254c0cb7 --- /dev/null +++ b/8-Reinforcement/1-QLearning/translations/README.az.md @@ -0,0 +1,320 @@ +# Gücləndirici Öyrənmə və Q-Öyrənməsinə Giriş + +![Gücləndirici öyrənmənin icmalının eskizi](../../../sketchnotes/ml-reinforcement.png) +> [Tomomi Imura](https://www.twitter.com/girlie_mac) tərəfindən çəkilmiş eskiz + +Gücləndirici öyrənmə üç mühüm anlayışı özündə birləşdirir: agent, vəziyyətlər və hər vəziyyət üçün icra yığını. Müəyyən edilmiş vəziyyətdə hərəkəti icra etməklə agentə mükafat verilir. Super Mario oyununu yadınıza salın. Təsəvvür edin ki, siz Mariosunuz və hansısa mərhələdə uçurum kənarında dayanmısınız. Sizin üstünüzdə isə qəpik var. Hansısa bir mərhələdə Mario olmağınız sizin vəziyyətinizdir. Bir addım ataraq sağa hərəkət etmək sizi uçuruma aparacaq və aşağı xal toplayacaqsınız. Amma atlamaq düyməsinə basmağınız xal toplamanıza və sağ qalmanıza səbəb olacaqdı. Dediyimiz müsbət nəticə olduğuna görə sizə müsbət xal verilməlidir. + +Oyunda sağ qalaraq və mümkün olduğu qədər yuxarı xal toplamaqla mükafatı maksimuma çatdırmağı gücləndirici öyrənmədən və simulyator(oyun) istifadə edərək öyrənə bilərsiniz. + +[![Gücləndirici Öyrənməyə Giriş](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Dmitrinin Gücləndirici Öyrənmə barədə olan müzakirəsini dinləmək üçün yuxarıdakı şəkilə klikləyin + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/?loc=az) + +## İlkin şərtlər və quraşdırma + +Bu gün Python-da bəzi kodları sınaqdan keçirəcəyik. Dərsə aid olan Jupyter Notebook kodunu həm kompüterinizdə, həm də buludda işlədə bilməlisiniz. + +Siz [dərs notbukunu](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) aça və mühiti qurmaq üçün bu dərsi izləyə bilərsiniz. + +> **Qeyd:** Bu kodu buludda açırsınızsa, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) faylını da notbuk kodunda istifadə olunduğuna görə yükləməyiniz lazımdır. Onu notbuk faylı ilə eyni qovluğa əlavə edin. + +## Giriş + +Bu dərsdə biz rus bəstəkarı [Sergei Prokofyevin](https://en.wikipedia.org/wiki/Sergei_Prokofiev) musiqili nağılından ilhamlanaraq **[Piter və Canavar](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** dünyasını araşdıracağıq. Peterə ətrafını araşdırmaq, dadlı alma toplamaq və canavarla görüşməmək üçün **Gücləndirici Öyrənmədən** istifadə edəcəyik. + +**Gücləndirici Öyrənmə** (RL – Reinforcement Learning) çoxlu təcrübələr keçirərək, **mühit** daxilində **agentin** optimal davranışını öyrənməyə imkan verən öyrənmə texnikasıdır. Bu mühitdəki agentin **mükafat funksiyası** ilə müəyyən edilmiş **hədəfi** olmalıdır. + +## Mühit + +Sadəlik üçün hesab edək ki, Peterin dünyası `en` x `hündürlük` ölçülü kvadrat bir lövhədir: + +![Piterin Mühiti](../images/environment.png) + +Bu lövhədəki hər bir xana aşağıdakılardan biri ola bilər: + +* **torpaq** – üzərində Piter və digər canlılar gəzə bilər. +* **su** – üstündə gəzə bilməyəcəksiniz. +* **ağac** və ya **ot** – istirahət edə biləcəyiniz yer. +* **alma** – Piterin özünü qidalandırmaq üçün tapmaqdan məmnun qalacağı bir şeyi təmsil edir. +* **canvar** – bu təhlükəlidir və ondan qaçınmaq lazımdır. + +Bu mühitlə işləmək üçün içərisində kodlar olan, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) adlı ayrıca Python modulu mövcuddur. Bu kodlar indiki konseptləri başa düşmək üçün o qədər də vacib olmadığından, həmin moduldan nümunə lövhəsini yaratmaq üçün istifadə edəcəyik (1. kod bloku): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Bu kod yuxarıdakı şəkil kimi ətraf mühitin görüntüsünü ekrana çap etməlidir. + +## Addımlar və Taktika + +Bizim nümunəmizdə Peterin məqsədi canavardan və digər maneələrdən qaçaraq bir alma tapmaq olardı. Bunu etmək üçün, o, alma tapana qədər gəzə bilər. + +Buna görə də, istənilən mövqedə o, yuxarı, aşağı, sola və sağa hərəkətlərindən birini seçə bilər. + +Biz bu hərəkətləri lüğət kimi müəyyənləşdirəcəyik və onları müvafiq koordinat dəyişiklikləri cütlərinə uyğunlaşdıracağıq. Məsələn, sağa hərəkət etmək (`R`) `(1,0)` cütünə uyğun olacaq. (2. kod bloku): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +Ümumiləşdirsək, bu ssenarinin strategiyası və hədəfi aşağıdakılardır: + +- **Agentimizin(Piter) strategiyası**, "**taktika**" ilə müəyyən edilir. Taktika hər hansı bir vəziyyətdə atılmalı olan addımı qaytaran funksiyadır. Bizim vəziyyətimizdə problemin vəziyyəti oyunçunun hazırkı mövqeyi də daxil olmaqla lövhə ilə təmsil olunur. + +- **Gücləndirici öyrənmənin məqsədi** problemi səmərəli şəkildə həll etməyə imkan verəcək yaxşı bir taktika öyrənməkdir. Amma indilik, başlanğıc olaraq **təsadüfi gediş** adlı ən sadə strategiyanı nəzərdən keçirək. + +## Təsadüfi gəzinti + +Gəlin əvvəlcə təsadüfi gediş strategiyasını həyata keçirərək problemimizi həll edək. Təsadüfi gedişlə almaya çatana qədər icazə verilən addımlar arasından növbəti addımımızı təsadüfi seçəcəyik (3. kod bloku). + +1. Aşağıdakı kodla təsadüfi gedişi həyata keçirin: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + `walk` müvafiq yolun uzunluğunu qaytarmalıdır. Amma təsadüfi olduğu üçün hər çağrılma zamanı fərqli uzunluq qaytara bilər. + +1. Gəzinti təcrübəsini bir neçə dəfə yerinə yetirin(məsələn, 100) və nəticədə əldə edilən statistikanı çap edin (4. kod bloku): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + Diqqət etsək görərik ki, yolun orta uzunluğu təxminən 30-40 addımdır, ən yaxın almaya qədər orta məsafənin 5-6 addım civarında olduğunu nəzərə alsaq, bu, kifayət qədər çoxdur. + + Siz həmçinin təsadüfi gəzinti zamanı Peterin hərəkətinin necə göründüyünü görə bilərsiniz: + + ![Piterin təsadüfi gəzintisi](../images/random_walk.gif) + +## Mükafat funksiyası + +Taktikamızı daha ağıllı etmək üçün hansı hərəkətlərin digərlərindən “daha ​​yaxşı” olduğunu başa düşməliyik. Bunun üçün hədəfimizi müəyyən etməliyik. + +Məqsəd **mükafat funksiyası** ilə müəyyən edilə bilər ki, bu da hər bir vəziyyət üçün müəyyən xal dəyərini qaytaracaq. Sayı nə qədər çox olarsa, mükafat funksiyası bir o qədər yaxşı olar.(5. kod bloku) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +Mükafat funksiyaları ilə bağlı maraqlı məqam ondan ibarətdir ki, əksər hallarda *bizə yalnız oyunun sonunda əhəmiyyətli bir mükafat verilir*. Bu o deməkdir ki, alqoritmimiz sonda müsbət mükafata səbəb olan “yaxşı” addımları birtəhər yadda saxlamalı və onların əhəmiyyətini artırmalıdır. Eyni qayda ilə, pis nəticələrə səbəb olan bütün hərəkətlərdən də çəkinməsi lazımdır. + +## Q-Öyrənməsi + +Burada müzakirə edəcəyimiz alqoritm **Q-Öyrənməsi** adlanır. Bu alqoritmdəki taktika **Q-Cədvəl** adlı funksiya(və ya data strukturu) ilə müəyyən edilir. O, verilmiş vəziyyət üçün hər bir addımın "yaxşılığını" qeyd edir. + +Bu məlumatı, cədvəl və ya çoxölçülü massiv kimi təqdim etmək əksər hallarda rahat olduğu üçün Q-Cədvəli deyə adlanır. Lövhəmizin `en` x `hündürlük` ölçüləri olduğundan, biz Q-Cədvəlini `en` x `hündürlük` x `len(actions)` formalı numpy massivdən istifadə etməklə təmsil edə bilərik: (6. kod bloku) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Diqqət edin ki, biz Q-Cədvəlinin bütün dəyərlərini eyni dəyərlə işə salırıq, indiki halda - 0,25. Hər bir vəziyyətdə bütün hərəkətlər eyni dərəcədə yaxşı olduğu üçün "təsadüfi gəzinti" taktikasına uyğundur. Lövhədə cədvəli vizuallaşdırmaq üçün Q-Cədvəlini `plot` funksiyasına ötürə bilərik: `m.plot(Q)`. + +![Piterin Mühiti](../images/env_init.png) + +Hər bir hüceyrənin mərkəzində üstünlük verilən hərəkət istiqamətini göstərən "ox" var. Bütün istiqamətlər bərabər olduğundan, nöqtə ilə göstərilmişdir. + +İndi biz, almaya gedən yolu daha tez tapmaq üçün simulyasiyanı işə salmalı, ətrafımızı araşdırmalı və Q-Cədvəl dəyərlərinin daha yaxşı paylanmasını öyrənməliyik. + +## Q-öyrənməsinin mahiyyəti: Bellman tənliyi + +Hərəkət etməyə başladıqdan sonra hər bir gedişin müvafiq mükafatı olacaq. Nəzəri olaraq ən yüksək ani mükafat əsasında növbəti addımı seçə bilərik. Bununla belə, əksər vəziyyətlərdə, atılan addım almaya çatmaq hədəfimizə nail olmayacaq və buna görə də hansı istiqamətin daha yaxşı olduğuna dərhal qərar verə bilməyəcəyik. + +> Unutmayın ki, vacib olan ani nəticə deyil, simulyasiyanın sonunda əldə edəcəyimiz son nəticədir. + +Bu gecikmiş mükafatı hesablamaq üçün problemi rekursiv şəkildə düşünməyə imkan verən **[dinamik proqramlaşdırma](https://en.wikipedia.org/wiki/Dynamic_programming)** prinsiplərindən istifadə etməliyik. + +Tutaq ki, biz indi *s* ​​vəziyyətindəyik və növbəti *s'* vəziyyətinə keçmək istəyirik. Bunu etməklə, biz mükafat funksiyası ilə müəyyən edilən ani mükafatı(*r(s,a)*), və gələcək mükafatı alacağıq. Q-Cədvəlimizin hər bir hərəkətin "cəlbediciliyini" düzgün əks etdirdiyini fərz etsək, *s'* vəziyyətində *Q(s',a')*-in maksimum dəyərinə uyğun gələn *a* addımını seçəcəyik. Beləliklə, *s* vəziyyətində əldə edə biləcəyimiz ən yaxşı gələcək mükafat `max`a'*Q(s',a')* kimi müəyyən ediləcək(burada maksimum *s'* vəziyyətindəki bütün mümkün *a'* addımlarının üzərində hesablanır). + +Bu da bizə, verilmiş *a* addımı üçün Q-Cədvəlinin *s* vəziyyətində dəyərinin hesablanması üçün olan **Bellman düsturunu** vermiş olur: + + + +Burada γ **endirim faktoru** adlanır və cari mükafata və ya bunun əksinə, gələcək mükafata nə dərəcədə üstünlük verməli olduğunuzu müəyyən edir. + +## Öyrənmə Alqoritmi + +Yuxarıdakı tənliyi nəzərə alaraq indi öyrənmə alqoritmimiz üçün psevdokod yaza bilərik: + +* Q-Cədvəli Q-ü bütün vəziyyət və gedişlər üçün bərabər ədədlərlə yaradın +* Öyrənmə dərəcəsini α ← 1 təyin edin +* Simulyasiyanı dəfələrlə təkrarlayın + 1. Təsadüfi mövqedən başlayın + 1. Təkrar edin + 1. *s* vəziyyətində *a* addımını seçin + 2. Yeni vəziyyətə keçərək gedişi yerinə yetirin *s'* + 3. Oyunun sonu vəziyyəti ilə qarşılaşsaq və ya ümumi mükafat çox kiçik olarsa - simulyasiyadan çıxın + 4. Yeni vəziyyətdə *r* mükafatını hesablayın + 5. Q-Funksiyasını Bellman tənliyinə uyğun yeniləyin: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ maxa'Q( s',a'))* + 6. *s* ← *s'* + 7. Ümumi mükafatı yeniləyin və α-nı azaldın. + +## İstifadə ilə Kəşf qarşı-qarşıya + +Yuxarıdakı alqoritmdə 2.1-ci addımda gedişi necə dəqiq seçməli olduğumuzu müəyyənləşdirməmişik. Addımı təsadüfi seçsək, ətrafı təsadüfi formada **tədqiq edəcəyimiz** üçün tez-tez ölmək, eləcə də normalda getmədiyimiz əraziləri araşdırmaq kimi ehtimallarımız var. Alternativ yanaşma isə artıq bildiyimiz Q-Cədvəl dəyərlərini **istifadə etmək** və bununla da, *s* vəziyyətində ən yaxşı hərəkəti(daha yüksək Q-Cədvəl dəyəri ilə) seçmək olardı. Amma, belə etmək digər vəziyyətləri araşdırmağımıza mane olacaq və çox güman ki optimal həlli tapa bilməyəcəyik. + +Beləliklə, ən yaxşı yanaşma kəşfiyyat və istifadə arasında balansı qorumaqdır. Bu, Q-Cədvəlindəki dəyərlərə mütənasib ehtimallarla *s* vəziyyətində hərəkəti seçməklə edilə bilər. Başlanğıcda Q-Cədvəl dəyərləri eyni olduqda bu, təsadüfi seçimə uyğun olacaq, lakin ətrafımız haqqında daha çox öyrəndikcə arabir agentə araşdırılmamış yolu seçməyə icazə verərkən optimal marşrutu izləmək ehtimalımız daha yüksək olacaq. + +## Python üzərindən icrası + +İndi biz öyrənmə alqoritmini həyata keçirməyə hazırıq. Bunu etməzdən əvvəl bizə Q-Cədvəlindəki ixtiyari ədədləri müvafiq hərəkətlər üçün ehtimallar vektoruna çevirəcək bəzi funksiyalar da lazımdır. + +1. `probs()` funksiyası yaradın: + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + ``` + + İlkin halda vektorun bütün komponentləri eyni olduqda 0-a bölünmədən yayınmaq üçün orijinal vektora bir neçə `eps` əlavə edirik. + +5000 təcrübə və ya **dövr** vasitəsilə öyrənmə alqoritmini işə salın: (8. kod bloku) + + ```python + for epoch in range(5000): + + # Pick initial point + m.random_start() + + # Start travelling + n=0 + cum_reward = 0 + while True: + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + dpos = actions[a] + m.move(dpos,check_correctness=False) # we allow player to move outside the board, which terminates episode + r = reward(m) + cum_reward += r + if r==end_reward or cum_reward < -1000: + lpath.append(n) + break + alpha = np.exp(-n / 10e5) + gamma = 0.5 + ai = action_idx[a] + Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max()) + n+=1 + ``` + +Bu alqoritmi yerinə yetirdikdən sonra Q-Cədvəli hər addımda müxtəlif hərəkətlərin cəlbediciliyini müəyyən edən dəyərlərlə yenilənməlidir. İstənilən hərəkət istiqamətini göstərəcək hər bir hüceyrədə bir vektor çəkərək Q-Cədvəlini vizuallaşdırmağa cəhd edə bilərik. Sadəlik üçün ox ucluğu əvəzinə kiçik bir dairə çəkirik. + + + +## Taktikanın yoxlanılması + +Q-Cədvəli hər bir vəziyyətdə hər bir addımın "cəlbediciliyini" saxladığı üçün dünyamızda səmərəli naviqasiyanı müəyyən etmək üçün ondan istifadə etmək olduqca asandır. Ən sadə halda, ən yüksək Q-Cədvəl dəyərinə uyğun hərəkəti seçə bilərik: (9. kod bloku) + +```python +def qpolicy_strict(m): + x,y = m.human + v = probs(Q[x,y]) + a = list(actions)[np.argmax(v)] + return a + +walk(m,qpolicy_strict) +``` + +> Yuxarıdakı kodu bir neçə dəfə sınasanız, onun bəzən "donduğunu" görə bilərsiniz. Belə olduqda onu dayandırmaq üçün noutbukda STOP düyməsini sıxmalısınız. Bu hal iki vəziyyətin optimal Q-Dəyəri baxımından bir-birinə "işarə etdiyi" zaman yarana bilər. Həmin durumda agentlər bu vəziyyətlər arasında qeyri-müəyyən müddətə qədər hərəkət etmiş olur. + +## 🚀 Məşğələ + +> **Tapşırıq 1:** Yolun maksimum uzunluğunu müəyyən sayda addımlarla (məsələn, 100) məhdudlaşdırmaq üçün `walk` funksiyasını dəyişdirin və yuxarıdakı kodun vaxtaşırı bu dəyəri qaytarmasına baxın. + +> **Tapşırıq 2:** `walk` funksiyasını elə dəyişdirin ki, o, əvvəllər olduğu yerlərə qayıtmasın. Belə etmək `walk`-un dövrə girməsinin qarşısını alsa da, agent yenə də qaça bilməyəcəyi yerdə "tələyə" düşə bilər. + +## Naviqasiya + +Daha yaxşı naviqasiya taktikası təlim zamanı istifadə etdiyimiz istismar və kəşfiyyatın birləşdirmiş olan versiyası olardı. Bu taktikada biz hər bir hərəkəti Q-Cədvəlindəki dəyərlərə mütənasib olaraq müəyyən bir ehtimalla seçəcəyik. Bu strategiya hələ də agentin artıq tədqiq etdiyi mövqeyə qayıtması ilə nəticələnə bilər, lakin, aşağıdakı koddan da göründüyü kimi bu sizə istədiyiniz məkana olan çox qısa orta yolu verir(unutmayın ki, `print_statistics` simulyasiyanı 100 dəfə həyata keçirir): (10. kod bloku) + +```python +def qpolicy(m): + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + return a + +print_statistics(qpolicy) +``` + +Bu kodu işlətdikdən sonra əvvəlkindən daha kiçik, 3-6 aralığında dəyişən orta yol uzunluğu əldə etməlisiniz. + +## Öyrənmə prosesinin tədqiqi + +Qeyd etdiyimiz kimi, təlim prosesi problem məkanının strukturu haqqında əldə edilmiş biliklərin tədqiqi və ümumi kəşfi arasındakı balansdır. Öyrənmənin nəticələrinin(agentə hədəfə olan qısa yolu tapmaqda kömək etmək qabiliyyəti) yaxşılaşdığını görmüş olsaq da, öyrənmə prosesi zamanı orta yol uzunluğunun necə davrandığını müşahidə etmək də bir o qədər maraqlı olardı: + + + +Öyrənilənləri belə ümumiləşdirmək olar: + +- **Orta yol uzunluğu artır**. Burada gördüyümüz odur ki, əvvəlcə orta yol uzunluğu artır. Bu, yəqin ki, ətraf mühit haqqında heç nə bilmədiyimiz zaman pis vəziyyətlərdə, suda və ya canavarda tələyə düşmək ehtimalımızla bağlıdır. Daha çox öyrəndikcə və bu biliklərdən istifadə etməyə başladıqda ətraf mühiti daha uzun müddət araşdıra bilərik. Bununla belə, almaların harada daha çox olduğunu hələ də bilmiş olmuruq. + +- **Daha çox öyrəndikcə yol uzunluğu azalır**. Kifayət qədər öyrəndikdən sonra agentin hədəfə çatması asanlaşır və yol uzunluğu azalmağa başlayır. Amma, biz hələ də kəşfiyyata açığıq, ona görə də biz tez-tez ən yaxşı yoldan uzaqlaşırıq və yeni variantları araşdıraraq yolu optimaldan daha uzun edirik. + +- **Uzunluğun kəskin artması**. Bu qrafikdə də müşahidə etdiyimiz odur ki, müəyyən bir nöqtədə uzunluq kəskin şəkildə artır. Bu, prosesin stoxastik xarakterini göstərir və biz nə vaxtsa Q-Cədvəl əmsallarını yeni dəyərlərlə əvəz etməklə onları "korlaya" bilərik. İdeal olaraq, bu, öyrənmə sürətini azaltmaqla minimuma endirilməlidir(məsələn, təlimin sonuna doğru biz Q-Cədvəl dəyərlərini yalnız kiçik bir dəyərlə tənzimləyirik). + +Ümumiyyətlə, yadda saxlamaq lazımdır ki, təlim prosesinin uğuru və keyfiyyəti öyrənmə sürəti, öyrənmə sürətinin azalması və endirim faktoru kimi parametrlərdən əhəmiyyətli dərəcədə asılıdır. Təlim zamanı optimallaşdırdığımız(məsələn, Q-Cədvəl əmsalları) **parametrlərdən** fərqləndirmək üçün onları tez-tez **hiperparametrlər** adlandırırlar. Ən yaxşı hiperparametr dəyərlərinin tapılması prosesi **hiperparametrlərin optimallaşdırılması** adlanır və bu ayrıca mövzu səviyyəsindədir. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/?loc=az) + +## Tapşırıq +[Daha Real Dünya](assignment.az.md) \ No newline at end of file diff --git a/8-Reinforcement/1-QLearning/translations/assignment.az.md b/8-Reinforcement/1-QLearning/translations/assignment.az.md new file mode 100644 index 0000000000..e3f08e35cf --- /dev/null +++ b/8-Reinforcement/1-QLearning/translations/assignment.az.md @@ -0,0 +1,27 @@ +# Daha Real Dünya + +Bizim vəziyyətimizdə Piter, demək olar ki, yorulmadan və ac qalmadan hərəkət edə bilirdi. Daha realist bir dünyada isə vaxt aşırı oturub dincəlməli, həm də qidalanmalı oluruq. Aşağıdakı qaydaları həyata keçirməklə dünyamızı daha real edək: + +1. Bir yerdən başqa yerə köçməklə Piter **enerjisini** itirir və bir qədər **yorğunluq** qazanır. +2. Piter alma yeməklə daha çox enerji qazana bilər. +3. Piter ağacın altında və ya çəmənlikdə dincəlməklə yorğunluqdan qurtula bilər (yəni ağac və ya ot olan bir xanaya getmək - yaşıl sahə) +4. Piter canavarı tapıb öldürməlidir +5. Canavarı öldürmək üçün Piterin müəyyən enerji və yorğunluq səviyyəsinə malik olması lazımdır, əks halda o, döyüşü uduzur. + +## Təlimatlar + +Həlliniz üçün başlanğıc nöqtəsi kimi orijinal [notebook.ipynb](../notebook.ipynb) notbukundan istifadə edin. + +Yuxarıdakı mükafat funksiyasını oyunun qaydalarına uyğun olaraq dəyişdirin. Oyunda qalib gəlmək üçün lazım olan ən yaxşı strategiyanı öyrənmək üçün isə gücləndirici öyrənmə alqoritmini işlədin və təsadüfi gedişin nəticələrini qazandığınız və itirdiyiniz oyunların sayına görə alqoritminizlə müqayisə edin. + +> **Qeyd**: Yeni dünyanızda insanın mövqeyindən əlavə yorğunluq və enerji səviyyələri də olduğuna görə vəziyyət daha mürəkkəbdir. Siz vəziyyəti bir qrup kimi təqdim etməyi seçə bilərsiniz(Board, enerji, yorğunluq) və ya vəziyyət üçün bir sinif yarada bilə(onu `Board`-dan da alt sinif olaraq yaratmağınız mümkündür) və ya [rlboard.py](../rlboard.py) içərisindəki orijinal `Board` sinfini dəyişdirə bilərsiniz. + +Həllinizdə, lütfən, kodu təsadüfi gediş strategiyasına cavab verəcək formada saxlayın və ən sonda alqoritminizin nəticələrini təsadüfi gedişlə müqayisə edin. + +> **Qeyd**: Onun işləməsi üçün hiperparametrləri, xüsusən də dövrlərin sayını tənzimləməlisiniz. Oyunun uğuru(canavarla mübarizə) nadir bir hadisə olduğundan daha uzun məşq vaxtı gözləmək olar. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Yeni dünya qaydalarının tərifi, Q-Öyrənməsi alqoritmi və bəzi mətn izahatları ilə notebook təqdim olunub. Q-Öyrənməsi təsadüfi gedişlə müqayisədə nəticələri əhəmiyyətli dərəcədə yaxşılaşdıra bilib. | Notbuk təqdim olunub, Q-Öyrənməsi həyata keçirilib və təsadüfi gedişlə müqayisədə nəticələri yaxşılaşdırsa, əhəmiyyətli dərəcədə deyil; və ya notbuk zəif sənədləşdirilib və kod yaxşı strukturlaşdırılmayıb. | Dünyanın qaydalarını yenidən müəyyən etmək üçün bəzi cəhdlər edilib, lakin Q-Öyrənməsi alqoritmi işləmir və ya mükafat funksiyası tam müəyyən edilməyib. | \ No newline at end of file diff --git a/8-Reinforcement/2-Gym/translations/README.az.md b/8-Reinforcement/2-Gym/translations/README.az.md new file mode 100644 index 0000000000..1032d9d5af --- /dev/null +++ b/8-Reinforcement/2-Gym/translations/README.az.md @@ -0,0 +1,343 @@ +# CartPole(Sürgülü Araba) Sürüşü + +Əvvəlki dərsdə həll etdiyimiz problem əslində real həyat ssenariləri üçün uyğun olmadığı üçün oyuncaq problem kimi görünə bilər. Amma bu belə deyil, çünki Şahmat və ya Go oynamaq kimi bir çox real dünya problemləri də bu ssenarini bölüşür. Onlar arasındakı oxşarlığın səbəbi bizdə də verilmiş qaydalar və **diskret vəziyyəti** göstərən lövhəmizin olmasıdır. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/47/?loc=az) + +## Giriş + +Bu dərsdə biz Q-Öyrənməsinin eyni prinsiplərini **davamlı vəziyyət** probleminə, yəni bir və ya bir neçə həqiqi ədədlə verilən vəziyyətə tətbiq edəcəyik. Aşağıdakı problemlə məşğul olacağıq: + +> **Problem**: Piter canavardan qaçmaq istəyirsə, daha sürətli hərəkət edə bilməlidir. Biz Piterin Q-Öyrənməsindən istifadə edərək konki sürməyi, xüsusən də tarazlığı saxlamağı necə öyrənə biləcəyini görəcəyik. + +![Böyük qaçış!](../images/escape.png) + +> Piter və dostları canavardan qaçmaq üçün yaradıcı olurlar! [Jen Looper](https://twitter.com/jenlooper) tərəfindən çəkilmiş şəkil + +Biz tarazlamanın **CartPole** problemi kimi tanınan sadələşdirilmiş versiyasından istifadə edəcəyik. CartPole dünyasında sola və ya sağa hərəkət edə bilən üfüqi sürgümüz var və məqsəd həmin sürgünün üstündəki şaquli dirəyi tarazlıqda saxlamaqdır. + +cartpole + +## İlkin şərtlər + +Bu dərsdə biz müxtəlif **mühitləri** simulyasiya etmək üçün **OpenAI Gym** adlı kitabxanadan istifadə edəcəyik. Siz bu dərsin kodunu öz kompüterinizdə(məsələn, Visual Studio Code-dan istifadə edərək) işlədə bilərsiniz. Amma nəzərə alın ki, simulyasiya yeni pəncərədə açılacaq. Kodu onlayn işlədərkən [burada](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) təsvir olunduğu kimi koda bəzi düzəlişlər etməli ola bilərsiniz. + +## OpenAI Gym + +Əvvəlki dərsdə oyunun qaydalarını və vəziyyəti özümüz yaratdığımız `Board` sinifi təyin edirdi. Burada isə biz balans dirəyinin arxasındakı fizikanı simulyasiya edəcək xüsusi **simulyasiya mühitindən** istifadə edəcəyik. Gücləndirici öyrənmə alqoritmlərini öyrətmək üçün ən məşhur simulyasiya mühitlərindən biri [OpenAI](https://openai.com/) tərəfindən idarə olunan [Gym](https://gym.openai.com/)-dir. Bu gym-dən istifadə etməklə biz cartpole simulyasiyasından Atari oyunlarına qədər fərqli **mühitlər** yarada bilərik. + +> **Qeyd**: OpenAI Gym-də mövcud olan digər mühitlərə [burada](https://gym.openai.com/envs/#classic_control) baxa bilərsiniz. + +Əvvəlcə gym-i quraşdıraq və tələb olunan kitabxanaları əlavə edək (1. kod bloku): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Tapşırıq - cartpole mühitini işə salın + +Kartpol balans problemi ilə işləmək üçün müvafiq mühiti işə salmalıyıq. Hər bir mühit aşağıdakılarla əlaqələndirilir: + +- **Müşahidə məkanı** mühitdən aldığımız məlumatların strukturunu müəyyən edir. Kartpol problemi üçün biz qütbün mövqeyini, sürəti və bəzi digər dəyərləri alırıq. + +- Mümkün hərəkətləri müəyyən edən **fəaliyyət sahəsi**. Bizim vəziyyətimizdə fəaliyyət sahəsi diskretdir və iki hərəkətdən ibarətdir - **sol** və **sağ**. (2. kod bloku) + +1. İlkin olaraq aşağıdakı kodu daxil edin: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Ətraf mühitin necə işlədiyini görmək üçün gəlin 100 addım üçün qısa bir simulyasiya keçirək. Hər addımda biz gediləcək gedişlərdən birini təqdim edirik - bu simulyasiyada biz sadəcə olaraq `action_space`-dən təsadüfi bir gediş seçirik. + +1. Aşağıdakı kodu icra edin və nəticəsini izləyin. + + ✅ Nəzərə alın ki, bu kodu lokalda icra etməyiniz daha məqsədəuyğundur! (3. kod bloku) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Bu şəkilə bənzər bir şey görməlisiniz: + + ![nataraz araba](../images/cartpole-nobalance.gif) + +1. Simulyasiya zamanı necə hərəkət edəcəyimizə qərar vermək üçün müşahidələr aparmalıyıq. Əslində `step` funksiyası bizə cari müşahidələri, mükafat funksiyasını və simulyasiyanı davam etdirməyin mənalı olub-olmadığını göstərən indiqatoru qaytarır: (4. kod bloku) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + Ekranda belə bir nəticə çap olunacaq: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + Simulyasiyanın hər addımında qaytarılan müşahidə vektoru aşağıdakı dəyərləri ehtiva edir: + - Arabanın pozisiyası + - Arabanın sürəti + - Dirəyin bucağı + - Dirəyin fırlanma dərəcəsi + +1. Həmin nömrələrin minimum və maksimum dəyərini əldə edin: (5. kod bloku) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Diqqət etsəniz, hər bir simulyasiya addımında mükafat dəyəri həmişə 1 olduğunu görə bilərsiniz. Bunun səbəbi odur ki, bizim məqsədimiz mümkün qədər uzun müddət sağ qalmaqdır. Başqa cürə ifadə etsək, dirəyi ən uzun müddətə şaquli vəziyyətdə saxlamaqdır. + + ✅ Əslində ardıcıl 100 sınaq üzərindən 195-lik orta mükafat əldə edə bilsək, CartPole simulyasiyası həll edilmiş sayılacaq. + +## Vəziyyətin diskretləşməsi + +Q-Öyrənməsində biz hər bir vəziyyətdə nə edəcəyimizi müəyyən edən Q-Cədvəli qurmalıyıq. Bunu edə bilmək üçün vəziyyətin **diskret** olması lazımdır, daha dəqiq desək, sonlu sayda diskret dəyərləri ehtiva etməlidir. Bu da o deməkdir ki, bizim hansısa formada müşahidələrimizi sonlu vəziyyətlər toplusuna uyğunlaşdıraraq **diskretləşdirməyə** ehtiyacımız var. + +Bunu edə biləcəyimiz bir neçə yol var: + +- **Hissələrə bölün**. Müəyyən bir dəyərin intervalını bilsək, bu intervalı bir neçə ** hissəyə** bölə və sonra həmin dəyəri onun aid olduğu hissənin nömrəsi ilə əvəz edə bilərik. Bunu numpy-ın [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html)(rəqəmsallaşdırmaq) metodundan istifadə etməklə edə bilərik. Vəziyyətin rəqəmsallaşdırma üçün seçdiyimiz hissələrin sayından asılı olacağından, onun ölçüsünü dəqiq biləcəyik. + +✅ Xətti interpolyasiyadan istifadə edərək dəyərləri sonlu intervala(məsələn, -20-dən 20-yə) yerləşdirə bilərik və sonra onları yuvarlaqlaşdırmaqla ədədləri tam ədədlərə çevirə bilərik. Belə etmək, xüsusən də giriş dəyərlərinin dəqiq diapazonlarını bilməmək bizə vəziyyətin ölçüsünə bir az daha az nəzarət imkanı verir. Məsələn, bizim vəziyyətimizdə 4 dəyərdən 2-in öz dəyərlərində yuxarı/aşağı sərhədləri olmadığı üçün bu, sonsuz sayda vəziyyətlə nəticələnə bilər. + +Nümunəmizdə ikinci yanaşma ilə gedəcəyik. Beləliklə müşahidə edəcəksiniz ki, qeyri-müəyyən yuxarı/aşağı sərhədlərə baxmayaraq bu dəyər nadir hallarda müəyyən sonlu intervallardan kənarda dəyərlər qəbul edir. Buna görə də ekstremal dəyərlərə malik vəziyyətlər çox nadir hallarda olacaq. + +1. Modelimizdən müşahidələri toplayacaq və 4 tam dəyərdən ibarət qrup çıxaracaq funksiya budur: (6. kod bloku) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Gəlin ayırdığımız hissələrdən istifadə edərək başqa diskretləşdirmə üsulunu da araşdıraq: (7. kod bloku) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. İndi qısa bir simulyasiya aparaq və həmin diskret mühit dəyərlərini müşahidə edək. Fərqin olub-olmadığını görmək üçün həm `discretize`, həm də `discretize_bins` seçimlərini sınayın. + + ✅ discretize_bins 0-a əsaslı hissənin nömrəsini qaytarır. Yəni, giriş dəyişəninin 0-a yaxın qiymətləri üçün o, intervalın(10) ortasındakı rəqəmi qaytarır. Diskretləşdirmədə biz çıxış dəyərlərinin diapazonuna əhəmiyyət vermədik, onların mənfi olmasına imkan verdik. Bununla da vəziyyət dəyərləri dəyişdirilmir və 0, 0-a uyğun olmuş olur.(8. kod bloku) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ Mühitin necə işlədiyini görmək istəyirsinizsə, env.render ilə başlayan sətri şərhdən çıxarın. Onu arxa planda daha sürətli icra etməyiniz də mümkündür. Q-Öyrənməsi prosesimiz zamanı bu "görünməz" icradan istifadə edəcəyik. + +## Q-Cədvəlinin strukturu + +Əvvəlki dərsimizdə vəziyyət 0-dan 8-ə qədər sadə ədədlər cütü olduğu üçün Q-Cədvəlini 8x8x2 formalı numpy tensoru ilə təmsil etmək rahat idi. Vəziyyət vektorumuzun ölçüsü məlum olduğu üçün hissələrin diskretləşdirilməsini tətbiq etsək, bu zaman eyni yanaşmadan istifadə edə və vəziyyəti 20x20x10x10x2 formalı massiv ilə təqdim edə bilərik(buradakı 2 fəaliyyət sahəsinin ölçüsüdür və ilk ölçülər müşahidə məkanındakı hər bir parametr üçün seçdiyimiz hissələrin sayına uyğundur). + +Lakin bəzən müşahidə məkanının dəqiq ölçüləri məlum olmur. `discretize` funksiyasında heç vaxt vəziyyətin bəzi orijinal dəyərlərin bağlı olmamasından dolayı müəyyən sərhədlər daxilində qalacağından əmin olmaya bilərik. Buna görə də bir qədər fərqli yanaşmadan istifadə edəcəyik və Q-Cədvəlini lüğətlə təmsil edəcəyik. + +1. Lüğət açarı kimi *(vəziyyət, fəaliyyət)* cütündən istifadə edin. Dəyər isə Q-Cədvəlinin giriş dəyərinə uyğun olacaq. (9. kod bloku) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Burada biz həmçinin bütün mümkün hərəkətlərə uyğun gələn verilmiş vəziyyət üçün Q-Cədvəl qiymətlərinin siyahısını qaytaran `qvalues()` funksiyasını təyin edirik. Giriş Q-Cədvəlində yoxdursa, biz standart olaraq 0-ı qaytaracağıq. + +## Q-Öyrənməsinə başlayaq + +Artıq Piterə tarazlığı öyrətməyə hazırıq! + +1. Əvvəlcə bəzi hiperparametrləri təyin edək: (10. kod bloku) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Burada `alfa` hər addımda Q-Cədvəlinin cari dəyərlərini nə dərəcədə tənzimləməli olduğumuzu müəyyən edən **öyrənmə dərəcəsidir**. Əvvəlki dərsdə biz 1 ilə başladıq, sonra isə təlim zamanı `alpha`-nı aşağı qiymətlərə endirdik. Bu nümunədə biz onu sadəlik üçün sabit saxlayacağıq və daha sonra siz `alpha` dəyərlərini tənzimləməklə təcrübələr apara biləcəksiniz. + + `gamma` **endirim faktorudur** və gələcək mükafatı cari mükafatdan nə dərəcədə daha prioritetləşdirməli olduğumuzu göstərir. + + `epsilon` **kəşfiyyat/istifadə faktorudur**. Bizim istifadədən daha çox kəşfiyyata və ya əksinə üstünlük verməli olduğumuzu müəyyən edir. Alqoritmimizdə halların `epsilon` faizində Q-Cədvəl qiymətlərinə uyğun növbəti hərəkəti seçəcəyik, qalan hallarda isə təsadüfi hərəkəti yerinə yetirəcəyik. Bu, axtarış məkanında əvvəllər heç görmədiyimiz sahələri araşdırmağımıza təkan verəcək. + + ✅ Balanslaşdırma baxımından - təsadüfi hərəkətin(kəşfiyyatın) seçilməsi yanlış istiqamətdə təsadüfi bir zərbə rolunu oynayacaq və birbaşa həmin "səhvlərdən" tarazlığı necə bərpa edəcəyini öyrənməli olacaq. + +### Alqoritmi təkmilləşdirin + +Biz həmçinin əvvəlki dərsdən olan alqoritmimizi iki formada təkmilləşdirə bilərik: + +- **Bir sıra simulyasiyalar üzrə orta məcmu mükafatını hesablayın**. Hər 5000 iterasiyada nə qədər irəlilədiyimizi ekrana çap edəcəyik və bu müddət ərzində ümumi mükafatımızın orta qiymətini çıxaracağıq. Bu o deməkdir ki, 195-dən çox bal toplasaq, tələb olunandan daha yüksək keyfiyyətlə problemi həll edilmiş hesab edə bilərik. + +- **Maksimum orta məcmu nəticəni hesablayın**. Bi` `Qmax` və həmin nəticəyə uyğun olan Q-Cədvəlini yadda saxlayacağıq. Təlimi icra edən zaman görəcəksiniz ki, bəzən orta məcmunun qiyməti aşağı düşməyə başlayır və biz Q-Cədvəlinin təlim zamanı müşahidə edilən ən yaxşı modelə uyğun olan dəyərlərini saxlamaq istəyirik. + +1. Sonrakı planlar üçün `rewards` vektorunda hər simulyasiyada bütün məcmu mükafatları toplayın. (11. kod bloku) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +Bu nəticələrdən aşağıdakı fərqləri görə bilərsən: + +- **Məqsədimizə yaxın**. Simulyasiyanın 100+ ardıcıl işləməsi ilə 195 məcmu mükafatı əldə etmək məqsədinə çatmaq üçün çox yaxınıq və ya həqiqətən buna nail ola bilərik! Kiçik nömrələr alsaq da, hələ də bilmirik, çünki ortalama 5000-dən çox icra həyata keçiririk və rəsmi meyarlarda yalnız 100 icra tələb olunur. + +- **Mükafat artmağa başlayır**. Bəzən mükafat düşməyə başlayır, yəni vəziyyəti daha da pis hala gətirənlərlə birlikdə Q-Cədvəlindəki öyrənilən dəyərləri "məhv edə" bilər. + +Təlimin inkişaf qrafikini qursaq, bu müşahidə daha aydın görünür. + +## Öyrədilmənin İnkişaf Qrafikinin qurulması + +Təlim zamanı, hər bir iterasiyada `rewards` vektoruna əlavə edilən məcmu mükafat qiymətlərini topladıq. Həmin qiymətləri iterasiya nömrəsinə qarşı formada qrafikini qurduğumuz zaman belə görünür: + +```python +plt.plot(rewards) +``` + +![emal olunmamış inkişaf](../images/train_progress_raw.png) + +Bu qrafikdən, bir şey demək mümkün deyil, çünki stoxastik Təlim prosesinin təbiətinə görə təlim sessiyalarının uzunluğu çox dəyişir. Bu qrafikin daha çox məna kəsb etməsi üçün **ortalama icranı**, məsələn, 100 təcrübə üzərindən `np.convolve` istifadə edərək hesablaya bilərik: (Kod Bloku 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![təlimin inkişafı](../images/train_progress_runav.png) + +## Dəyişkən hiperparameterlər + +Öyrənməyi daha sabit etmək üçün təlim zamanı bəzi hiperparametrlərimizi tənzimləmək fayda var. Xüsusilə: + +- **Öyrənmə dərəcəsi** `alpha` üçün, 1-ə yaxın dəyərlərdən başlaya və sonra azalda bilərik. Zamanla Q-Cədvəlində yaxşı ehtimal dəyərləri əldə edəcəyik. Bunun üçün onları ehtiyatla tənzimləməli və tamamilə yeni dəyərlərlə yazmamalıyıq. + +- **Epsilonu** artırmaq. Daha az kəşf, daha çox istifadə üçün `epsilon`-u yavaş-yavaş artırmaq istəyə bilərik. Ona görə də, `epsilon`-u aşağı dəyəri ilə başlamağımız və 1-ə qədər artırmağımız yaxşı olardı. + +> **Tapşırıq 1**: Hiperparametr dəyərləri ilə oynayın və daha yüksək məcmu mükafat əldə edə biləcəyinizə baxın. 195-dən yuxarı qiymət ala bilirsinizmi? + +> **Tapşırıq 2**: Problemi tam həll etmək üçün 100 ardıcıl icrada orta mükafat dəyərini 195 olaraq almalısınız. Təlim zamanı qiymətləri ölçün və problemi tam şəkildə həll etdiyinizə əmin olun! + +## İcra zamanı nəticəni görək + +Öyrədilmiş modelin necə davrandığını görmək maraqlı olardı. Simulyasiyanı işə salaq və Q-Cədvəldəki ehtimal paylamasına görə təlim, nümunə götürmə zamanı isə etdiyimiz fəaliyyət seçmə strategiyasını izləyək: (Kod bloku 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +Buna bənzər bir şey görməlisən: + +![tarazlanmış cartpole](../images/cartpole-balance.gif) + +--- + +## 🚀 Məşğələ + +> **Tapşırıq 3**: Burada biz ən yaxşısı ola bilməyəcək Q-Cədvəlinin son versiyasını istifadə edirdik. Xatırlayırsınızsa, ən yaxşı Q-Cədvəlini `Qbest` dəyişənində saxlamışıq! `Qbest`-i `Q`-ə kopyalayaraq ən optimal Q-Cədvəllə eyni nümunəni sınaqdan keçirib fərqi izləyək. + +> **Tapşırıq 4**: Burada hər addımda ən yaxşı hərəkəti seçmirdik. Bunun əksinə müvafiq ehtimal paylanması ilə nümunə götürürdük. Ən yüksək Q-Cədvəl dəyəri olan ən yaxşı hərəkəti həmişə seçmək daha düzgün olmazdımı? Bu, Q-Cədvəlinin dəyərinə uyğun hərəkət nömrəsini tapmaq üçün `np.argmax` funksiyasından istifadə etməklə edilə bilər. Həmin strategiyanı icra edin və tarazlanmanın yaxşılaşdığını izləyin. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/uiz/48/?loc=az) + +## Tapşırıq +[Dağ maşınını öyrədin](assignment.az.md) + +## Nəticə + +Artıq oyunun istənilən vəziyyətini müəyyənləşdirən və axtarış sahəsini ağıllı şəkildə araşdıran bir mükafat funksiyasını təmin etməklə yaxşı nəticələr əldə edəcək agentlər yetişdirməyi öyrəndik. Q-Öyrənməsi alqoritmini diskret hərəkətlərlə diskret və davamlı mühit hallarında uğurla tətbiq etmiş olduq. + +It's important to also study situations where action state is also continuous, and when observation space is much more complex, such as the image from the Atari game screen. + +Atari oyun ekranından görüntü kimi davamlı hərəkdə olan və daha mürəkkəb müşahidə sahələrini də öyrənmək vacibdir. Bu problemlərdə tez-tez yaxşı nəticələr əldə etmək üçün neyron şəbəkələri kimi daha güclü maşın öyrənmə texnikasından istifadə etməliyik. Bu cür mürəkkəb mövzular qarşıdakı daha mürəkkəb AI kursumuzun mövzusudur. \ No newline at end of file diff --git a/8-Reinforcement/2-Gym/translations/assignment.az.md b/8-Reinforcement/2-Gym/translations/assignment.az.md new file mode 100644 index 0000000000..f4a4899b71 --- /dev/null +++ b/8-Reinforcement/2-Gym/translations/assignment.az.md @@ -0,0 +1,45 @@ +# Dağ maşınını öyrədin + +[Openai Gym](http://gym.openai.com),elə hazırlanıb ki, bütün mühitlər eyni API ilə bizi təmin edir - məsələn, `reset`, `step` və `render` kimi eyni metodlar, **fəaliyyət sahəsi** və **müşahidə sahəsinin** eyni abstrakt formaları. Beləliklə minimal kod dəyişiklikləri ilə eyni gücləndirmə öyrənməsi alqoritmlərini fərqli mühitlərə uyğunlaşdırmaq mümkündür. + +## Dağ maşını mühiti + +[Dağ maşını mühiti](https://gym.openai.com/envs/mountaincar-v0/) bir dərədə ilişib qalmış bir avtomobilin olduğu mühitdir: + + + +Məqsəd hər addımda aşağıdakı hərəkətlərdən birini icra edərək vadidən çıxmaq və bayrağı tutmaqdır: + +| Dəyər | Mənası | +| ----- | ------------------------- | +| 0 | Sola doğru sürəti artırın | +| 1 | Sürətlənməyin | +| 2 | Sağa doğru sürəti artırın | + +Bu problemin əsas hiyləsi avtomobilin mühərrikinin bir təkanda təpəni aşmaq üçün kifayət qədər güclü olmamasıdır. Buna görə də müvəffəq olmağın yeganə yolu təcil yaratmaq üçün geri və irəli sürməkdir. + +Müşahidə məkanı yalnız iki dəyərdən ibarətdir: + +| Nömrə | Müşahidə | Min | Max | +| ----- | --------------------| ------| ---- | +| 0 | Avtomobilin mövqeyi | -1.2 | 0.6 | +| 1 | Avtomobilin sürəti | -0.07 | 0.07 | + +Dağ avtomobili üçün mükafat sistemi olduqca çətindir: + + * Agentə dağın üstündəki bayrağa(mövqeyi = 0.5) çatdığı təqdirdə 0 mükafat verilir. + * Agentin mövqeyi 0,5-dən az olduqda -1 ilə mükafatlandırılır. + +Gedişat avtomobil mövqeyi 0,5-dən çox olduqda və ya icra uzunluğu 200-dən çox olarsa, sona çatır. + +## Təlimat + +Dağ avtomobil problemini həll etmək üçün gücləndirmə öyrənməsi alqoritmimizi indiki problemə uyğunlaşdırın. Mövcud [notebook.ipynb](../notebook.ipynb) kodu ilə başlayın, cari mühiti yeni mühitlə əvəz edin, vəziyyətin diskretləşdirilməsi funksiyalarını dəyişdirin və minimal kod dəyişiklikləri ilə təlim keçmək üçün lazım olan alqoritmi qurmağa çalışın. Hiperparameterləri tənzimləməklə nəticəni optimallaşdırın. + +> **Qeyd**: Alqoritmin yaxınlaşmasını təmin etmək üçün hiperparametrləri sazlamaq lazım ola bilər. + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Q-Learning alqoritmi minimal kod dəyişiklikləri ilə CartPole nümunəsi uğurla uyğunlaşdırılıb və 200-dən az addımla bayrağın tutulması problemi həll edilib. | Q-Öyrənməsi alqoritmi internetdən götürülüb, amma yaxşı sənədləşdirilib; və ya mövcud alqoritm qəbul edilmişdir, amma istənilən nəticələr əldə edilməmişdir. | Tələbə heç bir alqoritmi uğurla uyğunlaşdıra bilməyib, amma həlli istiqamətində əhəmiyyətli addımlar atıb(vəziyyətin diskretləşməsini tətbiq edib, Q-Cədvəl data strukturunu qurub və s.) | \ No newline at end of file diff --git a/8-Reinforcement/translations/README.az.md b/8-Reinforcement/translations/README.az.md new file mode 100644 index 0000000000..63d6cf7aff --- /dev/null +++ b/8-Reinforcement/translations/README.az.md @@ -0,0 +1,53 @@ +# Gücləndirici öyrənməyə giriş + +Gücləndirici öyrənmə, RL(Reinforcement Learning), nəzarətli və nəzarətsiz öyrənmənin yanında əsas maşın öyrənmə paradiqmalarından biri kimi qeyd olunur. RL qərarlar haqqındadır: düzgün qərarları vermək və ya ən azı onlardan öyrənmək. + +Təsəvvür edin ki, birja kimi simulyasiya edilmiş bir mühitiniz var. Müəyyən bir tənzimləmə tətbiq etsəniz nə baş verər? Bunun müsbət və ya mənfi təsirləri varmı? Mənfi bir şey baş verərsə, bu _mənfi gücləndirməni_ götürməli, ondan dərs almalı və kursu dəyişməlisiniz. Əgər bu müsbət nəticədirsə, siz həmin _müsbət gücləndirməyə_ əsaslanmalısınız. + +![Piter və canavar](../images/peter.png) + +> Piter və onun dostları ac ​​canavardan qaçmalıdırlar! Şəkili [Jen Looper](https://twitter.com/jenlooper) çəkmişdir. + +## Regional mövzu: Piter və Qurd (Rusiya) + +[Piter və Qurd](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) — rus bəstəkarı [Sergei Prokofyev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) tərəfindən yazılmış musiqili nağıldır. O, canavarı qovmaq üçün cəsarətlə evindən çıxaraq meşənin təmizlənməsinə gedən gənc pioner Piter haqqındadır. Bu bölmədə biz Piterə kömək edəcək maşın öyrənmə alqoritmlərini öyrədəcəyik: + +- Ətrafı **araşdırın** və optimal naviqasiya xəritəsi qurun +- Daha sürətli hərəkət etmək üçün skeytborddan necə istifadə etməyi və onun üzərində tarazlığı qorumağı **öyrənin**. + +[![Piter və Qurd](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Prokofyevin Piter və Qurd musiqisini dinləmək üçün yuxarıdakı şəkilə klikləyin + +## Gücləndirici öyrənmə + +Əvvəlki bölmələrdə siz maşın öyrənmə problemlərinin iki nümunəsini görmüsünüz: + +- **Nəzarət edilən** öyrənmədə həll etmək istədiyimiz problemə nümunə həllər təklif edən verilənlər bazamız var idi. [Qruplaşdırma](../../4-Classification/translations/README.az.md) və [reqressiya](../../2-Regression/translations/README.az.md) nəzarət edilən öyrənmə tapşırıqlarıdır. +- **Nəzarətsiz** öyrənmədə isə bizim etiketli təlim datalarımız yoxdur. Nəzarətsiz öyrənmənin əsas nümunəsi [Klasterləşdirmə](../../5-Clustering/translations/README.az.md)-dir. + +Bu bölmədə biz sizi etiketli təlim məlumatı tələb etməyən yeni tip öyrənmə problemi ilə tanış edəcəyik. Belə problemlərin bir neçə növü var: + +- **[Yarı nəzarətli öyrənmədə](https://wikipedia.org/wiki/Semi-supervised_learning)** modeli əvvəlcədən öyrətmək üçün istifadə edilə bilən çoxlu etiketlənməmiş datamız var. +- **[Gücləndirici öyrənmədə](https://wikipedia.org/wiki/Reinforcement_learning)** isə agent simulyasiya edilmiş mühitdə eksperimentlər həyata keçirərək özünü necə aparmağı öyrənir. + +### Nümunə - kompüter oyunu + +Tutaq ki, siz kompüterə şahmat və ya [Super Mario](https://wikipedia.org/wiki/Super_Mario) kimi oyun oynamağı öyrətmək istəyirsiniz. Kompüterin oyun oynaması üçün ona oyun vəziyyətlərinin hər birində hansı hərəkəti edəcəyini proqnozlaşdırmaq lazımdır. Bu qruplaşdırma problemi kimi görünsə də, belə deyil - çünki bizdə vəziyyətlər və müvafiq hərəkətlər olan verilənlər bazası yoxdur. Mövcud şahmat matçları və ya Super Mario oynayan oyunçuların qeydə alınması kimi bəzi məlumatlarımız olsa da, çox güman ki, bu məlumatlar kifayət qədər çox sayda mümkün vəziyyəti əhatə etməyəcək. + +Mövcud oyun datalarını axtarmaq əvəzinə, **Gücləndirici Öyrənmə** (RL) *kompüteri dəfələrlə oynatmaq* və nəticəni müşahidə etmək ideyasına əsaslanır. Beləliklə, Gücləndirici Öyrənmə tətbiq etmək üçün bizə iki şey lazımdır: + +- **Bir mühit** və **bir simulyator** bizə dəfələrlə oyun oynamağa imkan verir. Bu simulyator bütün oyun qaydalarını, eləcə də mümkün vəziyyətləri və hərəkətləri müəyyən edəcək. + +- **Mükafat funksiyası**, bu bizə hər bir hərəkət və ya oyun zamanı nə qədər yaxşı etdiyimizi bildirir. + +Maşın öyrənmənin digər növləri ilə RL arasındakı əsas fərq ondan ibarətdir ki, RL-də biz adətən oyunu bitirənə qədər qalib və ya məğlub olduğumuzu bilmirik. Buna görə də hansısa bir hərəkətin yaxşı olub olmadığını deyə bilmərik. Çünki yalnız oyunun sonunda mükafat alırıq və bizim məqsədimiz qeyri-müəyyən şəraitdə modeli öyrətməyə imkan verəcək alqoritmləri qurmaqdır. Biz **Q-öyrənməsi** adlı bir RL alqoritmini öyrənəcəyik. + +## Dərslər + +1. [Gücləndirici öyrənmə və Q-Öyrənməsinə Giriş](../1-QLearning/translations/README.az.md) +2. [Gym simulyasiya mühitindən istifadə](../2-Gym/translations/README.az.md) + +## Tövhə verənlər + +"Gücləndirici öyrənməyə giriş" [Dmitri Soşnikov](http://soshnikov.com) tərəfindən ♥️ ilə yazılmışdır. diff --git a/9-Real-World/1-Applications/translations/README.az.md b/9-Real-World/1-Applications/translations/README.az.md new file mode 100644 index 0000000000..1605715a12 --- /dev/null +++ b/9-Real-World/1-Applications/translations/README.az.md @@ -0,0 +1,146 @@ +# Postskript: Real həyatda maşın öyrənməsi + +![Maşın öyrənməsinin real həyatda tətbiqinin ümumiləşdirilmiş eskizi](../../../sketchnotes/ml-realworld.png) +> [Tomomi Imura](https://www.twitter.com/girlie_mac) tərəfindən eskiz + +Bu kurikulumda, sən öyrətmə datasının bir neçə hazırlama üsulunu və maşın öyrənməsi modelini qurmağı öyrənmisən. Sən bir neçə klassik reqressiya, klasterləşdirmə, qruplaşdırma, təbii dil emalı və zaman seriyası modelləri qurmusan. Təbriklər! İndi sənə maraqlı gələ bilər ki, bu modellərin hamısı real həyatda necə tətbiq olunurlar? + +Sənayedə daha çox maraq AI, dərin öyrənmə ətrafında toplansa da, hələ də klassik maşın öyrənmə modelləri üçün çoxlu dəyərli tətbiqlər var. Sən bu tətbiqlərin hətta bəzilərini bugün istifadə etmisən! Bu dərsdə sən 8 fərqli sənayədə və ixtisaslaşmış sahədə bu modelləri istifadə etməklə tətbiqləri istifadəçilərə necə daha məhsuldar, etibarlı, ağıllı və dəyərli edildiyini kəşf edəcəksən. + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/?loc=az) + +## 💰 Maliyyə + +Maliyyə sektoru maşın öyrənməsi üçün çox fürsətlər verir. Bu sahədəki çox problemlər özləri modelləşdirilib ML vasitəsilə həll olunmağa meyillidir. + +### Bank kartlarında fırıldaqçılığıq təyini + +Biz əvvəlki dərslərdə [k-ortalama klasterləşməsi](../../../5-Clustering/2-K-Means/translations/README.az.md) barədə öyrənmişik, bəs bunu bank kartı fırıldaqçılığı problemini həll etmək üçün necə istifadə edə bilərik? + +K-ortalama klasterləşməsi bank kartı fırıldaqçılığını təyin edilməsi üçün **kənarlaşmanın təyini** adlanan texnikanın istifadəsində çox yararlı olur. Kənarlaşanlar və ya müşahidə olunan data qrupundan fərqlənənlər bizə bank kartının normal şəraitdə istifadə olunduğunu və ya şübhəli bir əməliyyatın icra olunduğunu deyə bilir. Aşağıdakı məqalədə göstərildiyi kimi siz bank kartı datalarını k-ortalama klasterləşməsi alqoritmi ilə sıralaya bilər və hər əməliyyatı bir klasterə aid edərək onun nə qədər kənarlaşdığını təyin edə bilərsiniz. Sonra siz fırıldaqçılığa yaxın ən riskli klasterləri normal əməliyyatlarla müqayisədə fərqləndirə bilərsiniz. +[İstinad](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Sərvətin idarə olunması + +Sərvətin idarə edilməsində fərd və ya şirkət müştərilərinin adından sərmayələrin icrasında cavabdehdirlər. Onların işi şərvəti qorumaq və uzun müddətdə inkişaf etdirməkdir, buna görə də onlara sərmayəni düzgün seçərək məhsuldar nəticə göstərmək çox vacibdir. + +Müəyyən bir sərmayənin necə işlədiyini ölçməyin yollarından biri statistik reqressiyadır. [Xətti reqressiya](../../../2-Regression/1-Tools/translations/README.az.md) fondun başqa etalonlarla müqayisədə necə işlədiyini başa düşmək üçün dəyərli bir alətdir. Biz həmçinin reqressiyanın nəticəsinin statistik olaraq nə qədər təsirli olduğunu və ya müştərinin sərmayəsinə nə qədər təsir edə biləcəyini öyrənə bilərik. Analizini əlavə olaraq risk faktorlarının nəzərə alan müxtəlif reqressiya üsulları ilə genişləndirə bilərsən. Misal üçün bunun müəyyən fonda necə təsir edə biləcəyini və onu necə ölçə biləcəyini aşağıdakı məqalədən öyrənə bilərsən. +[İstinad](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Təhsil + +Təhsil sektoru da ML tətbiq oluna biləcək çox maraqlı sahədir. Burada imtahan və ya esselərdə fırıldağın, hansısa tərəfin şüurlu və ya şüursuz tutulmasını təyin olunması kimi maraqlı problemlər var. + +### Tələbələrin davranışının proqnozlaşdırılması + +[Coursera](https://coursera.com) online açıq kurs təminatçısıdır və onların çoxlu mühəndislik qərarlarının müzakirə olunduğu möhtəşəm bloqları var. Bir araşdırmada onlar aşağı NPS (Başqasına Tövsiyyə Dərəcəsi) ilə kursun baxılma və ya yarımçıq qoyulma halları arasında əlaqəni öyrənmək üçün reqressiya xətti çəkərək öyrənmək istəyiblər. +[İstinad](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Tərəf tutmanın qarşısının alınması + +[Grammarly](https://grammarly.com) yazmaq üçün köməkçidir və öz məhsullarında xüsusi [təbii dil emalı sistemi](../../../6-NLP/translations/README.az.md) istifadə edərək yazı və qrammatika xətalarını tapır. Onlar texnoloji bloqlarında bizim [ədalətli sistemlərə giriş dərsimizdə](../../../1-Introduction/3-fairness/translations/README.az.md) öyrəndiyimiz kimi genderlər arasında tərəf tutmanın maşın öyrənməsi ilə necə həll etdikləri ilə bağlı maraqlı bir araşdırma paylaşıblar. +[İstinad](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Pərakəndə satış + +Pərakəndə satış sektoru yaxşı müştəri təcrübəsi yaratmaqdan inventarda məhsulların optimal sayda stoklanmasına kimi ML istifadəsindən çox faydalar götürür. + +### Müştəri təcrübəsini fərdiləşdirmək + +Ev əşyaları və mebellər satışı edən Wayfair şirkəsi müştərilərinin zövqlərinə və ehtiyaclarına uyğun doğru məhsulu tapmaqda kömək edir. Bu məqalədə şirkətin mühəndisləri ML və NPL istifadə etməklə "müştərilərə doğru nəticələrin çıxardılması" necə etdiklərini paylaşıblar. Onlar məlumatın filtrlənməsi, qruplaşdırılması, məhsul və fikrin müştəri rəylərindən təyin olunmasını istifadə edərək sorğuların məqsədini təyin edən mühərrik (Query Intent Engine) hazırlayıblar. Bu NLP-nin onlayn pərakəndə sahəsində istifadə olunan klassik tətbiqidir. +[İstinad](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### İnventarın idarə edilməsi + +İstehlakçılara geyin qutularının çatdırılması ilə məşğul olan [StitchFix](https://stitchfix.com) kimi innovativ və çevik şirkətlər məhsul tövsiyyəsi və inventarın idarə olunmasında ML-dən çox asılıdırlar. Onların moda komandaları ticarət komandaları ilə birlikdə çalışaraq belə bir nəticəyə gəliblər: "bizim data mühəndislərimizdən biri paltarlar üzərində genetika algoritmi tətbiq edərək indiyə kimi mövcud olmayan və uğurlu olacaq paltar nümunələri proqnozlaşdırmışdır. Biz bunu ticarət komandasına gətirdik və onu artıq alət kimi işlərində istifadə edirlər." +[İstinad](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Səhiyyə + +Səhiyyə sektorunda araşdırmaları optimallaşdırılması, xəstələrin yenidən qəbulu zamanı logistika problemlərini həll etməyə və ya xəstəliyin yayılmasının qarşısını almaq üçün ML-dən istifadə oluna bilər. + +### Tibbi təcrübələrin idarə edilməsi + +Dərman hazırlayanlar üçün tibbi təcrübələrdəki zəhərlənmə halları ən narahat olduqları məqamdır. Nə qədər zəhərlənmə qəbul oluna bilər? Bu araşdırmada tibbi təcrübələrin nəticələrinin proqnozlaşdırılması üçün yeni üsulların yaradılmasında müxtəlif üsullar analiz olunub. Onlar xüsusi olaraq təsadüfi parametrlər istifadə edərək [qruplaşdırıcının](../../../4-Classification/translations/README.az.md) köməyi ilə dərman qruplarını ayırd edə biliblər. +[İstinad](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Xəstəxanada yenidən qəbulunun idarə edilməsi + +Xəstəxana xidmədi çox bahalıdır, xüsusən də xəstələrin yenidən yerləşdirilməsi lazım olduqda. Bu araşdırmada ML [klasterləşdirmə](../../../5-Clustering/translations/README.az.md) alqoritmləri istifadə etməklə yenidən yerləşdirilməsi lazım olacaq xəstələri təxmin edən şirkət haqqında danışılır. Bu klasterlər "yenidən yerləşdirilməsi lazım olan qruplarda oxşar xüsusiyyətləri" analiz etməkdə kömək edir. +[İstinad](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Xəstəliklərin idarə olunması + +Ən son pandemiya bizə maşın öyrənməsinin köməyi ilə xəstəliyin yayılmasının qarşısı alınması üsullarını aydınlatdı. Bu məqalədə ARIMA-nın, logistika əyrilərinin, xətti reqressiyanın və SARIMA-nın istifadəsini görəcəksən. "Bu araşdırma virusun yayılma sürətini hesablamağa, ölüm və sağalma ehtimallarını proqnozlaşdrmağa çalışıb bizim gələcəyə daha yaxşı hazırlıqlı olmağa və sağ qalmağa kömək edəcək." +[İstinad](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ekologiya və yaşıl texnologiya + +Təbiət və ekologiya heyvanlar və təbiət arasında əlaqədə olan bir çox həssas sistemlərdən ibarətdir və daim diqqəti özünə cəlb edir. Bu sistemləri dəqiq ölçə bilmək çox vacibdir və meşə yanğınları və ya heyvanların artımında ani dəyişikləri analiz edib edib müvafiq addımlar atılmalıdır. + +### Meşələrin idarə edilməsi + +Əvvəlki dərslərdə [Gücləndirici öyrənmə (RL)](../../../8-Reinforcement/translations/README.az.md) haqqında öyrənmisən. Bu üsul təbiətdəki hərəkətləri proqnozlaşdırmaqda çox faydalıdır. Xüsusi ilə meşə yanğınları və ziyanverici həşaratlar kimi ekoloji problemləri izləməkdə istifadə oluna bilinir. Kanadada bir qrup tədqiqatçı Gücləndirici öyrənmə üsulu tətbiq edərək peyk şəkillərindən meşə yanğınlarının dinamika modelini qurublar. Onlar innovativ "məkanda yayılma prosesini(SSP)" istifadə etməklə meşə yanğınını "müstəvi üzərində istənilən mövqedə olan agentə" bənzədiblər. "Yanğının olduğu məkandan verilən zamandan sonra edə biləcəyi hərəkətlər yalnız şimala, cənuba, şərqə və qərbə yayılmaq və ya heç yayılmamaqdır. + +Bu yanaşma sadə RL tətbiqini yanğının ani yayılmasının dinamikasına daha uyğun olan məşhur Markov Qərarvermə Prosesinə (MDP) çevirir." Aşağıdakı linkdən klassik alqoritmlərin bu qrupa aid problemlərdə necə istifadə olunması barədə oxuya bilərsiniz. +[İstinad](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Heyvanların hərəkətini hiss etmək + +Dərin öyrənmə heyvanların hərəkətinin vizual olaraq izlənməsində inqilab yaratsa da (qütb ayısını izləmək üçün proqramı [burada](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) hazırlaya bilərsən), klassik ML-in bu tapşırıqda hələ də yeri var. + +Ferma heyvanlarının hərəkətlərini izləyən sensorlar və IoT (Əşyaların interneti) cihazları vizual emal üçün istifadə olunur, lakin datanın əvvəldən emal olunması üçün sadə ML texnikalarını istifadə etmək daha faydalıdır. Misal üçün bu məqalədə qoyunların duruşları müxtəlif qruplaşdırıcı alqoritmlərlə müşahidə və analiz olunur. 335-ci səhifədə ROC əyrisini tanıyacaqsan. +[İstinat](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Enerjinin idarə edilməsi + +[Zaman seriyasının proqnoqlaşdırılması](../../../7-TimeSeries/translations/README.az.md) dərsimizdə tələb və təklifi başa düşərək kəndə gəlir gətirəcək ağıllı parklama sayğacı konseptini qurmuşduq. Bu məqalədə ağıllı sayğaclar istifadə edərək klasterləşmə, reqressiya və zaman seriyasının proqnozlaşdırılmasının birgə tətbiqi ilə gələcəkdə İrlandiyada enerji istehlakını proqnozlaşdırılmasına necə kömək etdiyindən danışılır. +[İstinad](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Sığorta + +Sığorta sektoru ML istifadə etməklə sərfəli maliyyə və risk modellərinin qurulmasının tətbiq olunduğu başqa bir sahədir. + +### Dəyişkənliyin idarə edilməsi + +Həyat sığortası təklif edən şirkət Metlife öz maliyyə modellərində dəyişkənlik risklərinin qarşısını almaq üçün istifadə etdiyi üsullardan bəhs etməyə dəyər. Bu məqalədə ikili və çoxsaylı qruplaşdırıcı vizuallardan istifadə olunduğunu görəcəksən. Sən həmçinin proqnozlaşdırma qrafiklərini də kəşf edəcəksən. +[İstinad](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 İncəsənət, Mədəniyyət, və Ədəbiyyat + +İncəsənət sahəsində, misal olaraq jurnalistikada çoxlu sayda maraqlı problemlər var. Saxta xəbərlərin insanların fikirlərinə təsir etməsi, hətta demokratiyanın pozulmasına yol açması çox böyük bir problemdir. Muzeylər də həmçinin ML istifadə etməklə artefaktlar arasında əlaqələr tapmaqdan resurs planlamasına kimi çox şeydə faydalana bilirlər. + +### Saxta xəbərlərin aşkarlanması + +İndiki mediyada saxta xəbərlərin aşkarlanması siçan və pişik oynununa çevrilib. Bu məqalədə tədqiqatçılar yoxlamalarına əsasən bir neçə fərqli ML texnikalarını birləşdirərək ən yaxşı modeli yaratdıqlarını düşünürlər: "Bu sistem təbii dil emalı istifadə edərək datadan faktları çıxarır və həmin faktlar Naive Bayes, Dəstək Vektor Maşını (SVM), Random Forest (RF), Stokastik Qradient Enişi (SGD) və Logistik Reqressiyası (LR) kimi maşın öyrənməsi alqoritmlərində öyrətmə datası kimi istifadə olunur". +[İstinad](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Bu məqalə müxtəlif ML sahələrini birləşdirməklə saxta xəbərlərin yayılmasını və həqiqi ziyan verməsini dayandırmaqda kömək edən maraqlı nəticələrin əldə olunduğunu göstərir, misal üçün COVID müalicəsi ilə bağlı xəbərlərin yayılmasında təkan insanlar arasında izdihama və zorakılığa səbəb ola bilər. + +### Muzeylərdə ML + +Muzeylər AI inqilabı ilə tarixi zirvəyə qalxıb, belə ki kolleksiyaların rəqəmsallaşdırılması, kataloqlaşdırılması və artefaktların arasında əlaqələrin tapılması texnologiyanın köməyi ilə çox asanlaşıb. [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources) kimi layihələr Vatikan Arxivləri kimi əlçatmaz kolleksiyaların sirrlərini açmaqda kömək ediblər. Muzeylər ML modelləridən həmçinin biznes tərəfdən də faydalanırlar. + +Misal üçün Çikaqo İncəsənət İnstitutu modellər qurmaqla onun proqnozları əsasında tamaşaçıların marağına və iştirakına əsaslanan sərgilər hazırlayırlar. Burada əsas məqsəd muzeyi ziyarət edən qonaqlara hər dəfə fərdiləşdirilmiş və optimallaşdırılmış təcrübə yaşatmaqdır. "İncəsənət İnstitutunun böyük vitse prezidenti Andryu Siminkin sözlərinə görə 2017-ci ildə model dəqiqlikdə 1 faiz xəta ilə iştirak və satışları proqnozlaşdırmışdır". +[İstinad](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Marketinq + +### Müştəri seqmentasiyası + +Marketingin ən effektiv strategiyası müştəriləri fərqli qruplar halında hədəfləməkdir. Bu məqalədə klasterləşmə alqoritmi tətbiq olunmaqla fərqləndirilən marketinqə necə dəstək olunması barədə danışılır. Fərqləndirilən marketinq şirlətlərə brendlərini daha yaxşı tanıtmağa, daha çox müştəriyə çıxmağa və daha çox pul qazanmağa kömək edir. +[İstinad](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Məşğələ + +Bu kurikulumda öyrəndiyin texnikaların istifadə oluna biləcəyi başqa bir sahəni tap və ML-in necə istifadə olunmasını araşdır. + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Wayfair data elmi komandasının öz şirkətlərində ML-in necə istifadə etdikləri ilə bağlı çoxlu maraqlı videoları var. [Onlara baxmağa](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos) dəyər! + +## Tapşırıq + +[ML iməcliyi](assignment.az.md) diff --git a/9-Real-World/1-Applications/translations/assignment.az.md b/9-Real-World/1-Applications/translations/assignment.az.md new file mode 100644 index 0000000000..169aba6edb --- /dev/null +++ b/9-Real-World/1-Applications/translations/assignment.az.md @@ -0,0 +1,13 @@ +# ML iməcliyi + +## Təlimatlar + +Bu dərsdə klassik ML istifadə etməklə bir çox real həyat problemlərini necə həll olunduğunu öyrəndin. Dərin öyrənmənin, AI alətlərinin və texnikalarının istifadəsi, neyron şəbəkələrin köməyi ilə yaradılan alətlər də bu sahələrdə çox faydalı olub, lakin bu kurikulumndakı klassik ML texnikalarının tətbiqi hələ də böyük dəyərə sahibdir. + +Bu tapşırıqda özünü hakatonda istirakçı kimi təsəvvür et. Bu kurikulumnda öyrəndiyin və istədiyin klassik ML istifadə etməklə adı çəkilmiş sahələrdə hansısa problemi həll etməyə çalış. Öz ideyanı necə tətbiq edəcəyinlə bağlı bir təqdimat hazırla. Öz konseptin üçün nümunə data yığıb ML modeli qursan, əlavə bonus xallar da toplaya bilərsən! + +## Rubrika + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | PowerPoint təqdimatı hazırdır - modelin qurulmasına görə bonus xal tətbiq olunur | İnnovativ olmayan, sadə təqdimat hazırlandı | İş yarımçıqdır | diff --git a/9-Real-World/2-Debugging-ML-Models/translations/README.az.md b/9-Real-World/2-Debugging-ML-Models/translations/README.az.md new file mode 100644 index 0000000000..033e3c59d3 --- /dev/null +++ b/9-Real-World/2-Debugging-ML-Models/translations/README.az.md @@ -0,0 +1,173 @@ +# Postskipt: Maşın öyrənməsində Məsul AI idarə paneli komponentləri ilə model analizi + +## [Mühazirədən əvvəl test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/?loc=az) + +## Giriş + +Maşın öyrənməsi günlük həyatımıza təsir edir. AI bizə fərd kimi, həmçinin cəmiyyətimizə, səhiyyəyə, maliyyəyə, təhsilə və işimizə təsir edən əsas sistemlərə öz yolunu tapır. Misal olaraq, sistemlər və modellər sağlamlığa dair diaqnozlarda və ya fırıldaqçılığın tapılması kimi gündəlik qərarvermə tapşırıqlarında iştirak edirlər. Nəticə etibarı ilə AI-də olan inkişaf və paralel sürətli adoptasiyaya cavab olaraq cəmiyyətimizin gözləntiləri və genişlənən tənzimləmələr də artır. Biz daim AI sistemlərinin bəzi sahələrdə gözləntiləri ödəmədiyini görürük, yeni çağırışlar yaradır və hökümətlər AI həllərini tənzimləməyə başlayırlar. Buna görə də modellərin analizindən hər kəsə ədalətli, etibarlı, inkluziv, şəffaf və cavabdeh olacağı nəticələr çıxarması vacibdir. + +Bu kurikulumda biz məsul AI problemləri olan modelləri praktik hansı alətlərlə yoxlaya biləcəyimizi öyrənəcəyik. Ənənəvi maşın öyrənməsi analizi texnikaları toplanmış dəqiqlik və ya orta xəta itkisi kimi kəmiyyət hesablamalarına əsaslanırlar. Təsəvvür et ki, model qurmaq üçün istifadə etdiyin datada bəzi demoqrafik məlumatlar əksikdir, misal üçün irqi, cinsi, siyasi görüş, dini inanc kimi demoqrafiyaları normalara uyğun paylanmayıb. Modelin nəticəsinin yalnız bəzi demoqrafiyaya uyğun olsa necə olacaq? Bunun nəticəsində modeldə azlıq təşkil edən həssas qruplar üçün ədalətlilik, inklusivlik və ya etibarlılıq problemləri ortaya çıxacaq. Başqa məqam isə budur ki, maşın öyrənməsi modelləri qara qutu kimi hesab olunur, bu onların proqnozlarının nəyə əsaslanıb verdiyini izah etməyi daha da çətinləşdirir. Bunların hamısı data mühəndislərinin və AI developerlərinin modeli analiz etmək, ədalətliliyini və ya etibarlılığını yoxlamaq üçün lazımi alətlərinin olmamasına görə rastlaşdıqları problemlərdir. + +Bu dərsdə modelləri aşağıdakı üsullarla analiz etməyi öyrənəcəksən: + +- **Xəta analizi**: data paylanmasının hansı hissəsində modelin daha çox xətası olduğunu aşkar edəcək. +- **Modelə baxış**: modelin performans dəyərlərində bərabərsizliklərini aşkarlamaq üçün datanın müxtəlif seqmentlərində müqayisəli analizlər aparacaq. +- **Data analizi**: modeli korlayan, bir demoqrafiyanı digərindən daha üstün tuta biləcək hallarda datanın hansı hissəsində iştirakın həddindən artıq və ya əksik olduğunu araşdıracaq. +- **Parametr önəmi**: hansı parametlərin modelin qlobal və ya lokal səviyyədə proqnazlarına təsir edəcəyini anlayacaq. + +## İlkin tələblər + +İlkin tələblərə uyğun olaraq [mühəndislər üçün Məsul AI alətlərini](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) təkrarlayın. + +> ![Məsul AI alətlərilə bağlı gif](../images/rai-overview.gif) + +## Xəta analizi + +Dəqiqliyi ölçmək üçün istifadə olunan ənənəvi model performans metrikaların əksəriyyəti düzgün və səhv təxminlərin nisbətinin hesablamasına əsaslanır. Misal üçün modelin 89% dəqiqliyə malik olması və eyni zamanda xəta itkisi 0.001-dirsə, bu yaxşı performans sayılır. Xətalar çox vaxt dataset boyunca bərabər paylanmış olmur. Sən modeldə 89% dəqiqlik qiyməti ala bilərsən və eyni zamanda datanın fərqli hissələrində modelin 42% xətalı olduğunu da görə bilərsən. Bəzi data qruplarında olan xəta naxışlarının nəticəsində ədalətlilik və ya etibarlılıq problemləri yarana bilər. Buna görə modelin harada daha yaxşı və pis işlədiyini anlamaq vacibdir. Çox sayda qeyri-dəqiq məlumatlar olan data hissələri modelində vacib data demoqrafiyaya çevrilə bilər. + + +![Model xətalarını analiz et və araşdır](../images/ea-error-distribution.png) + +RAI idarə panelində Xəta analizi komponenti model xətalarının müxtəlif hissələr üzərində necə paylanıldığını ağac sxemi şəklində vizuallaşdırır. Bu hansı parametrin və datasetin hansı hissəsində yuxarı dərəcədə xətaların olduğunu aşkarlamağa köməkçi olur. Modelin qeyri-dəqiqliklərinin haradan gəldiyini görməklə problemin kökünü araşdırmağa başlaya bilərsiniz. Həmçinin data qrupları üzərində də analizlər apara bilərsən. Bu data qrupları araşdırma prosesində modelin performansının bir qrupda yaxşı, lakin digərində xətalı olduğunu bilməyə kömək edə bilər. + +![Xəta analizi](../images/ea-error-cohort.png) + +Ağac sxemindəki vizual göstəricilər xətanın yerini sürətli təyin etməyə kömək edir. Misal üçün qırmızının daha tünd olduğu düyündə daha çox xəta dərəcəsi var. + +İstilik xəritələnməsi başqa bir vizuallaşdırma funksiyasıdır və burada istifadəçilər modelin ümumi və ya data qrupları üzərində xəta dərəcəsini artırmaqda rol oynayan bir və ya iki parametri aşkar edə bilərlər. + +![İstilik xəritəsində xəta analizi](../images/ea-heatmap.png) + +Xəta analizini bu hallarda istifadə edin: + +* Model xətalarının datasetlər üzərində və fərqli giriş dəyələrləri, parametr ölçülərində dərin anlayış əldə etmək istəyəndə. +* Toplanmış performans metrikasını hissələrə bölməklə xətalı data qruplarınını kəşf etmək və növbəti miqrasiya addımlarından xəbərdar olmaq istəyəndə. + +## Modelə baxış + +Maşın öyrənmə modelinin performansını dəyərləndirmək üçün onun davranışlarını vahid sistem kimi anlamaq lazımdır. Bunu birdən çox metrikanı analiz etməklə əldə etmək olar, misal üçün xəta dərəcəsi, dəqiqlik, yenidən çağrılma və ya MAE (Orta mütləq xəta) istifadə olunmaqla performans metrikaları arasındakı fərqlilikləri tapmaq olar. Bir performans metrikası əla görünə bilər, lakin qeyri-dəqiqliklər digər metrikada üzə çıxa bilər. Əlavə olaraq bütün datasetin və ya hissələrin üzərində metrikaların fərqliliklərini müqayisə etməklə modelin harada yaxşı və ya pis nəticələr göstərdiyini üzə çıxarmağa kömək edəcək. Bu xüsusi olaraq modelin performansının həssas və ya qeyri-həssas xüsusiyyətlər arasında (misal üçün irq, cins və ya yaş fərqləri) ədalətliliyin pozulma hallarını aşkarlamaq üçün vacibdir. Misal üçün modelin müəyyən data qrupunda həssas xüsusiyyətlərdə daha çox xəta verməsi modelin ədalətsizliyə səbəb olacağını bildirir. + +RAI idarə panelinin Modelə baxış komponenti sadəcə data qruplarının performans metrikalarını analiz etməyə kömək etmir, həmçinin istifadəçilərə modelin nəticələrini digər data qrupları arasında da müqayisə etməyə imkan yaradır. + +![Dataset qrupları - RAI idarə panelində modelə baxış](../images/model-overview-dataset-cohorts.png) + +Komponentin parametr üzərində analiz funksionallığı istifadəçilərin bəzi parametrlərdə anomaliyaları aşkar etmək üçün aşağı səviyyəyə kimi alt-qruplara düşməyə imkan verir. Misal üçün idarə panelində istifadəçi tərəfindən seçilmiş parametrə əsasən avtomatik alt-qruplar yaradan məntiqi var (misal üçün *"time_in_hospital < 3"* or *"time_in_hospital >= 7"*). Bu istifadəçinin bəzi parametrləri böyük data qrupundan ayırmağa və modelin xətalı nəticələrinə əsas hansıların təsir etdiyini görməyə imkan yaradır. + +![Parametr alt-qrupları - RAI idarə panelində modelə baxış](../images/model-overview-feature-cohorts.png) + +Modelə baxış komponenti 2 növ metrikaların fərqlərini dəstəkləyir: + +**Model performansında fərqlilik**: Bu qrupa aid metrikalar seçilmiş parametrlərin datanın alt-qrupları arasında fərqlərini hesablayır. Bəzi nümunələr: + +* Dəqiqlik dərəcəsində fərq +* Xəta dərəcəsində fərq +* Dəqiqlikdə fərq +* Yenidən çağrılmada fərq +* Orta mütləq xətalarda fərq (MAE) + +**Seçilmiş dərəcələrdə fərq**: Bu metrika gözlənilən proqnoz dərəcələrinin alt-qruplar arasında fərqlərini hesablayır. Buna nümunə olaraq kreditlərə təsdiq dərəcələrində fərqləri göstərmək olar. Seçilmiş dərəcə ikili qruplaşdırma tətbiqində 1 kimi qiymətləndirilən data nöqtələrinin tutduğu hissə, reqressiyada isə proqnozlaşdıran dəyərlərinin paylanılması nəzərdə tutulur. + +## Data analizi + +> "Dataya lazımi qədər işgəncə etsən, o hər şeyi çaşdıracaq" - Ronald Koas + +Bu fikir ekstremal səslənsə də, datanın istənilən fikri dəstəkləyə biləcək dərəcədə manipulasiya edilə bilməsi doğrudur. Belə manipulasiyalar bəzən qeyri-ixtiyari olur. İnsan olaraq bizim də bəzi tərəf tutduğumuz məqamlar var və dataya tərəfkeşliyi gətirdiyimizi şüurlu olaraq bilməyimiz çox zaman çətin olur. AI-də və maşın öyrənməsində ədalətliliyin sığortalanması hələ də qəliz problem kimi qalır. + +Data ənənəvi model performans metrikaları üçün böyük bir kor nöqtədir. Sən yüksək dəqiqlik qiyməti əldə edə bilərsən, lakin bu sənin datasetinin tərəf tutduğu ehtimalını həmişə əks etdirməyəcək. Misal üçün şirkətdə idarəedici pozisiyada işçilərin 27%-i qadın, 73%-u kişi olan dataseti ilə öyrədilən iş reklamı AI modeli tətbiqdə yuxarı vəzifəli işlər üçün adədən kişiləri hədəfləyəcək. Datakı belə disbalans modelin proqnozlarını bir cinsə tərəf çox yönəldə bilər. Bu AI modelində harada cinsi ayrı-seçkilik problemi olduğunu üzə çıxarır. + +RAI idarə panelində Data analizi komponenti datasetin hansı hissəsində həddindən artıq çox və ya az iştirakın olduğunu təyin etməyə kömək edir. Biz istifadəçilərə datanın balans pozuntularından və ya müəyyən data qrupunun az təmsil edilməsinə görə yaranan xəta və ədalətlilik problemlərinin kökündəki səbəbi analiz etməyə kömək edir. Bu, istifadəçilərə proqnozlaşdırılan və həqiqi nəticələr, xəta qrupları və xüsusi parametrlərə əsasən vizualizasiya imkanları verir. Bəzən az təmsil olunan data qrupunun kəşfi modelin yaxşı öyrənmədiyini və nəticədə yüksək qeyri-dəqiqliyin olduğunu üzə çıxarır. Data ayrı-seçkiliyi olan modelə sahib olmaq sadəcə ədalətlilik problemi deyil, həmçinin modelin inkluziv və etibarlı olmadığını da göstərir. + +![RAI idarə panelində Data analizi komponenti](../images/dataanalysis-cover.png) + +Aşağıdakı hallarda data analizini istifadə et: + +* Datasetin statistikasını müxtəlif filtrlər tətbiq edərək fərqli ölçüdə hissələrə bölərək kəşf et (həmçinin data qrupu kimi də tanınır). +* Datasetin müxtəlif qruplarda və parametr qruplarında paylanılmasını başa düş. +* Ədalətlilik, xəta analizi və səbəbiyyət (başqa idarə paneli komponentindən əldə olunur) ilə bağlı tapıntılarının datasetin paylanılması ilə əlaqəli olduğunu təyin et. +* Təmsiletmə, etiket, parametr problemlərindən, etiket ayrı-seçkiliyindən və oxşar faktorlardan əmələ gələn xətaları azaltmaq üçün hansı sahədə daha çox data yığmalı olduğuna qərar ver. + +## Modelin şərh edilməsi + +Maşın öyrənmə modelləri qara qutulara bənzəyirlər. Hansı açar data parametri modelin proqnozlarını idarə etdiyini başa düşmək çətindir. Modelin verdiyi proqnozların səbəbinin şəffaflığını təmin etmək vacibdir. Məsələn, əgər AI sistemi diabet xəstəsinin 30 gündən daha tez xəstəxanaya yenidən qayıdacağını təxmin edirsə, bunun hansı datalara əsasən proqnozlaşdırdığını təmin etməlidir. Dəstəkləyici data göstəriciləri xəstəxana işçilərinə və xəstəxanalara daha şüurlu qərarlar verməsi üçün şəffaflıq gətirir. Əlavə olaraq modelin fərdi xəstəyə verdiyi proqnozu izah edə bilməsi həmçinin səhiyyə qaydalarına cavabdehliyini də mümkün edir. Sən insanların həyatına təsir edəcək maşın öyrənməsi modelləri istifadə edirsənsə, modelin qərarlarına təsir edən amilləri başa düşməyin və izah edə bilməyin vacibdir. Modelin izah olunması və şərh edilə bilməsi aşağıdakı ssenarilərdə suallara cavab verməyə kömək edir: + +* Model analizi: Mənim modelim niyə belə səhv etdi? Modelimi necə təkmilləşdirə bilərəm? +* İnsan-AI əməkdaşlığı: Modelin qərarlarını necə anlaya və güvənə bilərəm? +* Qaydalara uyğunluq: Modelim qanunlarını tələblərini ödəyirmi? + +RAI idarə panelinin Parametr vacibliyi komponenti modelin proqnozlarını necə etdiyini analiz etməyə və dərindən anlamağa kömək edir. Bu alət həmçinin maşın öyrənməsi peşəkarlarına və qərar verənlərə modelin davranışlarının qanunlara uyğunluğunu göstərmək üçün hansı parametrlərin təsir etdiyini izah və isbat etməyə kömək edir. Əlavə olaraq, istifadəçilər hansı parametlərin modelin proqnozlarına təsir etdiyini həm qlobal, həm də local izahlarla araşdıra bilərlər. Qlobal izahlar modelin ümumi proqnozlarına təsir edən baş parametrləri siyahı kimi verir. Local izahlar isə modelin fərdi hallarda proqnozlarına səbəb olan parametləri göstərir. Local izahları araşdırmaq imkanı xüsusi hallarda modelin dəqiq və ya qeyri-dəqiq proqnozlarının səbəbini analiz etmək, daha yaxşı başa düşmək və şərh etmək üçün də faydalıdır. + +![RAI idarə panelinin Parametr vacibliyi komponenti](../images/9-feature-importance.png) + +* Qlobal izahlar: Məsələn, hansı parametlər diabet xəstələrinin xəstəxanaya geri qayıdış modelinin ümumi davranışına təsir edir? +* Local izahlar: Məsələn, xəstəxanaya düşmüş 60 yaşdan yuxarı diabet xəstəsi növbəti 30 gün ərzində yenidən xəstəxanaya geri qaydıdıb-qayıtmayacağını proqnozu nəyə əsasən verilir? + +Modelin müxtəlif data qrupları üzərində performans yoxlamasının analiz prosesində Parametr vacibliyi komponenti qruplar üzərində parametrlərin hansı dərəcədə təsiri olduğunu göstərir. Bu, modelin xətalı proqnozlarına səbəb olan parametrin təsir səviyyəsini müqayisə etməklə anomaliyaları aşkar etməyə kömək edir. Parametr vacibliyi komponenti parametrin hansı dəyərinin modelin nəticəsinə müsbət və ya mənfi təsiri olduğunu göstərə bilir. Məsələn, əgər model qeyri-dəqiq proqnoz verirsə, koponent sənə hansı parametrin və ya parametrin hansı dəyərinin proqnoza təsir etdiyini tapmaq üçün dərinə enməyə imkan yaradır. Bu səviyyədə məlumat sadəcə analiz etməyə kömək etmir, həmçinin audit hallarında şəffaflıq və cavabdehliyi də təmin edir. Son olaraq komponent sənə ədalətlilik problemlərini müəyyən etməyə də kömək edə bilər. Fərz edək ki, əgər etnik və ya cins kimi həssas parametr modelin proqnozunda çox təsir qüvvəsi varsa, bu modeldə irqi və cinsi ayrı-seçkiliyin ola bilməsinə dair bir işarədir. + +![Parametrin vacibliyi](../images/9-features-influence.png) + +Şərh edilməni bu hallarda istifadə et: + +* Hansı parametrlərin proqnozlar üçün daha vacib olduğunu başa düşərək AI sistemin proqnozlarının nə qədər güvənli olduğuna əmin ol. +* Modelini analiz etmək üçün ilk olaraq onu başa düşməyə çalış və modelin sağlam parameteləri istifadə etdiyini və cüzi yanlış korrelasiya verdiyini təyin et. +* Modelin həssas və ya onunla çox korrelasiya olan parametrlər üzərində ayrı-seçkilik etdiyini anlamaqla mümkün qeyri-ədalətliliyin mənbəsini üzə çıxar. +* Modelin lokal izahlarını yaradaraq və nəticələri vizuallaşdıraraq istifadəçinin güvənini qazan. +* Modelləri təsdiqləyərək və qərarlarının insanlar üzərində təsirini izləyərək AI sistemlər üzərində tənzimləyici audit işlərini icra et. + +## Nəticə + +RAI idarə panelinin bütün komponentlərin hamısı sənə cəmiyyət üçün az zərərli və daha güvənli maşın öyrətməsi modeli yaratmağa kömək edəcək praktik alətlərdir. Bu, diskriminasiya və ya müəyyən qrupları fürsətlərdən kənarlaşdırmaq, fiziki və psixoloji zərər kimi insan haqqlarına qarşı olan təhdidlərin qarşısını almağa kömək edəcək. Bu həmçinin sənin modelinə olan güvəni qərarlarını lokal izahlar yaratmaqla və nəticələri vizuallaşdırmaqla kömək edəcək. Mümkün ola biləcək ziyanları belə təsnifləşdirilə bilər: + +- **Yerləşdirmə**, müəyyən cinsin və ya irqin digəri üzərində daha çox seçilməsi. +- **Xidmət keyfiyyəti**. Əgər bir ssenariyə uyğun data ilə öyrətmə etsən, bu reallıqda daha qəliz vəziyyətlərdə zəif xidmət göstərməyə gətirib çıxaracaq. +- **Stereotiplər**. Bəzi qrupları əvvəldən təyin olunmuş parametrlərlə əlaqələndirmək. +- **Böhtan**. Ədalətsiz şəkildə nəyisə və ya kimisə etiketləmək və mühakimə etmək. +- **Çox- və ya az- təmsil**. İdeya budur ki, bəzi qrupların bəzi peşələrdə, xidmətlərdə və ya funksiyalarda görülməməsi onların əleyhinə qərarlara dəstək verir. + +### Azure RAI idarə paneli + +[Azure RAI idarə paneli](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) data və AI mühəndislərinin modelin davranışlarını daha yaxşı başa düşməyə, kəşf etməyə və AI modellərinin arzuolunmaz xətalarının qarşısını almaq üçün aparıcı akademik institutlar və Microsoft kimi təşkilatlar tərəfindən hazırlanmış açıq mənbə alətləri üzərində qurulub. + +- RAI idarə panelində müxtəlif komponentləri necə istifadə edə biləcəyini [bu sənədlərdən](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) öyrən. + +- RAI idarə panelində Azure Maşın öyrənməsi ilə daha çox məsul AI ssenarilərini analiz etmək üçün [nümunə notbukları](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) yoxla. + +--- +## 🚀 Məşğələ + +Statistik və data ayrı-seçkiliyinin qarşısını almaq üçün biz ilk növbətə bunları etməliyik: + +- sistemlərdə işləyən insanlar arasında müxtəlif təcrübələrə və perspektivlərə malik olmaq +- bizim cəmiyyətimizin fərqliliklərini əks etdirən datasetlərə sərmayə qoymaq +- ayrı-seçkiliyin baş verdiyi yerləri təyin etməyə və düzəltməyə daha yaxşı üsullar inkişaf etdirmək + +Model yaradılmasında ədalətsizliyin aşkar olduğu və istidadə olunduğu real həyat ssenariləri barədə düşün. Biz başqa nələri nəzərə almalıyıq? + +## [Mühazirə sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/?loc=az) + +## Təkrarlayın və özünüz öyrənin + +Bu dərsdə sən maşın öyrənməsində məsul AI ilə birlikdə istifadə oluna biləcək praktik alətləri öyrəndin. + +Aşağıdakı məşğələlərə baxaraq mözvuları daha dərindən mənimsə: + +- Məsul AI idarə paneli: RAI-ni praktikada istifadə etmək üçün vahid pəncərə, Besmira Nuşi və Mehrnuş Sameki tərəfindən. + +[![Məsul AI idarə paneli: RAI-ni praktikada istifadə etmək üçün vahid pəncərə](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Məsul AI idarə paneli: RAI-ni praktikada istifadə etmək üçün vahid pəncərə") + +> 🎥 Video üçün yuxarıdakı şəkilə klikləyin: Məsul AI idarə paneli: RAI-ni praktikada istifadə etmək üçün vahid pəncərə, Besmira Nuşi və Mehrnuş Sameki tərəfindən. + +Aşağıdakı materiallara istinad edərək məsul AI və daha güvənli modelləri necə qura biləcəyin barədə öyrən: + +- ML modellərini analiz etmək üçün Microsoft-un RAI idarə panel alətləri: [Məsul AI alətləri resursu](https://aka.ms/rai-dashboard) + +- Məsul AI alətlərini araşdır: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Microsoft-un RAI resurs mərkəzi: [Məsul AI resursləri – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoft-un RAI resurs mərkəzi: [Məsul AI resursları – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoft-un FATE araşdırma qrupu: [FATE: AI-da Ədalətlilik, Cavabdehlik, Şəffaflıq, və Etika - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Tapşırıq + +[RAI idarə panelini kəşf et](assignment.az.md) diff --git a/9-Real-World/2-Debugging-ML-Models/translations/assignment.az.md b/9-Real-World/2-Debugging-ML-Models/translations/assignment.az.md new file mode 100644 index 0000000000..7bea85d8f4 --- /dev/null +++ b/9-Real-World/2-Debugging-ML-Models/translations/assignment.az.md @@ -0,0 +1,11 @@ +# Məsul AI (RAI) idarə panelini kəşf et + +## Təlimatlar + +Bu dərsdə sən RAI idarə paneli barədə öyrənmisən, harada ki, data mühəndislərinə xəta analizi, data araşdırması, ədalətliliyin yoxlanması, modelin şərh edilməsi, əks əlaqəli və ya şərtlərlə yoxlamalar və AI sistemləri üzərində gündəlik analizləri etməyə kömək edən "açıq mənbəli" alətlər üzərində qurulmuş komponentlər mövcuddur. Bu tapşırıqda RAI idarə panelini nümunə [notbuklar](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) üzərində kəşf etmək və öyrəndiklərini yazılı və ya təqdimat şəklində təqdim etməyin tələb olunur. + +## Rubric + +| Meyarlar | Nümunəvi | Adekvat | İnkişaf Etdirilməli Olan | +| -------- | -------- | ------- | ------------------------ | +| | Yazı və ya təqdimat RAI idarə panelinin komponentlərini əhatə edir, notbuk icra oluna bilir və bu işlərdən nəticə çıxarılıb | Nəticəsiz bir yazı təqdim olunub | Heç bir yazı təqdim olunmayıb | diff --git a/9-Real-World/translations/README.az.md b/9-Real-World/translations/README.az.md new file mode 100644 index 0000000000..393c172eaa --- /dev/null +++ b/9-Real-World/translations/README.az.md @@ -0,0 +1,18 @@ +# Postskript: Klassik maşın öyrənməsinin real həyatda tətbiqləri + +Kurikulumun bu bölməsində klassik ML-in real həyatda bəzi tətbiqləri ilə tanış olacaqsan. Biz internetdə çox sayda elmi məqalə və yazıları analiz etmişik və neyron şəbəkələrini, dərin öyrənməni, süni intelleki bacardığımız qədər filtr edərək yalnız əhatə etdiyimiz strategiyaların istifadə olunduğu tətbiqləri seçmişik. ML-in biznes sistemlərində, ekologiya tətbiqlərində, maliyyə, sənət və mədəniyyətdə necə tətbiq olunduqlarını öyrən. + +![şahmat](../images/chess.jpg) + +>Alexis Fauvet tərəfindən foto, Unsplash plaformasında + +## Dərslər + +1. [ML-in real həyat tətbiqləri](../1-Applications/translations/README.az.md) +2. [Məsuliyyətli AI idarə panelinin komponentlərini istifadə edərək Maşın Öyrənməsi modelinin analizi](../2-Debugging-ML-Models/translations/README.az.md) + +## Təşəkkürlər + +"Real həyat tətbiqləri" [Jen Looper](https://twitter.com/jenlooper) və [Ornella Altunyan](https://twitter.com/ornelladotcom) daxil olmaqla digər komanda üzvləri tərəfindən yazılıb. + +"Məsuliyyətli AI idarə panelinin komponentlərini istifadə edərək Maşın Öyrənməsi modelinin analizi" [Ruth Yakubu](https://twitter.com/ruthieyakubu) tərəfindən yazılıb. \ No newline at end of file diff --git a/quiz-app/src/App.vue b/quiz-app/src/App.vue index e2a958e5e8..57c4101d76 100644 --- a/quiz-app/src/App.vue +++ b/quiz-app/src/App.vue @@ -11,6 +11,7 @@ +
diff --git a/quiz-app/src/assets/translations/az.json b/quiz-app/src/assets/translations/az.json new file mode 100644 index 0000000000..120c00e140 --- /dev/null +++ b/quiz-app/src/assets/translations/az.json @@ -0,0 +1,2930 @@ +[ + { + "title": "Yeni başlayanlar üçün Maşın Öyrənməsi: Quizlər", + "complete": "Təbriklər, quizi bitirdiniz!", + "error": "Üzrlü sayın, yenidən cəhd edin", + "quizzes": [ + { + "id": 1, + "title": "Maşın öyrənməsinə giriş: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Ətrafımızda olan maşın öyrənməsinin tətbiqləri", + "answerOptions": [ + { + "answerText": "Doğru", + "isCorrect": "true" + }, + { + "answerText": "Yanlış", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Klassik ML və dərin öyrənməsi arasında texniki fərq nədir?", + "answerOptions": [ + { + "answerText": "klassik ML daha əvvəl kəşf olunub", + "isCorrect": "false" + }, + { + "answerText": "neyron şəbəkələrinin istifadəsi", + "isCorrect": "true" + }, + { + "answerText": "dərin öyrənmə robotlarda istifadə olunur", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Biznes ML strategiyalarından niyə istifadə etmək istəyə bilər?", + "answerOptions": [ + { + "answerText": "çoxölçülü məsələlərin həllini avtomatlaşdırmaq üçün", + "isCorrect": "false" + }, + { + "answerText": "müştərinin növü əsasında alış-veriş təcrübəsini fərdiləşdirmək üçün", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 2, + "title": "Maşın öyrənməsinə giriş: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Maşın öyrənmə alqoritmləri bunların simulyasiyası üçün nəzərdə tutulub", + "answerOptions": [ + { + "answerText": "ağıllı maşınlar", + "isCorrect": "false" + }, + { + "answerText": "insan beyni", + "isCorrect": "true" + }, + { + "answerText": "oranqutanlar", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Klassik ML texnikasının nümunəsi nədir?", + "answerOptions": [ + { + "answerText": "təbii dil emalı", + "isCorrect": "true" + }, + { + "answerText": "dərin öyrənmə", + "isCorrect": "false" + }, + { + "answerText": "neyron şəbəkələri", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Niyə hər kəs ML-nin əsaslarını öyrənməlidir?", + "answerOptions": [ + { + "answerText": "ML öyrənmək əyləncəlidir və hər kəs üçün əlçatandır", + "isCorrect": "false" + }, + { + "answerText": "ML strategiyaları bir çox sənaye və domenlərdə istifadə olunur", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 3, + "title": "Maşın öyrənməsinin tarixi: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "'Süni intellekt' termini təxminən nə vaxt yaranıb?", + "answerOptions": [ + { + "answerText": "1980-lər", + "isCorrect": "false" + }, + { + "answerText": "1950-lər", + "isCorrect": "true" + }, + { + "answerText": "1930-lar", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Maşın öyrənməsinin ilk qabaqcıllarından biri kim idi?", + "answerOptions": [ + { + "answerText": "Alan Turinq", + "isCorrect": "true" + }, + { + "answerText": "Bil Qeyts", + "isCorrect": "false" + }, + { + "answerText": "Şaki roboti", + "isCorrect": "false" + } + ] + }, + { + "questionText": "1970-ci illərdə süni intellektdə inkişafın ləngiməsinin səbəblərindən biri nədir?", + "answerOptions": [ + { + "answerText": "Limitli kompüter gücü", + "isCorrect": "true" + }, + { + "answerText": "Lazımi qədər bacarıqlı mühəndislərin olmaması", + "isCorrect": "false" + }, + { + "answerText": "Ölkələr arasında münaqişələr", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 4, + "title": "Maşın öyrənməsinin tarixi: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "'Səliqəsiz' AI sisteminin nümunəsi nədir?", + "answerOptions": [ + { + "answerText": "ELIZA", + "isCorrect": "true" + }, + { + "answerText": "HACKML", + "isCorrect": "false" + }, + { + "answerText": "SSYSTEM", + "isCorrect": "false" + } + ] + }, + { + "questionText": "'Qızıl İllər' zamanı inkişaf etdirilən bir texnologiya nümunəsi nədir?", + "answerOptions": [ + { + "answerText": "Bloklar dünyası", + "isCorrect": "true" + }, + { + "answerText": "Jibo", + "isCorrect": "false" + }, + { + "answerText": "Robot itlər", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Hansı hadisə süni intellekt sahəsinin yaradılmasında və genişlənməsində əsas rol oynadı?", + "answerOptions": [ + { + "answerText": "Turing testi", + "isCorrect": "false" + }, + { + "answerText": "Dartmunt Yay Tədqiqat Layihəsi", + "isCorrect": "true" + }, + { + "answerText": "AI Qışı", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 5, + "title": "Ədalət və maşın öyrənməsi: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Maşın öyrənməsində ədalətsizlik baş verə bilər", + "answerOptions": [ + { + "answerText": "qəsdən", + "isCorrect": "false" + }, + { + "answerText": "istəmədən", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "ML-də 'ədalətsizlik' termini aşağıdakıları ifadə edir:", + "answerOptions": [ + { + "answerText": "insan qruplarına ziyan vurur", + "isCorrect": "true" + }, + { + "answerText": "bir şəxsə ziyan vurur", + "isCorrect": "false" + }, + { + "answerText": "insanların çoxuna ziyan vurur", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Zərərlərin beş əsas növünə daxildir", + "answerOptions": [ + { + "answerText": "bölgü, xidmətin keyfiyyəti, stereotipləşdirmə, ləkələmə və həddindən artıq və ya az təmsilçilik", + "isCorrect": "true" + }, + { + "answerText": "yerləşdirmə, xidmət keyfiyyəti, stereotipləşdirmə, ləkələmə və həddindən artıq və ya az təmsilçilik", + "isCorrect": "false" + }, + { + "answerText": "bölgü, xidmətin keyfiyyəti, stereofoniklik, ləkələmə və həddindən artıq və ya az təmsilçilik", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 6, + "title": "Ədalət və maşın öyrənməsi: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Bir modeldəki ədalətsizliyə səbəb ola bilər", + "answerOptions": [ + { + "answerText": "tarixi məlumatlara çox əsaslanmaq", + "isCorrect": "true" + }, + { + "answerText": "tarixi məlumatlara az əsaslanmaq", + "isCorrect": "false" + }, + { + "answerText": "tarixi məlumatlara çox yaxınlaşmaq", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Ədalətsizliyi azaltmaq üçün edə bilərsiniz", + "answerOptions": [ + { + "answerText": "zərərləri və təsirlənmiş qrupları müəyyənləşdirin", + "isCorrect": "false" + }, + { + "answerText": "ədalətlilik ölçülərini müəyyənləşdirin", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Fairlearn kitabxanası bunları edə bilər", + "answerOptions": [ + { + "answerText": "ədalətlilik və performans göstəricilərindən istifadə edərək bir çox modeli müqayisə edir", + "isCorrect": "true" + }, + { + "answerText": "sənin ehtiyaclarına ən uyğun modeli seçir", + "isCorrect": "false" + }, + { + "answerText": "nəyin ədalətli və nəyin ədalətli olduğuna qərar verməyə kömək edir", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 7, + "title": "Alətlər və texnikalar: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Model qurarkən bunları etməlisən:", + "answerOptions": [ + { + "answerText": "datanı hazlırla, sonra modeli öyrət", + "isCorrect": "true" + }, + { + "answerText": "öyrətmə üsulu seç, sonra datanı hazırla", + "isCorrect": "false" + }, + { + "answerText": "parametrləri tənzimlə, sonra modeli öyrət", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Sənin datanın ___ ML modelin keyfiyyətinə təsir edəcək", + "answerOptions": [ + { + "answerText": "say", + "isCorrect": "false" + }, + { + "answerText": "forma", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Xüsusiyyət dəyişənidir:", + "answerOptions": [ + { + "answerText": "datanın keyfiyyəti", + "isCorrect": "false" + }, + { + "answerText": "danın ölçülə bilən parametri", + "isCorrect": "true" + }, + { + "answerText": "datanın məlumatları", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 8, + "title": "Alətlər və texnikalar: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Datanı təhlil edərkən bunları etməlisən:", + "answerOptions": [ + { + "answerText": "istisnaları aşkar edə bilərsən", + "isCorrect": "false" + }, + { + "answerText": "tərəfkeşliyin potensial səbəbini aşkar edə bilərsiniz", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Datanı bunlara böl:", + "answerOptions": [ + { + "answerText": "öyrətmə və turinq dəstləri", + "isCorrect": "false" + }, + { + "answerText": "öyrətmə və test dəstləri", + "isCorrect": "true" + }, + { + "answerText": "doğrulama və qiymətləndirmə dəstləri", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Müxtəlif ML kitabxanalarında öyrətmə prosesini başlamaq üçün ümumi əmr:", + "answerOptions": [ + { + "answerText": "model.travel", + "isCorrect": "false" + }, + { + "answerText": "model.train", + "isCorrect": "false" + }, + { + "answerText": "model.fit", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 9, + "title": "Reqressiyaya giriş: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Bu dəyişənlərdən hansı ədədi dəyişəndir?", + "answerOptions": [ + { + "answerText": "Hündürlük", + "isCorrect": "true" + }, + { + "answerText": "Cins", + "isCorrect": "false" + }, + { + "answerText": "Saç rəngi", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bu dəyişənlərdən hansı kateqoriyalı dəyişəndir?", + "answerOptions": [ + { + "answerText": "Ürək döyüntüsü", + "isCorrect": "false" + }, + { + "answerText": "Qan qrupu", + "isCorrect": "true" + }, + { + "answerText": "Çəki", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bu problemlərdən hansı Reqressiya təhlilinə əsaslanan problemdir?", + "answerOptions": [ + { + "answerText": "Tələbənin yekun imtahan qiymətlərinin proqnozlaşdırılmaq", + "isCorrect": "true" + }, + { + "answerText": "Bir insanın qan qrupunu proqnozlaşdırmaq", + "isCorrect": "false" + }, + { + "answerText": "E-poçtun spam olub olmadığını təxmin etmək", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 10, + "title": "Reqressiyaya giriş: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Əgər Maşın Öyrənmə modelinizin öyrətmə dəqiqliyi 95 % və test dəqiqliyi 30 % təşkil edirsə, o zaman hansı növ vəziyyət adlanır?", + "answerOptions": [ + { + "answerText": "Çox uyğunlaşma (Overfitting)", + "isCorrect": "true" + }, + { + "answerText": "Az uyğunlaşma (Underfitting)", + "isCorrect": "false" + }, + { + "answerText": "İkiqat uyğunlaşma (Double Fitting)", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Xüsusiyyətlər toplusundan əhəmiyyətli xüsusiyyətlərin müəyyən edilməsi prosesi adlanır:", + "answerOptions": [ + { + "answerText": "Xüsusiyyət Çıxarılması", + "isCorrect": "false" + }, + { + "answerText": "Xüsusiyyət Ölçülərinin Azaldılması", + "isCorrect": "false" + }, + { + "answerText": "Xüsusiyyət Seçimi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Scikit Learn-in 'train_test_split()' metodu/funksiyasından istifadə edərək verilənlər toplusunun müəyyən nisbətdə öyrətmə və test verilənlər bazasına bölünməsi prosesi adlanır:", + "answerOptions": [ + { + "answerText": "Çarpaz-yoxlama (Cross-Validation)", + "isCorrect": "false" + }, + { + "answerText": "Saxlama yoxlaması (Hold-Out Validation)", + "isCorrect": "true" + }, + { + "answerText": "Yoxlamadan birini buraxılması (Leave one out Validation)", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 11, + "title": "Reqressiya üçün verilənləri hazırlayın və vizuallaşdırın: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Bu Python modullarından hansı məlumatların vizuallaşdırılması üçün istifadə olunur?", + "answerOptions": [ + { + "answerText": "Numpy", + "isCorrect": "false" + }, + { + "answerText": "Scikit-learn", + "isCorrect": "false" + }, + { + "answerText": "Matplotlib", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Əgər məlumat dəstinizin data nöqtələrinin yayılmasını və ya digər xüsusiyyətlərini anlamaq istəyirsinizsə, yerinə yetirin:", + "answerOptions": [ + { + "answerText": "Data vizuallaşdırılması", + "isCorrect": "true" + }, + { + "answerText": "Datanın ön emalı", + "isCorrect": "false" + }, + { + "answerText": "Öytərmə Test bölgüsü", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bunlardan hansı Maşın Öyrənmə layihəsində Data vizuallaşdırılması addımının bir hissəsidir?", + "answerOptions": [ + { + "answerText": "Müəyyən Maşın Öyrənmə alqoritmini daxil etmək", + "isCorrect": "false" + }, + { + "answerText": "Fərqli planlama metodlarından istifadə edərək məlumatların şəkilli təsvirinin yaradılması", + "isCorrect": "true" + }, + { + "answerText": "Datasetin dəyərlərinin normalizasiyası", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 12, + "title": "Reqressiya üçün verilənləri hazırlayın və vizuallaşdırın: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Datasetinizdə çatışmayan dəyərlərin olub-olmadığını yoxlamaq istəyirsinizsə, bu dərsə əsasən hansı kod parçası düzgündür? Tutaq ki, verilənlər bazası Pandas DataFrame obyekti olaraq 'dataset' adlı dəyişəndə ​​saxlanılır.", + "answerOptions": [ + { + "answerText": "dataset.isnull().sum()", + "isCorrect": "true" + }, + { + "answerText": "findMissing(dataset)", + "isCorrect": "false" + }, + { + "answerText": "sum(null(dataset))", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Datasetinizdən müxtəlif data nöqtələri qruplarının yayılmasını anlamaq istədiyiniz zaman bu vizuallaşdırma üsullarından hansı faydalıdır?", + "answerOptions": [ + { + "answerText": "Scatter Plot", + "isCorrect": "false" + }, + { + "answerText": "Line Plot", + "isCorrect": "false" + }, + { + "answerText": "Bar Plot", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Data Visualization sizə nəyi deyə BİLMƏZ?", + "answerOptions": [ + { + "answerText": "data nöqtələri arasındakı əlaqəni", + "isCorrect": "false" + }, + { + "answerText": "Datasetin hansı mənbədən yığıldığını", + "isCorrect": "true" + }, + { + "answerText": "Datasetdə kənar (istisna) göstəricilərin mövcudluğunun tapılması", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 13, + "title": "Xətti və Polinom Reqressiya: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Matplotlib nədir?", + "answerOptions": [ + { + "answerText": "şəkil çəkən kitabxana", + "isCorrect": "false" + }, + { + "answerText": "data vizuallaşdırma kitabxanası", + "isCorrect": "true" + }, + { + "answerText": "kreditləşmə kitabxanası", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Xətti reqressiya dəyişənlər arasında əlaqə qurmaq üçün aşağıdakılardan istifadə edir", + "answerOptions": [ + { + "answerText": "düz xətt", + "isCorrect": "true" + }, + { + "answerText": "çevrə", + "isCorrect": "false" + }, + { + "answerText": "əyri xətt", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Yaxşı Xətti Reqressiya modelində ___ Korrelyasiya əmsalı var", + "answerOptions": [ + { + "answerText": "aşağı", + "isCorrect": "false" + }, + { + "answerText": "yuxarı", + "isCorrect": "true" + }, + { + "answerText": "düz", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 14, + "title": "Xətti və Polinom Reqressiya: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Əgər məlumatlarınız qeyri-xəttidirsə, ___ növ reqressiyanı sınayın", + "answerOptions": [ + { + "answerText": "xətti", + "isCorrect": "false" + }, + { + "answerText": "sferik", + "isCorrect": "false" + }, + { + "answerText": "polinom", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Bunlar Reqressiya metodlarının bütün növləridir", + "answerOptions": [ + { + "answerText": "Falsestep, Ridge, Lasso və Elasticnet", + "isCorrect": "false" + }, + { + "answerText": "Stepwise, Ridge, Lasso və Elasticnet", + "isCorrect": "true" + }, + { + "answerText": "Stepwise, Ridge, Lariat və Elasticnet", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Ən kiçik kvadrat reqressiyası o deməkdir ki, reqressiya xəttini əhatə edən bütün məlumat nöqtələri:", + "answerOptions": [ + { + "answerText": "kvadratlaşdırılır və çıxılır", + "isCorrect": "false" + }, + { + "answerText": "vurulur", + "isCorrect": "false" + }, + { + "answerText": "kvadratlaşdırılır və cəmlənir", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 15, + "title": "Logistik reqressiya: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Bunu proqnozlaşdırmaq üçün Logistik Reqressiyadan istifadə edin", + "answerOptions": [ + { + "answerText": "alma yetişib, ya yetişməyib", + "isCorrect": "true" + }, + { + "answerText": "ayda nə qədər bilet satmaq olar", + "isCorrect": "false" + }, + { + "answerText": "sabah saat 18:00-da səma hansı rəngə çevriləcək", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Logistik reqressiya növlərinə daxildir", + "answerOptions": [ + { + "answerText": "multinomial və kardinal", + "isCorrect": "false" + }, + { + "answerText": "multinomial və ordinal", + "isCorrect": "true" + }, + { + "answerText": "əsas və ordinal", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Datanız zəif korrelyasiyaya malikdir. İstifadə ediləcək ən yaxşı reqressiya növü:", + "answerOptions": [ + { + "answerText": "Lagistik", + "isCorrect": "true" + }, + { + "answerText": "Xətti", + "isCorrect": "false" + }, + { + "answerText": "Kardinal", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 16, + "title": "Logistik reqressiya: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Seaborn nəyin növüdür?", + "answerOptions": [ + { + "answerText": "data vizuallaşdırma kitabxanası", + "isCorrect": "true" + }, + { + "answerText": "xəritələmə kitabxanası", + "isCorrect": "false" + }, + { + "answerText": "riyaziyyat kitabxanası", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Çaşqınlıq matrisi həmçinin aşağıdakı kimi tanınır:", + "answerOptions": [ + { + "answerText": "xəta matrisi", + "isCorrect": "true" + }, + { + "answerText": "həqiqən matrisi", + "isCorrect": "false" + }, + { + "answerText": "dəqiqlik matrisi", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Yaxşı bir model aşağıdakılara sahib olacaq:", + "answerOptions": [ + { + "answerText": "çaşqınlıq matrisində çoxlu sayda yanlış müsbət və həqiqi neqativlər", + "isCorrect": "false" + }, + { + "answerText": "çaşqınlıq matrisində çoxlu sayda həqiqi müsbət və həqiqi neqativlər", + "isCorrect": "true" + }, + { + "answerText": "çaşqınlıq matrisində çoxlu sayda həqiqi müsbət və yanlış neqativlər", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 17, + "title": "Veb Tətbiqi yaratmaq: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "ONNX nə deməkdir?", + "answerOptions": [ + { + "answerText": "Over Neural Network Exchange", + "isCorrect": "false" + }, + { + "answerText": "Open Neural Network Exchange", + "isCorrect": "true" + }, + { + "answerText": "Output Neural Network Exchange", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Flask yaradıcıları tərəfindən necə müəyyən edilir?", + "answerOptions": [ + { + "answerText": "mini-framevörk", + "isCorrect": "false" + }, + { + "answerText": "böyük-framevörk", + "isCorrect": "false" + }, + { + "answerText": "mikro-framevörk", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Python-un Pickle modulu nə edir?", + "answerOptions": [ + { + "answerText": "Python obyektini seriallaşdırır", + "isCorrect": "false" + }, + { + "answerText": "Python obyektini de-seriallaşdırır", + "isCorrect": "false" + }, + { + "answerText": "Python obyektini seriallaşdırır və de-seriallaşdırır", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 18, + "title": "Veb Tətbiqi yaratmaq: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Python-dan istifadə edərək öncədən öyrədilmiş modeli internetdə yerləşdirmək üçün hansı vasitələrdən istifadə edə bilərik?", + "answerOptions": [ + { + "answerText": "Flask", + "isCorrect": "true" + }, + { + "answerText": "TensorFlow.js", + "isCorrect": "false" + }, + { + "answerText": "onnx.js", + "isCorrect": "false" + } + ] + }, + { + "questionText": "SaaS nə deməkdir?", + "answerOptions": [ + { + "answerText": "System as a Service", + "isCorrect": "false" + }, + { + "answerText": "Software as a Service", + "isCorrect": "true" + }, + { + "answerText": "Security as a Service", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Scikit-learn's LabelEncoder kitabxanası nə iş görür?", + "answerOptions": [ + { + "answerText": "Datanı əlifba sırası ilə enkodlaşdırır", + "isCorrect": "true" + }, + { + "answerText": "Datanı rəqəm sırası ilə enkodlaşdırır", + "isCorrect": "false" + }, + { + "answerText": "Datanı öz sırası ilə enkodlaşdırır", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 19, + "title": "Qruplaşdırma 1: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Qruplaşdırma aşağıdakı ilə bir çox ortaq cəhətləri olan nəzarətli öyrənmə formasıdır", + "answerOptions": [ + { + "answerText": "Zaman seriyası", + "isCorrect": "false" + }, + { + "answerText": "Reqressiya texnikaları", + "isCorrect": "true" + }, + { + "answerText": "NLP", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Qruplaşdırma hansı suala cavab verməyə kömək edə bilər?", + "answerOptions": [ + { + "answerText": "Bu e-poçt spamdır, yoxsa yox?", + "isCorrect": "true" + }, + { + "answerText": "Donuzlar uça bilərmi?", + "isCorrect": "false" + }, + { + "answerText": "Həyatın mənası nədir?", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Qruplaşdırma üsullarından istifadə etmək üçün ilk addım nədir?", + "answerOptions": [ + { + "answerText": "datasetin siniflərinin yaratmaq", + "isCorrect": "false" + }, + { + "answerText": "datanı təmizləmək və balanslaşdırmaq", + "isCorrect": "true" + }, + { + "answerText": "data nöqtələrini qrupa və ya nəticəyə əlaqələndirmək", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 20, + "title": "Qruplaşdırma 1: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Çox sinifli sual nədir?", + "answerOptions": [ + { + "answerText": "məlumat nöqtələrini bir neçə qrupa təsnif etmək tapşırığı", + "isCorrect": "false" + }, + { + "answerText": "məlumat nöqtələrini qruplardan birinə təsnif etmək tapşırığı", + "isCorrect": "true" + }, + { + "answerText": "data nöqtələrini müxtəlif üsullarla təmizləmək tapşırığı", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Qruplaşdırıcılara probleminizi həll etməkdə kömək etmək üçün təkrarlanan və ya faydasız məlumatları təmizləmək vacibdir.", + "answerOptions": [ + { + "answerText": "düzdür", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Datanı balanslaşdırmaq üçün ən yaxşı səbəb nədir?", + "answerOptions": [ + { + "answerText": "Balanssız datalar vizuallaşdırmada pis görünür", + "isCorrect": "false" + }, + { + "answerText": "ML modeli bir sinifə doğru yönəlməyəcəyi üçün datanı balanslaşdırmaq daha yaxşı nəticələr verir", + "isCorrect": "true" + }, + { + "answerText": "Datanı balanslaşdırmaq sənə daha çox data nöqtəsi verir", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 21, + "title": "Qruplaşdırma 2: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Balanslaşdırılmış, təmiz data ən yaxşı qruplaşdırma nəticələrini verir", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Doğru qruplaşdırıcını necə seçməli?", + "answerOptions": [ + { + "answerText": "Qruplaşdırıcıların hansı ssenarilərdə ən yaxşı işlədiyini anlayaraq", + "isCorrect": "false" + }, + { + "answerText": "Təcrübəli təxmin və yoxlama", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Qruplaşdırma bunun bir növüdür", + "answerOptions": [ + { + "answerText": "NLP", + "isCorrect": "false" + }, + { + "answerText": "Nəzarətli Öyrənmə", + "isCorrect": "true" + }, + { + "answerText": "Proqramlaşdırma dili", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 22, + "title": "Qruplaşdırma 2: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "'Həlledici' nədir?", + "answerOptions": [ + { + "answerText": "sənin işini yoxlayan şəxs", + "isCorrect": "false" + }, + { + "answerText": "optimallaşdırma problemlərində istifadə olunan alqoritm", + "isCorrect": "true" + }, + { + "answerText": "maşın öyrənməsi texnikası", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bu dərsdə hansı qruplaşdırıcı istifadə etdik?", + "answerOptions": [ + { + "answerText": "Logistik Reqressiya (Logistic Regression)", + "isCorrect": "true" + }, + { + "answerText": "Qərar ağacları (Decision Trees)", + "isCorrect": "false" + }, + { + "answerText": "Biri hamısına qarşı olan çoxlu sinif (One-vs-All Multiclass)", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Qruplaşdırıcı alqoritminin gözlənildiyi kimi işlədiyini necə bilirsiniz?", + "answerOptions": [ + { + "answerText": "Proqnozlarının dəqiqliyini yoxlamaqla", + "isCorrect": "true" + }, + { + "answerText": "Başqa alqoritmlərə qarşı yoxlamaqla", + "isCorrect": "false" + }, + { + "answerText": "Bu alqoritmin oxşar problemləri həll etməkdə nə qədər yaxşı olduğuna dair tarixi məlumatlara baxaraq", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 23, + "title": "Qruplaşdırma 3: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Sınamaq üçün yaxşı bir ilkin qruplaşdırıcı:", + "answerOptions": [ + { + "answerText": "Xətti SVC (Linear SVC)", + "isCorrect": "true" + }, + { + "answerText": "K-qonşu qruplaşdırıcı (K-Means)", + "isCorrect": "false" + }, + { + "answerText": "Məntiqi SVC (Logical SVC)", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Tənzimləmə idarə edir:", + "answerOptions": [ + { + "answerText": "parametrlərin təsirini", + "isCorrect": "true" + }, + { + "answerText": "öyrənmə sürətinin təsirini", + "isCorrect": "false" + }, + { + "answerText": "istisnaların təsiri", + "isCorrect": "false" + } + ] + }, + { + "questionText": "K-Qonşu qruplaşdırıcı bunun üçün istifadə oluna bilər:", + "answerOptions": [ + { + "answerText": "nəzarətli öyrənmə", + "isCorrect": "false" + }, + { + "answerText": "nəzarətsiz öyrənmə", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 24, + "title": "Qruplaşdırma 3: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Dəstək-Vektor qruplaşdırıcıları bunlar üçün istifadə edilə bilər", + "answerOptions": [ + { + "answerText": "Qruplaşdırma", + "isCorrect": "false" + }, + { + "answerText": "reqressiya", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Təsadüfi meşə (Random Forest) ___ növ qruplaşdırıcıdır", + "answerOptions": [ + { + "answerText": "Ansambl", + "isCorrect": "true" + }, + { + "answerText": "Parçalamaq", + "isCorrect": "false" + }, + { + "answerText": "Yığmaq", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Adaboost bununla tanınır:", + "answerOptions": [ + { + "answerText": "yanlış təsnif edilmiş parçaların çəkilərinə diqqət yetirmək", + "isCorrect": "true" + }, + { + "answerText": "istisnalara diqqət yetirmək", + "isCorrect": "false" + }, + { + "answerText": "səhv datalara diqqət yetirmək", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 25, + "title": "Qruplaşdırma 4: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Tövsiyyə sistemləri bunlar üçün istifadə oluna bilər", + "answerOptions": [ + { + "answerText": "Yaxşı restoran tövsiyyələri", + "isCorrect": "false" + }, + { + "answerText": "Yeni paltarlar yoxlamaq üçün tövsiyyələr", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Modelin veb tətbiqinə daxil edilməsi onun oflayn işləməsinə kömək edir", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Onnx Runtime bunun üçün istifadə oluna bilər", + "answerOptions": [ + { + "answerText": "Veb tətbiqlərdə modeli icra etmək", + "isCorrect": "true" + }, + { + "answerText": "Modelləri öyrətmək", + "isCorrect": "false" + }, + { + "answerText": "Hiperparametr sazlaması", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 26, + "title": "Qruplaşdırma 4: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Netron tətbiqi bu işdə kömək edir:", + "answerOptions": [ + { + "answerText": "Data vizuallaşdırmaqda", + "isCorrect": "false" + }, + { + "answerText": "Model strukturunu vizuallaşdırmaqda", + "isCorrect": "true" + }, + { + "answerText": "Veb tətbiqi yoxlamaqda", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Onnx ilə istifadə etmək üçün Scikit-öyrənmə modelinizi bununla çeviririk:", + "answerOptions": [ + { + "answerText": "sklearn-app", + "isCorrect": "false" + }, + { + "answerText": "sklearn-web", + "isCorrect": "false" + }, + { + "answerText": "sklearn-onnx", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Veb tətbiqdə modelimizi istifadə etmək belə adlanır:", + "answerOptions": [ + { + "answerText": "nəticə çıxarmaq", + "isCorrect": "true" + }, + { + "answerText": "müdaxilə", + "isCorrect": "false" + }, + { + "answerText": "sığorta", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 27, + "title": "Klasterləşdirməyə giriş: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Klasterləşdirməyə real həyatımızdan nümunə ola bilər", + "answerOptions": [ + { + "answerText": "Şam yeməyi masası hazırlamaq", + "isCorrect": "false" + }, + { + "answerText": "Yuyulacaq paltarları qruplaşdırmaq", + "isCorrect": "true" + }, + { + "answerText": "Meyvə-tərəvəz alış-verişi etmək", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bu sənayelərdə klasterləşdirmə üsullarından istifadə edilə bilər", + "answerOptions": [ + { + "answerText": "bank", + "isCorrect": "false" + }, + { + "answerText": "e-satış", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Klasterləşdirmə bunun növüdür:", + "answerOptions": [ + { + "answerText": "nəzarətli öyrənmə", + "isCorrect": "false" + }, + { + "answerText": "nəzarətsiz öyrənmə", + "isCorrect": "true" + }, + { + "answerText": "gücləndirici öyrənmə", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 28, + "title": "Klasterləşdirməyə giriş: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Evklid həndəsəsi buna əsasən düzülmüşdür", + "answerOptions": [ + { + "answerText": "müstəvilər", + "isCorrect": "true" + }, + { + "answerText": "əyrilər", + "isCorrect": "false" + }, + { + "answerText": "kürələr", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Klaster məlumatlarınızın sıxlığı bununla bağlıdır", + "answerOptions": [ + { + "answerText": "küy", + "isCorrect": "true" + }, + { + "answerText": "dərinlik", + "isCorrect": "false" + }, + { + "answerText": "uyğunluq", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Ən yaxşı bilinən klasterləşdirmə alqoritmi budur", + "answerOptions": [ + { + "answerText": "k-ortalama", + "isCorrect": "true" + }, + { + "answerText": "k-orta", + "isCorrect": "false" + }, + { + "answerText": "k-hissə", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 29, + "title": "K-Ortalama Klasterləşməsi: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "K-Ortalama buradan gəlib:", + "answerOptions": [ + { + "answerText": "elektrik mühəndisliyi", + "isCorrect": "false" + }, + { + "answerText": "siqnal emalı", + "isCorrect": "true" + }, + { + "answerText": "kompüter dilçiliyi", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Yaxşı Siluilet rəqəmi bunu bildirir:", + "answerOptions": [ + { + "answerText": "klasterlər yaxşı ayrılmış və müəyyənləşdirilmişdir", + "isCorrect": "true" + }, + { + "answerText": "az sayda klaster vardır", + "isCorrect": "false" + }, + { + "answerText": "çox sayda klaster vardır", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Fərqlilik:", + "answerOptions": [ + { + "answerText": "ortadan fərqlərin kvadratlarının ortasıdır", + "isCorrect": "false" + }, + { + "answerText": "çox yüksək olarsa, qruplaşma problemi yaranır", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 30, + "title": "K-Ortalama Klasterləşməsi: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Voronoi diaqramı bunu göstərir:", + "answerOptions": [ + { + "answerText": "klasterin fərqliliyini", + "isCorrect": "false" + }, + { + "answerText": "klasterin mərkəzini və regionlarını", + "isCorrect": "true" + }, + { + "answerText": "klasterin ətalətini", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Ətalət", + "answerOptions": [ + { + "answerText": "klasterlərin nə qədər daxili əlaqəli olduğunun ölçüsüdür", + "isCorrect": "true" + }, + { + "answerText": "klasterlərinin nə qədər hərəkət etdiyinin ölçüsüdür", + "isCorrect": "false" + }, + { + "answerText": "klasterin keyfiyyətinin ölçüsüdür", + "isCorrect": "false" + } + ] + }, + { + "questionText": "K-Means istifadə edərək, əvvəlcə 'k' dəyərini təyin etməlisiniz", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 31, + "title": "NLP-ə giriş: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "NLP bu dərsdə nəyi bildirir?", + "answerOptions": [ + { + "answerText": "Neyron Dil Emalı (Neural Language Processing)", + "isCorrect": "false" + }, + { + "answerText": "Təbii dil emalı (natural language processing)", + "isCorrect": "true" + }, + { + "answerText": "Təbii Dilçilik Emalı (Natural Linguistic Processing)", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Eliza kompüter kimi fəaliyyət göstərən ilkin _ botu idi", + "answerOptions": [ + { + "answerText": "terapist", + "isCorrect": "true" + }, + { + "answerText": "həkim", + "isCorrect": "false" + }, + { + "answerText": "tibb bacısı", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Alan Turinqin 'Turing Testi' kompüterin _ olduğunu müəyyən etməyə çalışdı", + "answerOptions": [ + { + "answerText": "insandan ayırd edilə bilinməyən", + "isCorrect": "false" + }, + { + "answerText": "düşünən", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 32, + "title": "Təbii dil emalına giriş: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Cozef Veyzenbaum bu botu icad etdi", + "answerOptions": [ + { + "answerText": "Elisha", + "isCorrect": "false" + }, + { + "answerText": "Eliza", + "isCorrect": "true" + }, + { + "answerText": "Eloise", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Söhbət botları bunların əsasında cavablar qaytarır", + "answerOptions": [ + { + "answerText": "Əvvəlcədən təyin olunmuş seçimlərdən təsadüfi seçim", + "isCorrect": "false" + }, + { + "answerText": "Məlumatın təhlili və maşın biliyindən istifadə", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Botu necə daha effektiv edərdiniz?", + "answerOptions": [ + { + "answerText": "Daha çox suallar verməklə.", + "isCorrect": "false" + }, + { + "answerText": "Daha çox data daxil etmək və ona əsasən öyrətməklə", + "isCorrect": "true" + }, + { + "answerText": "Botlar bacarıqsızdır, onlar öyrənə bilməz :(", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 33, + "title": "NLP tapşırıqları: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Tokenizasiya", + "answerOptions": [ + { + "answerText": "Durğu işarələri vasitəsi ilə mətni bölür", + "isCorrect": "false" + }, + { + "answerText": "Mətni ayrı tokenlərə (sözlərə) bölür", + "isCorrect": "true" + }, + { + "answerText": "Mətni ifadələrə bölür", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Yerləşdirmələr", + "answerOptions": [ + { + "answerText": "sözlər klasterləşə bilsin deyə mətn datalarını ədədi olaraq çevirir", + "isCorrect": "true" + }, + { + "answerText": "sözləri ifadələrə yerləşdirir", + "isCorrect": "false" + }, + { + "answerText": "cümlələri paraqraflara yerləşdirir", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Nitq hissələrinin etiketlənməsi", + "answerOptions": [ + { + "answerText": "cümlələri nitq hissələrinə görə bölür", + "isCorrect": "false" + }, + { + "answerText": "tokenləşdirilmiş sözləri götürür və onları nitq hissəsinə görə etiketləyir", + "isCorrect": "true" + }, + { + "answerText": "cümlələrin sxemini qurur", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 34, + "title": "NLP tapşırıqları: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Daha çox təkrarlanan sözlərdən lüğət yaratmaq üçün bundan istifadə olunur:", + "answerOptions": [ + { + "answerText": "Söz və ifadə lüğəti", + "isCorrect": "false" + }, + { + "answerText": "Söz və ifadə tezlikləri", + "isCorrect": "true" + }, + { + "answerText": "Söz və ifadə kitabxanası", + "isCorrect": "false" + } + ] + }, + { + "questionText": "N-qram bunu bildirir", + "answerOptions": [ + { + "answerText": "Mətn müəyyən uzunluqdakı sözlər ardıcıllığına bölünə bilər", + "isCorrect": "true" + }, + { + "answerText": "Söz müəyyən uzunluqdakı simvol ardıcıllığına bölünə bilər", + "isCorrect": "false" + }, + { + "answerText": "Mətn müəyyən uzunluqdakı paraqraflara bölünə bilər", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Emosionallıq analizi", + "answerOptions": [ + { + "answerText": "ifadənin müsbət və ya mənfi mənada olduğunu analiz edir", + "isCorrect": "true" + }, + { + "answerText": "emosionallıq üçün ifadəni analiz edir", + "isCorrect": "false" + }, + { + "answerText": "kədərlilik üçün ifadəni analiz edir", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 35, + "title": "NLP və tərcümə: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Sadə tərcümə", + "answerOptions": [ + { + "answerText": "sadəcə sözləri tərcümə edir", + "isCorrect": "true" + }, + { + "answerText": "cümlənin strukturunu tərcümə edir", + "isCorrect": "false" + }, + { + "answerText": "emosiyaları tərcümə edir", + "isCorrect": "false" + } + ] + }, + { + "questionText": "*Korpus* mətnlər bunu bildirir", + "answerOptions": [ + { + "answerText": "Az sayda mətnlər", + "isCorrect": "false" + }, + { + "answerText": "Çox sayda mətnlər", + "isCorrect": "true" + }, + { + "answerText": "Bir vahid mətn", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Əgər ML modelində model qurmaq üçün kifayət qədər insan tərcüməsi varsa, o _ bilər", + "answerOptions": [ + { + "answerText": "tərcümələri ixtisar edə", + "isCorrect": "false" + }, + { + "answerText": "tərcümələri standartlaşdırma", + "isCorrect": "false" + }, + { + "answerText": "tərcümələrin dəqiqliyini artıra", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 36, + "title": "NLP və tərcümə: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "TextBlob tərcümə kitabxanasının altında bu texnologiya durur:", + "answerOptions": [ + { + "answerText": "Google Translate", + "isCorrect": "true" + }, + { + "answerText": "Bing", + "isCorrect": "false" + }, + { + "answerText": "Xüsusi ML modeli", + "isCorrect": "false" + } + ] + }, + { + "questionText": "`blob.translate` istifadə edə bilmək üçün bu lazımdır:", + "answerOptions": [ + { + "answerText": "internet şəbəkəsi", + "isCorrect": "true" + }, + { + "answerText": "lüğət", + "isCorrect": "false" + }, + { + "answerText": "JavaScript", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Emosiyanı başa düşmək üçün ML yanaşması belə ola bilər:", + "answerOptions": [ + { + "answerText": "Reqressiya üsullarını əl ilə yaradılmış rəylərə və xallara tətbiq etmək və uyğunluqları axtarmaq", + "isCorrect": "false" + }, + { + "answerText": "NLP texnikalarını əl ilə yaradılan rəylərə və xallara tətbiq etmək və uyğunluqları axtarmaq", + "isCorrect": "true" + }, + { + "answerText": "Əl ilə yaradılan rəylərə və xallara Klasterləşdirmə üsullarını tətbiq etmək və uyğunluqları axtarmaq", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 37, + "title": "NLP 4: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "İnsan tərəfindən yazılmış və ya danışılan mətndən hansı məlumatları əldə edə bilərik?", + "answerOptions": [ + { + "answerText": "şablonlar və tezliklər", + "isCorrect": "false" + }, + { + "answerText": "emosiya və məna", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Emosiya analizi nədir?", + "answerOptions": [ + { + "answerText": "bir ailə yadigarının sentimental dəyərə malik olub-olmamasının öyrənilməsi", + "isCorrect": "false" + }, + { + "answerText": "təsiredici vəziyyətləri və subyektiv məlumatı sistematik olaraq müəyyən etmək, çıxarmaq, kəmiyyətləndirmək və öyrənmək üsulu", + "isCorrect": "true" + }, + { + "answerText": "kiminsə kədərli və ya xoşbəxt olduğunu söyləmək bacarığı", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Otel rəyləri dataseti, Python və emosiya təhlili istifadə edərək hansı suala cavab vermək olar?", + "answerOptions": [ + { + "answerText": "Rəylərdə ən çox istifadə olunan söz və ifadələr hansılardır?", + "isCorrect": "true" + }, + { + "answerText": "Hansı kurortda ən yaxşı hovuz var?", + "isCorrect": "false" + }, + { + "answerText": "Bu oteldə vale parkinqi var?", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 38, + "title": "NLP 4: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "NLP-nin mahiyyəti nədir?", + "answerOptions": [ + { + "answerText": "insan dilini xoşbəxt və ya kədərli qruplara bölmək", + "isCorrect": "false" + }, + { + "answerText": "bir insanın bunu etməsinə ehtiyac olmadan məna və ya hissləri şərh etmək", + "isCorrect": "true" + }, + { + "answerText": "hisslərdə normadan kənar göstəriciləri tapmaq və onları yoxlamaq", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Məlumatları təmizləyərkən nələrə diqqət edə bilərsiniz?", + "answerOptions": [ + { + "answerText": "digər dillərdə olan simvollar", + "isCorrect": "false" + }, + { + "answerText": "boş sətirlər və ya sütunlar", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Data üzərində əməliyyatlar etməzdən əvvəl məlumatlarınızı və onların çatışmazlıqlarını başa düşmək vacibdir.", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 39, + "title": "NLP 5: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Nə üçün məlumatları təhlil etməzdən əvvəl təmizləmək vacibdir?", + "answerOptions": [ + { + "answerText": "Bəzi sütunlarda çatışmayan və ya yanlış məlumatlar ola bilər", + "isCorrect": "false" + }, + { + "answerText": "Qarışıq məlumatlar dataset haqqında yanlış nəticələrə səbəb ola bilər", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Məlumatların təmizlənməsi strategiyasına bir nümunə hansıdır?", + "answerOptions": [ + { + "answerText": "xüsusi suala cavab vermək üçün faydalı olmayan sütunların/sətirlərin silinməsi", + "isCorrect": "true" + }, + { + "answerText": "fərziyyənizə uyğun gəlməyən təsdiqlənmiş dəyərləri silmək", + "isCorrect": "false" + }, + { + "answerText": "kənar göstəriciləri ayrı bir cədvələ köçürmək və uyğun olub olmadığını görmək üçün həmin cədvəl üçün hesablamaları yerinə yetirmək", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Tag sütunundan istifadə edərək məlumatları təsnif etmək faydalı ola bilər.", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 40, + "title": "NLP 5: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Datasetin məqsədi nədir?", + "answerOptions": [ + { + "answerText": "dünya üzrə mehmanxanalar üçün nə qədər mənfi və müsbət rəylər olduğunu görmək", + "isCorrect": "false" + }, + { + "answerText": "ən yaxşı oteli seçməyinizə kömək edəcək hisslər və sütunlar əlavə etmək", + "isCorrect": "true" + }, + { + "answerText": "insanların niyə xüsusi rəylər yazdığını analiz etmək", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Stop sözlər nələrdir?", + "answerOptions": [ + { + "answerText": "cümlənin hisslərini dəyişdirməyən ümumi ingilis sözləri", + "isCorrect": "false" + }, + { + "answerText": "hiss analizini sürətləndirmək üçün silə biləcəyiniz sözlər", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Sentiment təhlilini yoxlamaq üçün onun rəyçinin xalının eyni rəyə uyğun olduğundan əmin olun.", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 41, + "title": "Zaman seriyalarına giriş: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Zaman seriyasının proqnozlaşdırılması burada faydalıdır", + "answerOptions": [ + { + "answerText": "gələcək xərcləri təyin etməkdə", + "isCorrect": "false" + }, + { + "answerText": "gələcək qiymətləri təxmin etmək", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Zaman seriyası aşağıdakılardan götürülən ardıcıllıqdır:", + "answerOptions": [ + { + "answerText": "fəzada ardıcıl bərabər məsafədə yerləşən nöqtələr", + "isCorrect": "false" + }, + { + "answerText": "zamanda bərabər məsafədə yerləşən ardıcıl nöqtələr", + "isCorrect": "true" + }, + { + "answerText": "məkan və zamanda ardıcıl bərabər məsafədə yerləşən nöqtələr", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Zaman sıralarından istifadə edilə bilər:", + "answerOptions": [ + { + "answerText": "zəlzələ proqnozu", + "isCorrect": "true" + }, + { + "answerText": "kompüter görmə", + "isCorrect": "false" + }, + { + "answerText": "rəng analizi", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 42, + "title": "Zaman seriyalarına giriş: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Zaman seriyası xəttləri bunu bildirir", + "answerOptions": [ + { + "answerText": "Zamanla ölçülə bilən artımlar və azalmalar", + "isCorrect": "true" + }, + { + "answerText": "Zamanla kəmiyyət azalır", + "isCorrect": "false" + }, + { + "answerText": "Zamanla artım və azalma arasındakı boşluqlar", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Kənara çıxmalar bunlardır", + "answerOptions": [ + { + "answerText": "standart məlumat fərqinə yaxın nöqtələr", + "isCorrect": "false" + }, + { + "answerText": "standart məlumat fərqindən uzaq nöqtələr", + "isCorrect": "true" + }, + { + "answerText": "standart məlumat fərqi daxilində xal", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Zaman Seriyasının Proqnozlaşdırılması ən faydalıdır", + "answerOptions": [ + { + "answerText": "Ekonometriya", + "isCorrect": "true" + }, + { + "answerText": "Tarix", + "isCorrect": "false" + }, + { + "answerText": "Kitabxanalar", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 43, + "title": "Zaman Seriyası ARIMA: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "ARIMA açılışı", + "answerOptions": [ + { + "answerText": "AutoRegressive Integral Moving Average (AvtoReqressiv İnteqral Hərəkətli Orta)", + "isCorrect": "false" + }, + { + "answerText": "AutoRegressive Integrated Moving Action (AvtoReqressiv İnteqrasiya edilmiş Hərəkətli Fəaliyyət)", + "isCorrect": "false" + }, + { + "answerText": "AutoRegressive Integrated Moving Average (AvtoReqressiv İnteqrasiya edilmiş Hərəkətli Orta)", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Stasionarlıq buna aiddir", + "answerOptions": [ + { + "answerText": "atributları zamanla dəyişdirildikdə dəyişməyən məlumatlar", + "isCorrect": "false" + }, + { + "answerText": "zamanla yerdəyişdikdə paylanması dəyişməyən məlumatlar", + "isCorrect": "true" + }, + { + "answerText": "zaman keçdikcə paylanması dəyişən məlumatlar", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Fərqləndirmə", + "answerOptions": [ + { + "answerText": "trend və mövsümi sabitləşdirir", + "isCorrect": "false" + }, + { + "answerText": "tendensiyanı və mövsümi gücləndirir", + "isCorrect": "false" + }, + { + "answerText": "trend və mövsümi aradan qaldırır", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 44, + "title": "Zaman Seriyası ARIMA: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "ARIMA modeli zaman seriyası məlumatlarının xüsusi formasına uyğunlaşdırmaq üçün istifadə olunur", + "answerOptions": [ + { + "answerText": "mümkün qədər düz", + "isCorrect": "false" + }, + { + "answerText": "mümkün qədər yaxın", + "isCorrect": "true" + }, + { + "answerText": "səpələnmə xətləri vasitəsilə", + "isCorrect": "false" + } + ] + }, + { + "questionText": "SARIMAX bunun üçün istifadə olunur", + "answerOptions": [ + { + "answerText": "mövsümi ARIMA modellərini idarə etməyə", + "isCorrect": "true" + }, + { + "answerText": "xüsusi ARIMA modellərini idarə etməyə", + "isCorrect": "false" + }, + { + "answerText": "statistik ARIMA modellərini idarə etməyə", + "isCorrect": "false" + } + ] + }, + { + "questionText": "'İrəli gəzinti' doğrulamaya daxildir", + "answerOptions": [ + { + "answerText": "modeli təsdiqləndikcə tədricən yenidən qiymətləndirmək", + "isCorrect": "false" + }, + { + "answerText": "təsdiq edildikdən sonra modeli tədricən yenidən öyrətmək", + "isCorrect": "true" + }, + { + "answerText": "model təsdiqləndikcə tədricən yenidən konfiqurasiya etmək", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 45, + "title": "Gücləndirici öyrənmə 1: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Gücləndirici öyrənmə nədir?", + "answerOptions": [ + { + "answerText": "kiməsə nəyisə başa düşənə qədər təkrar-təkrar öyrətmək", + "isCorrect": "false" + }, + { + "answerText": "bir çox eksperiment keçirərək bəzi mühitlərdə agentin optimal davranışını deşifrə edən öyrənmə texnikası", + "isCorrect": "true" + }, + { + "answerText": "birdən çox eksperimentin necə aparılacağını başa düşmək", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Siyasət nədir?", + "answerOptions": [ + { + "answerText": "hər hansı bir vəziyyətdə atıla biləcək addımı qaytaran funksiya", + "isCorrect": "true" + }, + { + "answerText": "bir maddəni geri qaytara bilməyəcəyinizi bildirən sənəd", + "isCorrect": "false" + }, + { + "answerText": "təsadüfi məqsəd üçün istifadə olunan funksiya", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Mükafat funksiyası mühitin hər bir vəziyyəti üçün xal qaytarır.", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "true" + }, + { + "answerText": "yanlışdır", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 46, + "title": "Gücləndirici öyrənmə 1: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Q-Learning nədir?", + "answerOptions": [ + { + "answerText": "hər bir vəziyyətin “yaxşılığını” qeyd etmək mexanizmi", + "isCorrect": "false" + }, + { + "answerText": "siyasətin Q-Cədvəli ilə müəyyən edildiyi alqoritm", + "isCorrect": "false" + }, + { + "answerText": "yuxarıdakıların hər ikisi", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Q-Cədvəli təsadüfi gediş siyasətinə hansı dəyərlərə uyğundur?", + "answerOptions": [ + { + "answerText": "bütün bərabər dəyərlərə", + "isCorrect": "true" + }, + { + "answerText": "-0.25", + "isCorrect": "false" + }, + { + "answerText": "bütün fərqli dəyərlərə", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Dərsimizdə öyrənmə prosesi zamanı istismar əvəzinə kəşfiyyatdan istifadə etmək daha yaxşı idi.", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "false" + }, + { + "answerText": "yanlışdır", + "isCorrect": "true" + } + ] + } + ] + }, + { + "id": 47, + "title": "Gücləndirici öyrənmə 2: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Şahmat and Go davamlı vəziyyətləri olan oyunlardır.", + "answerOptions": [ + { + "answerText": "doğrudur", + "isCorrect": "false" + }, + { + "answerText": "yanlışdır", + "isCorrect": "true" + } + ] + }, + { + "questionText": "CartPole problemi nədir?", + "answerOptions": [ + { + "answerText": "kənar göstəricilərin aradan qaldırılması prosesi", + "isCorrect": "false" + }, + { + "answerText": "alış səbətinizi optimallaşdırmaq üçün bir üsul", + "isCorrect": "false" + }, + { + "answerText": "balanslaşdırmanın sadələşdirilmiş versiyası", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Oyunda potensial vəziyyətlərin müxtəlif ssenarilərini oynamaq üçün hansı alətdən istifadə edə bilərik?", + "answerOptions": [ + { + "answerText": "təxmin edib yoxlayaraq", + "isCorrect": "false" + }, + { + "answerText": "simulyasiya mühitləri", + "isCorrect": "true" + }, + { + "answerText": "vəziyyət dəyişməsi yoxlaması", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 48, + "title": "Gücləndirici öyrənmə 2: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Bir mühitdə bütün mümkün hərəkətləri harada müəyyənləşdiririk?", + "answerOptions": [ + { + "answerText": "metodlarda", + "isCorrect": "false" + }, + { + "answerText": "əməliyyat fəzasında", + "isCorrect": "true" + }, + { + "answerText": "əməliyyat siyahısında", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Lüğət açar-dəyəri kimi hansı cütdən istifadə etdik?", + "answerOptions": [ + { + "answerText": "(vəziyyət, əməliyyar) açar kimi, Q-Cədvəl girişi dəyər kimi", + "isCorrect": "true" + }, + { + "answerText": "açar kimi vəziyyət, dəyər kimi əməliyyat", + "isCorrect": "false" + }, + { + "answerText": "q-dəyərləri funksiyasının dəyəri açar kimi, əməliyyat isə dəyər kimi", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Q-Learning zamanı istifadə etdiyimiz hiperparametrlər hansılardır?", + "answerOptions": [ + { + "answerText": "q-cədvəl dəyəri, cari mükafat, təsadüfi əməliyyat", + "isCorrect": "false" + }, + { + "answerText": "öyrənmə dərəcəsi, endirim faktoru, kəşfiyyat/istismar faktoru", + "isCorrect": "true" + }, + { + "answerText": "məcmu mükafatlar, öyrənmə dərəcəsi, kəşfiyyat faktoru", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 49, + "title": "Real həyat tətbiqləri: Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "Maliyyə sənayesində ML tətbiqi nümunəsi nədir?", + "answerOptions": [ + { + "answerText": "NLP istifadə edərək müştəri təcrübəsini fərdiləşdirmək", + "isCorrect": "false" + }, + { + "answerText": "Xətti reqressiyadan istifadə edərək sərvətin idarə edilməsi", + "isCorrect": "true" + }, + { + "answerText": "Zaman seriyası istifadə edərək enerjinin idarə edilməsi", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Xəstəxanalar yenidən qəbulu idarə etmək üçün hansı ML texnikasından istifadə edə bilər?", + "answerOptions": [ + { + "answerText": "Klasterləşdirmə", + "isCorrect": "true" + }, + { + "answerText": "Zaman seriyası", + "isCorrect": "false" + }, + { + "answerText": "NLP", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Enerjinin idarə edilməsi üçün Zaman Seriyasından istifadə nümunəsi nədir?", + "answerOptions": [ + { + "answerText": "Hərəkət hiss edən heyvanlar", + "isCorrect": "false" + }, + { + "answerText": "Ağıllı parking sayğacları", + "isCorrect": "true" + }, + { + "answerText": "Meşə yanğınlarının izlənilməsi", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 50, + "title": "Real həyat tətbiqləri: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "Kredit kartı saxtakarlığını aşkar etmək üçün hansı ML texnikasından istifadə edilə bilər?", + "answerOptions": [ + { + "answerText": "Reqressiya", + "isCorrect": "false" + }, + { + "answerText": "Klasterləşdirmə", + "isCorrect": "true" + }, + { + "answerText": "NLP", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Meşə idarəetməsində hansı ML texnikası nümunədir?", + "answerOptions": [ + { + "answerText": "Gücləndirici öyrənmə", + "isCorrect": "true" + }, + { + "answerText": "Zaman seriyası", + "isCorrect": "false" + }, + { + "answerText": "NLP", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Səhiyyə sənayesində ML tətbiqi nümunəsi nədir?", + "answerOptions": [ + { + "answerText": "Reqressiyadan istifadə edərək şagird davranışının proqnozlaşdırılması", + "isCorrect": "false" + }, + { + "answerText": "Qruplaşdırıcıdan istifadə edərək klinik sınaqların idarə edilməsi", + "isCorrect": "true" + }, + { + "answerText": "Qruplaşdırıcıdan istifadə edərək heyvanların hərəkətinin tədqiqi", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 51, + "title": "SVR zaman seriyası : Mühazirədən əvvəl test", + "quiz": [ + { + "questionText": "SVM bunu bildirir", + "answerOptions": [ + { + "answerText": "Statistical Vector Machine (Statistik vektor maşını)", + "isCorrect": "false" + }, + { + "answerText": "Support Vector Machine (Dəstək vektor maşını)", + "isCorrect": "true" + }, + { + "answerText": "Statistical Vector Model (Statistik vektor modeli)", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bu ML texnikalarından hansı davamlı dəyərləri proqnozlaşdırmaq üçün istifadə olunur?", + "answerOptions": [ + { + "answerText": "Klasterləşdirmə", + "isCorrect": "false" + }, + { + "answerText": "Qruplaşdırma", + "isCorrect": "false" + }, + { + "answerText": "Reqressiya", + "isCorrect": "true" + } + ] + }, + { + "questionText": "Bu modellərdən hansı zaman seriyalarının proqnozlaşdırılması üçün geniş istifadə olunur?", + "answerOptions": [ + { + "answerText": "ARIMA", + "isCorrect": "true" + }, + { + "answerText": "K-Orta klasterləşdirmə", + "isCorrect": "false" + }, + { + "answerText": "Logistik Reqressiya (Logistic Regression)", + "isCorrect": "false" + } + ] + } + ] + }, + { + "id": 52, + "title": "SVR zaman seriyası: Mühazirə sonrası test", + "quiz": [ + { + "questionText": "SVR bu üsullardan hansı ilə öyrənir?", + "answerOptions": [ + { + "answerText": "Data nöqtələrinin maksimum sayına malik olan ən uyğun hiperplanın tapılması", + "isCorrect": "true" + }, + { + "answerText": "Verilənlər toplusunun ehtimal paylanmasının öyrənilməsi", + "isCorrect": "false" + }, + { + "answerText": "Datasetdə klasterlərin tapılması", + "isCorrect": "false" + } + ] + }, + { + "questionText": "SVM-lərdə nüvənin məqsədi nədir?", + "answerOptions": [ + { + "answerText": "Modelin proqnozlarının dəqiqliyini ölçmək üçün", + "isCorrect": "false" + }, + { + "answerText": "Dataseti daha yüksək ölçülü məkana çevirmək üçün", + "isCorrect": "true" + }, + { + "answerText": "Datasetin dəyərlərinin normalizasiyası", + "isCorrect": "false" + } + ] + }, + { + "questionText": "Bu modellərdən hansı datasetdə qeyri-xəttiliyi nəzərə alır?", + "answerOptions": [ + { + "answerText": "Sadə xətti reqressiya", + "isCorrect": "false" + }, + { + "answerText": "ARIMA", + "isCorrect": "false" + }, + { + "answerText": "RBF nüvəsindən istifadə edən SVR", + "isCorrect": "true" + } + ] + } + ] + } + ] + } +] + diff --git a/quiz-app/src/assets/translations/index.js b/quiz-app/src/assets/translations/index.js index 031e66710e..fb00fb01c6 100644 --- a/quiz-app/src/assets/translations/index.js +++ b/quiz-app/src/assets/translations/index.js @@ -6,6 +6,7 @@ import ja from './ja.json'; import it from './it.json'; import ptbr from './ptbr.json'; import es from './es.json'; +import az from './az.json'; //export const defaultLocale = 'en'; @@ -16,7 +17,8 @@ const messages = { ja: ja[0], it: it[0], ptbr: ptbr[0], - es: es[0] + es: es[0], + az: az[0] }; export default messages; diff --git a/translations/README.az.md b/translations/README.az.md new file mode 100644 index 0000000000..508ab4ef17 --- /dev/null +++ b/translations/README.az.md @@ -0,0 +1,147 @@ +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +# Yeni Başlayanlar üçün Maşın Öyrənməsi - Dərs Proqramı + +> 🌍 Dünya mədəniyyətləri vasitəsilə Maşın Öyrənməsini araşdırarkən dünyanı gəzin 🌍 + +Microsoft-un Bulud Advokatları, böyük məmnuniyyət hissi ilə sizə Maşın Öyrənməsi haqqında hər şeyi əhatə edən 12 həftəlik, 26 dərsdən ibarət dərs proqramını təqdim edir. Bu proqramda siz Scikit-learn kitabxanasından istifadə edərək və [Yeni başlayanlar üçün AI dərs proqramında](https://aka.ms/ai4beginners) əhatə olunmuş dərin öyrənmədən yan keçərək, **klassik maşın öyrənməsi** haqqında öyrənəcəksiniz. Bu dərsləri ['Başlayanlar üçün Data Elmi' dərs proqramımız](https://aka.ms/ds4beginners) ilə birgə aparamığınızı tövsiyyə edirik! + +Bu klassik texnikaları dünyanın bir çox yerindən olan datalara tətbiq etdiyimiz üçün bizimlə dünya üzrə səyahət edin. Hər bir dərsə dərsdən əvvəl və sonra olan quizlər, dərsi başa çatdırmaq üçün yazılı təlimatlar, həll yolu, tapşırıq və s. daxildir. Yeni bacarıqların oturuşması üçün özünü doğrultmuş praktik dərs proqramımız isə sizə tətbiq edərək öyrənməyə imkan yaradır. + +**✍️ Müəlliflərimizə qucaq dolusu təşəkkürlər** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu və Amy Boyd + +**🎨 İllüstratorlarımıza da təşəkkürlər** Tomomi Imura, Dasani Madipalli və Jen Looper + +**Microsoft Tələbə Səfirimizə, müəlliflərə, rəyçilərə və məzmun müəlliflərinə**, xüsusilə Rishit Dagli, Muhammad Sakib Khan İnan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila və Snigdha Agarvalla 🙏 xüsusi təşəkkür 🙏 edirik. + +**🤩 Microsoft Tələbə Səfirləri Eric Wanjau, Jasleen Sondhi və Vidushi Guptaya R dərslərimizə görə əlavə təşəkkür edirik!** + +# Başlayaq + +> [Bu kurs üçün lazım olan bütün əlavə resursları Microsoft Learn kolleksiyamızdan tapa bilərsiniz](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Tələbələr](https://aka.ms/student-page)**, bu kurrikulumdan istifadə etmək üçün reponu öz GitHub hesabınıza kopyalayın və tapşırıqları özünüz tək və ya qrup şəklində tamamlayın: + +- Mühazirədən əvvəl test ilə başlayın. +- Mühazirəni oxuyun və hər bir bilik yoxlamasında olan fəaliyyətləri tamamlayın. +- Həll kodunu işlətməkdənsə, dərsləri dərk edərək layihələri qurmağa çalışın; lakin bu kodlar hər bir layihə yönümlü dərsin `/solution` qovluğunda mövcuddur. +- Mühazirədən sonrakı quizdə iştirak edin. +- Problemi həll edin. +- Tapşırığı tamamlayın. +- Dərsi tamamladıqdan sonra [Müzakirə Platformasına](https://github.com/microsoft/ML-For-Beginners/discussions) daxil olun və müvafiq PAT rubrikasını dolduraraq "yüksək səslə öyrənin". 'PAT' öyrənmənizi davam etdirmək üçün doldurduğunuz "Progress Assessment Tool"(Tərəqqi Qiymətləndirmə Aləti)-dir. Birlikdə öyrənməyiniz üçün digər PAT-lara da reaksiya verə bilərsiniz. + +> Əlavə oxu üçün isə bu [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) modulları və öyrənmə yollarını izləməyinizi tövsiyyə edirik. + +**Müəllimlər**, sizlər üçün bu kurrikulumdan necə istifadə etmək barədə [bəzi təkliflər hazırlamışıq](../for-teachers.md). + +--- + +## Video təlimatlar + +Bəzi dərslər qısa formada videoyazı şəklində də mövcuddur. Onları dərslərin daxilində və ya [Microsoft Developer YouTube kanalındakı "ML for Beginners" pleylistində](https://aka.ms/ml-beginners-videos) aşağıdakı şəkilə klikləməklə tapa bilərsiniz. + +[![Yeni başlayanlar üçün ML banneri](.././ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Komanda ilə tanış olun + +[![Promo çarx](../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Promo çarx") + +[Mohit Jaisal](https://linkedin.com/in/mohitjaisal) tərəfindən hazırlanmış **Gif**. + +> 🎥 Layihə və onu yaradan şəxslər haqqında video üçün yuxarıdakı şəklə klikləyin! + +--- + +## Pedaqogika + +Bu dərs proqramını qurarkən iki pedaqoji prinsip seçmişik: praktiki **layihə əsaslı** olmasını və **tez-tez keçirilən quizlərin** olmasını təmin etmək. Bundan əlavə, bu kurrikulum bütünlük təşkil edə bilməsi üçün ortaq bir **mövzuya** malikdir. + +Məzmunun layihələrə uyğun olmasını təmin etməklə proses tələbələr üçün daha cəlbedici olacaq və anlayışların yadda qalıcılığı artacaqdır. Bundan əlavə, dərsdən əvvəl az ballı quizlər tələbənin mövzunu öyrənmək istəyini müəyyənləşdirir, dərsdən sonra ikinci quiz isə onun daha da yadda qalmasını təmin etmiş olur. Bu kurikulum çevik və əyləncəli olmaq üçün nəzərdə tutulmuşdur, tam və ya qismən tamamlana bilər. Layihələr sadədən başlayır və 12 həftəlik dövrün sonuna yaxınlaşdıqca mürəkkəbləşir. Bu kurrikuluma həmçinin əlavə kredit kimi və ya müzakirə üçün əsas kimi istifadə edilə bilən ML-in real tətbiqləri üzərinə son söz də daxildir. + +> [Davranış Kodeksi](../CODE_OF_CONDUCT.md), [Töhfə vermək](../CONTRIBUTING.md) və [Tərcümə](../TRANSLATIONS.md) təlimatlarımızı tapın. Konstruktiv rəylərinizə açığıq! + +## Hər dərsə daxildir + +- dərslə bağlı eskiz +- əlavə video material +- video təlimatlar (yalnız bəzi dərslər) +- Mühazirədən əvvəl test +- yazılı dərs +- layihə əsaslı dərslər üçün, layihənin necə qurulmasına dair addımlı təlimatlar +- biliyin yoxlanması +- məşğələ +- əlavə oxu +- tapşırıq +- Mühazirə sonrası test + +> **Dillər haqqında qeyd**: Bu dərslər əsasən Python dilində yazılsalar da, bir çoxları R dilində də mövcuddurlar. R dilində olan dərsləri etmək üçün `/solution` qovluğuna keçməyiniz və R dərslərini axtarmağınız lazımdır. Onlara **R Markdown** faylını təmsil edən .rmd genişləndirilməsi daxildir. Bu tip fayllara, `Markdown sənədində` `kod parçaları`(R və ya digər dillərin) və `YAML başlığının`(çıxışın, məsələn PDF-in formatını müəyyən edir) birləşməsi baxa bilərik. Kodunuzu, onun nəticəsini və fikirlərinizi Markdown formatında yazmağa və bütün bunları bir arada etməyə imkan verdiyinə görə, o, data elmi üçün nümunəvi sənədləşdirmə aləti hesab olunur. Bundan əlavə, R Markdown sənədləri PDF, HTML və ya Word kimi çıxış formatlarına render oluna bilərlər. + +> **Quizlər haqqında qeyd**: Hər biri 3 sualdan ibarət olmaqla, ümumilikdə 52 quizdən ibarət olan suallar toplusu, [bu proqramda](https://gray-sand-07a10f403.1.azurestaticapps.net/?loc=az) toplanmışdır. Onlara keçid dərslərin daxilindən olsa da, quiz proqramını `quiz-app` qovluğundakı təlimatları izləyərək öz cihazında da işlədə bilərsiniz. + +| Dərsin Nömrəsi | Mövzu | Bölmə | Öyrənilmə Məqsədi | Dərsə Keçid | Müəllif | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Maşın öyrənməsinə giriş | [Giriş](../1-Introduction/translations/README.az.md) | Maşın öyrənməsinin arxasında dayanan sadə konseptləri öyrənin | [Dərs](../1-Introduction/1-intro-to-ML/translations/README.az.md) | Muhammad | +| 02 | Maşın öyrənməsinin tarixi | [Giriş](../1-Introduction/translations/README.az.md) | Bu sahənin altında yatan tarixi öyrənin | [Dərs](../1-Introduction/2-history-of-ML/translations/README.az.md) | Jen and Amy | +| 03 | Ədalətlilik and maşın öyrənməsi | [Giriş](../1-Introduction/translations/README.az.md) | Tələbələrin ML modellərini qurarkən və tətbiq edərkən ədalətlə bağlı nəzərə almalı olduqları vacib fəlsəfi məsələlər hansılardır? | [Dərs](../1-Introduction/3-fairness/translations/README.az.md) | Tomomi | +| 04 | Maşın öyrənməsi üsulları | [Giriş](../1-Introduction/translations/README.az.md) | ML tədqiqatçıları ML modellərini qurmaq üçün hansı üsullardan istifadə edirlər? | [Dərs](../1-Introduction/4-techniques-of-ML/translations/README.az.md) | Chris and Jen | +| 05 | Reqressiyaya giriş | [Reqressiya](../2-Regression/translations/README.az.md) | Reqresiyya modelləri üçün Python və Scikit-learn ilə tanış olun |
  • [Python](../2-Regression/1-Tools/translations/README.az.md)
  • [R](../2-Regression/1-Tools/solution/R/lesson_1.html)
|
  • Jen
  • Eric Wanjau
| +| 06 | Şimali Amerikada balqabaq qiymətləri 🎃 | [Reqressiya](../2-Regression/translations/README.az.md) | ML-ə hazırlıq üçün datanı vizuallaşdırın və təmizləyin |
  • [Python](../2-Regression/2-Data/translations/README.az.md)
  • [R](2-Regression/2-Data/solution/R/lesson_2.html)
|
  • Jen
  • Eric Wanjau
| +| 07 | Şimali Amerikada balqabaq qiymətləri 🎃 | [Reqressiya](../2-Regression/translations/README.az.md) | Xətti və polinom reqressiya modellərini qurun |
  • [Python](../2-Regression/3-Linear/translations/README.az.md)
  • [R](../2-Regression/3-Linear/solution/R/lesson_3.html)
|
  • Jen and Dmitry
  • Eric Wanjau
| +| 08 | Şimali Amerikada balqabaq qiymətləri 🎃 | [Reqressiya](../2-Regression/translations/README.az.md) | Logistik reqressiya modeli qurun |
  • [Python](../2-Regression/4-Logistic/translations/README.az.md)
  • [R](../2-Regression/4-Logistic/solution/R/lesson_4.html)
|
  • Jen
  • Eric Wanjau
| +| 09 | Veb Tətbiq 🔌 | [Veb Tətbiq](../3-Web-App/translations/README.az.md) | Öyrədilmiş modelinizdən istifadə etməsi üçün veb tətbiq yaradın | [Python](../3-Web-App/1-Web-App/translations/README.az.md) | Jen | +| 10 | Qruplaşdırmaya giriş | [Qruplaşdırma](../4-Classification/translations/README.az.md) | Datanızı təmizləyin, hazır formaya gətirin və vizuallaşdırın; qruplaşdırmaya giriş |
  • [Python](4-Classification/1-Introduction/translations/README.az.md)
  • [R](../4-Classification/1-Introduction/solution/R/lesson_10.html) |
    • Jen and Cassie
    • Eric Wanjau
    | +| 11 | Dadlı Asiya və Hindistan mətbəxi 🍜 | [Qruplaşdırma](../4-Classification/translations/README.az.md) | Qruplaşdırıcılara giriş |
    • [Python](../4-Classification/2-Classifiers-1/translations/README.az.md)
    • [R](../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
      • Jen and Cassie
      • Eric Wanjau
      | +| 12 | Dadlı Asiya və Hindistan mətbəxi 🍜 | [Qruplaşdırma](../4-Classification/translations/README.az.md) | Daha çox qruplaşdırıcılar |
      • [Python](../4-Classification/3-Classifiers-2/translations/README.az.md)
      • [R](../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
        • Jen and Cassie
        • Eric Wanjau
        | +| 13 | Dadlı Asiya və Hindistan mətbəxi 🍜 | [Qruplaşdırma](../4-Classification/translations/README.az.md) | Modelinizdən istifadə edərək tövsiyələr verən veb tətbiq yaradın | [Python](4-Classification/4-Applied/translations/README.az.md) | Jen | +| 14 | Klasterləşdirməyə giriş | [Klasterləşdirmə](../5-Clustering/translations/README.az.md) | Datanızı təmizləyin, hazır formaya gətirin və vizuallaşdırın; klasterləşdirməyə giriş |
        • [Python](../5-Clustering/1-Visualize/translations/README.az.md)
        • [R](../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
          • Jen
          • Eric Wanjau
          | +| 15 | Nigeriya musiqi zövqlərini kəşf edin 🎧 | [Klasterləşdirmə](../5-Clustering/translations/README.az.md) | K-Ortalama klasterləşmə metodunu öyrənin |
          • [Python](../5-Clustering/2-K-Means/translations/README.az.md)
          • [R](../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
            • Jen
            • Eric Wanjau
            | +| 16 | Təbii dil emalına giriş ☕️ | [Təbii dil emalı](../6-NLP/translations/README.az.md) | Sadə bot yaratmaqla NLP-in əsasları haqqında öyrənin | [Python](../6-NLP/1-Introduction-to-NLP/translations/README.az.md) | Stephen | +| 17 | Yayğın NLP tapşırıqları ☕️ | [Təbii dil emalı](../6-NLP/translations/README.az.md) | Dil strukturları ilə işləyən zaman tələb olunan ümumi tapşırıqlar ilə NLP biliyinizi dərinləşdirin | [Python](../6-NLP/2-Tasks/translations/README.az.md) | Stephen | +| 18 | Tərcümə və hiss analizi ♥️ | [Təbii dil emalı](../6-NLP/translations/README.az.md) | Ceyn Ostin ilə tərcümə və hisslərin analizi | [Python](../6-NLP/3-Translation-Sentiment/translations/README.az.md) | Stephen | +| 19 | Avropanın romantik otelləri ♥️ | [Təbii dil emalı](../6-NLP/translations/README.az.md) | Otel rəyləri ilə təəssürat analizi 1 | [Python](../6-NLP/4-Hotel-Reviews-1/translations/README.az.md) | Stephen | +| 20 | Avropanın romantik otelləri ♥️ | [Təbii dil emalı](../6-NLP/translations/README.az.md) | Otel rəyləri ilə təəssürat analizi 2 | [Python](../6-NLP/5-Hotel-Reviews-2/translations/README.az.md) | Stephen | +| 21 | Zaman seriyası proqnozlaşdırmasına giriş | [Zaman seriyaları](../7-TimeSeries/translations/README.az.md) | Zaman seriyası proqnozlaşdırmasına giriş | [Python](../7-TimeSeries/1-Introduction/translations/README.az.md) | Francesca | +| 22 | ⚡️ Dünya üzrə enerji istifadəsi ⚡️ - ARIMA ilə zaman seriyalarının proqnozlaşdırılması | [Zaman seriyaları](../7-TimeSeries/translations/README.az.md) | ARIMA ilə zaman seriyalarının proqnozu | [Python](../7-TimeSeries/2-ARIMA/translations/README.az.md) | Francesca | +| 23 | ⚡️ Dünya üzrə enerji istifadəsi ⚡️ - SVR ilə zaman seriyalarının proqnozlaşdırılması | [Zaman seriyaları](../7-TimeSeries/translations/README.az.md) | Dəstək Vektor Reqressoru ilə zaman seriyalarının proqnozu | [Python](../7-TimeSeries/3-SVR/translations/README.az.md) | Anirban | +| 24 | Gücləndirici öyrənməyə giriş | [Gücləndirici öyrənmə](../8-Reinforcement/translations/README.az.md) | Q-Öyrənməsi ilə gücləndirici öyrənməyə giriş | [Python](../8-Reinforcement/1-QLearning/translations/README.az.md) | Dmitry | +| 25 | Piterə canavardan qaçmağa kömək edin! 🐺 | [Gücləndirici öyrənmə](../8-Reinforcement/translations/README.az.md) | Gücləndirici Öyrənmə Gym-i | [Python](../8-Reinforcement/2-Gym/translations/README.az.md) | Dmitry | +| Son söz | Real-Dünya ML ssenariləri və tətbiqləri | [Real-Dünyada ML](../9-Real-World/translations/README.az.md) | Klassik ML-nin maraqlı və aşkar real dünya tətbiqləri | [Dərs](../9-Real-World/1-Applications/translations/README.az.md) | Team | +| Son söz | RAI tablosundan istifadə edərək ML-də Model Sazlanması | [Real-Dünyada ML](../9-Real-World/translations/README.az.md) | RAI tablosundan istifadə edərək ML-də Model Sazlanması | [Dərs](../9-Real-World/2-Debugging-ML-Models/translations/README.az.md) | Ruth Yakubu | + +> [Bu kurs üçün lazım olan bütün əlavə resursları Microsoft Learn kolleksiyamızdan tapa bilərsiniz](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Oflayn giriş + +[Docsify](https://docsify.js.org/#/) istifadə edərək bu sənədləri oflayn rejimdə də işlədə bilərsiniz. Bunun üçün, reponu kopyalayın, cihazınızda [Docsify-ı quraşdırın](https://docsify.js.org/#/quickstart) və sonra bu reponun ana qovluqda olarkən terminalda `docsify service` yazın. Veb sayt lokal hostunuzda 3000 portunda qaldırılmış olacaq: `localhost:3000`. + +## PDFlər + +Dərs proqramının pdf versiyasını [burada](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf) tapa bilərsiniz. + +## Kömək Lazımdır + +Tərcümələrə töhfə vermək istərdinizmi? Lütfən, [tərcümə təlimatlarımızı](../TRANSLATIONS.md) oxuyun və iş yükünü idarə etmək üçün [burada](https://github.com/microsoft/ML-For-Beginners/issues) şablon üzərindən `issue` yaradın. + +## Digər Dərs Proqramları + +Komandamız başqa kurslar da hazırlayır! Bunları yoxla: + +- [Yeni başlayanlar üçün AI](https://aka.ms/ai4beginners) +- [Yeni Başlayanlar üçün Data Elmi](https://aka.ms/datascience-beginners) +- [**Yeni Versiya 2.0** - Başlayanlar üçün Generativ AI](https://aka.ms/genai-beginners) +- [**YENİ** Yeni Başlayanlar üçün Kibertəhlükəsizlik](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) +- [Yeni Başlayanlar üçün Veb Proqramlaşdırma](https://aka.ms/webdev-beginners) +- [Yeni başlayanlar üçün IoT](https://aka.ms/iot-beginners) +- [Yeni başlayanlar üçün maşın öyrənməsi](https://aka.ms/ml4beginners) +- [Yeni başlayanlar üçün XR Proqramlaşdırma](https://aka.ms/xr-dev-for-beginners) +- [AI ilə Proqramlaşdırma üçün GitHub Kopilotdan istifadə](https://aka.ms/GitHubCopilotAI) \ No newline at end of file