chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)

update-translations
localizeflow[bot] 3 weeks ago
parent 6a29b8049f
commit 52aff4bf90

@ -36,8 +36,8 @@
"language_code": "et"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-10-11T11:29:27+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:25:37+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "et"
},
@ -90,8 +90,8 @@
"language_code": "et"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T17:13:13+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:25:13+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "et"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "et"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:22:25+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "et"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-10-11T11:42:07+00:00",

@ -1,123 +1,125 @@
# Masinõppe tehnikad
Masinõppe mudelite ja nende kasutatava andmete loomise, kasutamise ja hooldamise protsess erineb oluliselt paljudest teistest arendusvoogudest. Selles õppetükis selgitame seda protsessi ja toome välja peamised tehnikad, mida peate teadma. Te saate:
Masinõppemudelite loomise, kasutamise ja hooldamise protsess ning andmed, mida nad kasutavad, on väga erinev paljudest teistest arendusvoogudest. Selles õppetükis demüstifitseerime protsessi ja anname ülevaate peamistest tehnikatest, mida on vaja teada. Sa:
- Mõista masinõppe aluseks olevaid protsesse üldisel tasemel.
- Uurida põhimõisteid nagu "mudelid", "ennustused" ja "treeningandmed".
- Mõistad masinõppe alusprotsesse ülevaatlikult.
- Uurite põhimõisteid nagu „mudelid“, „ennustused“ ja „õppematerjalid“.
## [Eelloengu viktoriin](https://ff-quizzes.netlify.app/en/ml/)
## [Eelõppe viktoriin](https://ff-quizzes.netlify.app/en/ml/)
[![Masinõpe algajatele - Masinõppe tehnikad](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "Masinõpe algajatele - Masinõppe tehnikad")
[![ML algajatele - Masinõppe tehnikad](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML algajatele - Masinõppe tehnikad")
> 🎥 Klõpsake ülaloleval pildil, et vaadata lühivideot, mis käsitleb seda õppetundi.
> 🎥 Klõpsa ülaloleval pildil, et vaadata lühikest videot, mis läbib selle õppetüki.
## Sissejuhatus
Üldisel tasemel koosneb masinõppe (ML) protsesside loomise kunst mitmest etapist:
Kõrgemal tasemel koosneb masinõppe (ML) protsesside loomine mitmest etapist:
1. **Küsimuse määratlemine**. Enamik ML-protsesse algab küsimuse esitamisega, millele ei saa vastata lihtsa tingimusliku programmi või reeglipõhise mootoriga. Need küsimused keskenduvad sageli ennustustele, mis põhinevad andmekogumil.
2. **Andmete kogumine ja ettevalmistamine**. Küsimusele vastamiseks on vaja andmeid. Teie andmete kvaliteet ja mõnikord ka kogus määravad, kui hästi saate oma algsele küsimusele vastata. Andmete visualiseerimine on selle etapi oluline osa. See etapp hõlmab ka andmete jagamist treening- ja testimisgruppideks, et mudelit ehitada.
3. **Treeningmeetodi valimine**. Sõltuvalt teie küsimusest ja andmete olemusest peate valima, kuidas soovite mudelit treenida, et see kõige paremini kajastaks teie andmeid ja teeks täpseid ennustusi. See ML-protsessi osa nõuab spetsiifilist ekspertiisi ja sageli märkimisväärset katsetamist.
4. **Mudeli treenimine**. Kasutades oma treeningandmeid, kasutate erinevaid algoritme, et treenida mudelit andmetes mustrite äratundmiseks. Mudel võib kasutada sisemisi kaalusid, mida saab kohandada, et eelistada teatud andmeosi teiste ees, et luua parem mudel.
5. **Mudeli hindamine**. Kasutate varem nägemata andmeid (oma testimisandmeid) kogutud komplektist, et näha, kuidas mudel toimib.
6. **Parameetrite häälestamine**. Mudeli toimivuse põhjal saate protsessi uuesti läbi teha, kasutades erinevaid parameetreid või muutujaid, mis kontrollivad mudeli treenimiseks kasutatud algoritmide käitumist.
1. **Küsimuse valimine**. Enamik ML protsesse algab küsimusest, millele ei saa vastata lihtsa tingimusprogrammi või reeglitel põhineva mootoriga. Need küsimused keerlevad sageli andmekogumi põhjal tehtavate ennustuste ümber.
2. **Andmete kogumine ja ettevalmistamine**. Küsimusele vastamiseks on vaja andmeid. Andmete kvaliteet ja mõnikord ka hulk määravad, kui hästi saate oma algset küsimust vastata. Andmete visualiseerimine on selle etapi oluline osa. Käesolev etapp hõlmab ka andmete jagamist treening- ja testimisrühmadeks mudeli ehitamiseks.
3. **Õppemeetodi valimine**. Sõltuvalt küsimusest ja andmete olemusest peate valima, kuidas mudelit treenida, et kõige paremini andmeid kajastada ja teha täpseid ennustusi. See on ML protsessi osa, mis nõuab eriteadmisi ja sageli ka rohkelt katsetamist.
4. **Mudeli treenimine**. Kasutades treeningandmeid, kasutate erinevaid algoritme, et treenida mudelit, mis tunneb ära mustreid andmetes. Mudel võib kasutada sisemisi kaalusid, mida saab kohandada, et anda teatud andmeosadele eelistust parema mudeli loomiseks.
5. **Mudeli hindamine**. Kasutate esmakordselt nägemata andmeid (testandmed) oma kogumist, et näha, kuidas mudel toimib.
6. **Parameetrite häälestamine**. Tuginedes mudeli jõudlusele, saate protsessi läbi teha uuesti, kasutades erinevaid parameetreid või muutujaid, mis kontrollivad algoritmide käitumist mudeli treenimiseks.
7. **Ennustamine**. Kasutage uusi sisendeid, et testida mudeli täpsust.
## Millist küsimust esitada
## Millist küsimust küsida
Arvutid on eriti osavad andmetes peidetud mustrite avastamisel. See oskus on väga kasulik teadlastele, kellel on küsimusi antud valdkonna kohta, millele ei saa lihtsalt vastata tingimuslikult põhineva reeglimootoriga. Näiteks aktuaari ülesande puhul võib andmeteadlane koostada käsitsi loodud reeglid suitsetajate ja mittesuitsetajate suremuse kohta.
Arvutid on eriti osavad varjatud mustrite avastamisel andmetes. See omadus on väga kasulik teadlastele, kellel on küsimusi antud valdkonna kohta, millele ei saa lihtsalt tingimusel põhineva reeglimootoriga vastata. Näiteks aktuaariülesandes võib andmeteadlane koostada käsitsi loodud reegleid suitsetajate ja mitte-suitsetajate suremuse kohta.
Kui võrrandisse tuuakse palju muid muutujaid, võib ML-mudel osutuda tõhusamaks, et ennustada tulevasi suremuse määrasid varasema terviseajaloo põhjal. Rõõmsam näide võiks olla aprillikuu ilmaprognooside tegemine antud asukohas, kasutades andmeid, mis hõlmavad laius- ja pikkuskraadi, kliimamuutusi, ookeani lähedust, jugavoolu mustreid ja palju muud.
Kui võetakse arvesse palju teisi muutujaid, võib masinõppemudel olla efektiivsem tulevaste suremusmäärade ennustamiseks varasema terviseandmete põhjal. Rõõmsam näide võib olla aprilli kuu ilmaennustuse tegemine antud asukoha kohta, põhinedes andmetel, mis sisaldavad laiust, pikkust, kliimamuutust, lähedust ookeanile, jetivoolu mustreid ja palju muud.
✅ See [slaidiesitlus](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) ilmamudelite kohta pakub ajaloolist perspektiivi ML-i kasutamiseks ilmaanaluüsi tegemisel.
✅ See [slaidikomplekt](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) ilma mudelite kohta pakub ajaloolist perspektiivi masinõppe kasutamise kohta ilmaanalüüsis.
## Ehituseelne töö
## Enne ehitamise ülesanded
Enne mudeli ehitamist on mitmeid ülesandeid, mida peate täitma. Oma küsimuse testimiseks ja hüpoteesi loomiseks mudeli ennustuste põhjal peate tuvastama ja seadistama mitmeid elemente.
Enne mudeli ehitamise alustamist tuleb sooritada mitu ülesannet. Selleks, et testida oma küsimust ja vormida hüpoteesi mudeli ennustuste põhjal, peate kindlaks tegema ja seadistama mitmed elemendid.
### Andmed
Küsimusele kindlusega vastamiseks vajate piisavalt õiget tüüpi andmeid. Sellel hetkel peate tegema kaks asja:
Et küsimusele kindlusega vastata, on vaja head kogust andmeid õiges formaadis. Sel hetkel tuleb teha kaks asja:
- **Andmete kogumine**. Pidades silmas eelmist õppetundi andmeanalüüsi õiglusest, koguge oma andmeid hoolikalt. Olge teadlik nende andmete allikatest, võimalikest sisemistest kallutustest ja dokumenteerige nende päritolu.
- **Andmete ettevalmistamine**. Andmete ettevalmistamise protsess hõlmab mitmeid samme. Võib-olla peate andmeid koondama ja normaliseerima, kui need pärinevad erinevatest allikatest. Andmete kvaliteeti ja kvantiteeti saab parandada mitmel viisil, näiteks teisendades stringe numbriteks (nagu teeme [klasterdamises](../../5-Clustering/1-Visualize/README.md)). Võite ka luua uusi andmeid, mis põhinevad algsetel andmetel (nagu teeme [klassifitseerimises](../../4-Classification/1-Introduction/README.md)). Andmeid saab puhastada ja redigeerida (nagu teeme enne [veebirakenduse](../../3-Web-App/README.md) õppetundi). Lõpuks võib osutuda vajalikuks andmete juhuslikustamine ja segamine, sõltuvalt teie treeningtehnikatest.
- **Koguge andmed**. Pidades meeles eelmist õppetundi õiglusest andmeanalüüsis, koguge andmed hoolikalt. Olge teadlik andmete allikatest, võimalike kallutatuste olemasolust ja dokumenteerige selle päritolu.
- **Valmistage andmed ette**. Andmete ettevalmistamise protsessis on mitu sammu. Võite vajada andmete kogumist ja normaliseerimist, kui need pärinevad erinevatest allikatest. Andmete kvaliteeti ja hulka saab parandada erinevate meetoditega, näiteks konverteerides stringid numbriteks (nagu teeme [klastris](../../5-Clustering/1-Visualize/README.md)). Samuti võite genereerida uusi andmeid, lähtudes algsetest andmetest (nagu teeme [klassifitseerimises](../../4-Classification/1-Introduction/README.md)). Andmeid saab puhastada ja redigeerida (nagu teeme enne [veebirakenduse](../../3-Web-App/README.md) õpetust). Lõpuks võib olla vajalik andmete juhuslikustamine ja segamine, sõltuvalt teie õppetehnikatest.
✅ Pärast andmete kogumist ja töötlemist võtke hetk, et näha, kas nende kuju võimaldab teil vastata kavandatud küsimusele. Võib juhtuda, et andmed ei tööta teie antud ülesandes hästi, nagu avastame [klasterdamise](../../5-Clustering/1-Visualize/README.md) õppetundides!
✅ Pärast andmete kogumist ja töötlemist võtke hetk, et hinnata, kas andmete kuju võimaldab teil esitatud küsimusele vastata. Võib-olla ei sobi andmed teie ülesande jaoks hästi, nagu avastame meie [klastrite](../../5-Clustering/1-Visualize/README.md) õppetundides!
### Omadused ja sihtmärk
### Tunnused ja sihtmärk
[Omadus](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) on teie andmete mõõdetav omadus. Paljudes andmekogumites väljendatakse seda veerupäisena, näiteks "kuupäev", "suurus" või "värv". Teie omadusmuutuja, mida tavaliselt tähistatakse koodis `X`, esindab sisendmuutujat, mida kasutatakse mudeli treenimiseks.
[Tunnus](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) on andmete mõõdetav omadus. Paljudes andmekogumites väljendub see veerupäisena nagu „kuupäev“, „suurus“ või „värv“. Teie tunnuse muutuja, tavaliselt koodis tähistatud `X`-ga, esindab sisendmuutujat, mida kasutatakse mudeli treenimiseks.
Sihtmärk on asi, mida proovite ennustada. Sihtmärk, mida tavaliselt tähistatakse koodis `y`, esindab vastust küsimusele, mida proovite oma andmetelt küsida: detsembris, milline **värv** kõrvitsatest on kõige odavam? San Franciscos, millised naabruskonnad pakuvad parimat kinnisvara **hinda**? Mõnikord viidatakse sihtmärgile ka kui sildi atribuudile.
Sihtmärk on see, mida püüate ennustada. Sihtmärk, tavaliselt tähistatud koodis `y`-ga, esindab küsimusele, mida esitate oma andmetele, vastust: detsembris, mis värvi kõrvitsad on odavaimad? San Franciscos, millistel linnaosadel on parim kinnisvara hind? Mõnikord nimetatakse sihtmärki ka sildi atribuudi nimega.
### Omadusmuutuja valimine
### Tunnuse muutuja valimine
🎓 **Omaduste valik ja omaduste ekstraheerimine** Kuidas valida, millist muutujat mudeli ehitamisel kasutada? Tõenäoliselt läbite protsessi, kus valite omaduste valiku või ekstraheerimise abil õiged muutujad kõige paremini toimiva mudeli jaoks. Need pole siiski samad: "Omaduste ekstraheerimine loob uusi omadusi algsete omaduste funktsioonidest, samas kui omaduste valik tagastab omaduste alamhulga." ([allikas](https://wikipedia.org/wiki/Feature_selection))
🎓 **Tunnuse valik ja tunnuse ekstraheerimine** Kuidas valida muutuja mudeli ehitamisel? Tõenäoliselt läbite tunnuse valiku või tunnuse ekstraheerimise protsessi, et valida kõige sobivamad muutujad parima jõudlusega mudeli jaoks. Need pole siiski sama asi: "Tunnuse ekstraheerimine loob uusi tunnuseid originaaltunnuste funktsioonidest, samas kui tunnuse valik tagastab tunnuste alamhulga." ([allikas](https://wikipedia.org/wiki/Feature_selection))
### Andmete visualiseerimine
### Visualiseeri oma andmeid
Andmeteadlase tööriistakomplekti oluline aspekt on võime visualiseerida andmeid, kasutades mitmeid suurepäraseid teeke, nagu Seaborn või MatPlotLib. Andmete visuaalne esitamine võib võimaldada teil avastada peidetud korrelatsioone, mida saate ära kasutada. Teie visualisatsioonid võivad aidata teil avastada kallutatust või tasakaalustamata andmeid (nagu avastame [klassifitseerimises](../../4-Classification/2-Classifiers-1/README.md)).
Andmeteadlase tööriistakasti oluline aspekt on võime visualiseerida andmeid, kasutades mitmeid suurepäraseid raamistikke nagu Seaborn või MatPlotLib. Andmete visuaalne esitamine võib aidata teil avastada varjatud korrelatsioone, mida saate ära kasutada. Teie visualiseeringud võivad aidata ka avastada kallutatust või ebatasakaalustatud andmeid (nagu avastame [klassifitseerimises](../../4-Classification/2-Classifiers-1/README.md)).
### Andmekogumi jagamine
### Jagage oma andmekogum
Enne treenimist peate jagama oma andmekogumi kaheks või enamaks ebavõrdse suurusega osaks, mis siiski esindavad andmeid hästi.
Enne treenimist peate jagama oma andmekogu kahte või enamasse ebavõrdsesse ossa, mis siiski andmeid hästi esindavad.
- **Treening**. See osa andmekogumist sobitatakse teie mudeliga, et seda treenida. See komplekt moodustab suurema osa algsest andmekogumist.
- **Testimine**. Testandmekogum on sõltumatu andmete grupp, mis sageli kogutakse algsetest andmetest ja mida kasutatakse ehitatud mudeli toimivuse kinnitamiseks.
- **Valideerimine**. Valideerimiskomplekt on väiksem sõltumatu näidete grupp, mida kasutatakse mudeli hüperparameetrite või arhitektuuri häälestamiseks, et mudelit täiustada. Sõltuvalt teie andmete suurusest ja küsimusest, mida esitate, ei pruugi teil olla vaja seda kolmandat komplekti luua (nagu märgime [ajasarja prognoosimise](../../7-TimeSeries/1-Introduction/README.md) õppetundides).
- **Treening**. See osa andmekogumist sobitub mudeliga selle treenimiseks. See komplekt moodustab enamikku algsest andmekogumist.
- **Testimine**. Testandmekogu on sõltumatu andmed rühm, sageli kogutud algsetest andmetest, mida kasutatakse ehitatud mudeli jõudluse kinnitamiseks.
- **Kinnitamine**. Kinnitamise komplekt on väiksem sõltumatu näidiste kogum, mida kasutatakse mudeli hüperparameetrite või arhitektuuri häälestamiseks mudeli parandamiseks. Sõltuvalt andmete suurusest ja küsimusest, mida esitate, ei pruugi olla vaja seda kolmandat komplekti luua (nagu märgime [aegrea ennustamises](../../7-TimeSeries/1-Introduction/README.md)).
## Mudeli ehitamine
Kasutades oma treeningandmeid, on teie eesmärk ehitada mudel ehk teie andmete statistiline esitus, kasutades erinevaid algoritme selle **treenimiseks**. Mudeli treenimine võimaldab sellel andmetega tutvuda ja teha oletusi tajutud mustrite kohta, mida see avastab, valideerib ja aktsepteerib või lükkab tagasi.
Kasutades treeningandmeid, on eesmärgiks ehitada mudel ehk statistiline andmete esitlus, kasutades erinevaid algoritme selle **treenimiseks**. Mudeli treenimine eksponeerib seda andmetele ja võimaldab tal teha oletusi avastatud mustrite kohta, kinnitada neid ja vastu võtta või tagasi lükata.
### Treeningmeetodi valimine
### Õppemeetodi valimine
Sõltuvalt teie küsimusest ja andmete olemusest valite meetodi selle treenimiseks. Läbi käies [Scikit-learn'i dokumentatsiooni](https://scikit-learn.org/stable/user_guide.html) - mida me selles kursuses kasutame - saate uurida mitmeid viise mudeli treenimiseks. Sõltuvalt teie kogemustest peate võib-olla proovima mitmeid erinevaid meetodeid, et ehitada parim mudel. Tõenäoliselt läbite protsessi, kus andmeteadlased hindavad mudeli toimivust, toites sellele varem nägemata andmeid, kontrollides täpsust, kallutatust ja muid kvaliteeti halvendavaid probleeme ning valides ülesande jaoks kõige sobivama treeningmeetodi.
Sõltuvalt küsimusest ja andmete olemusest valite, kuidas mudelit treenida. Läbides [Scikit-learni dokumentatsiooni](https://scikit-learn.org/stable/user_guide.html) mida selles kursuses kasutame saate uurida mitmeid viise, kuidas mudelit treenida. Oma kogemuse põhjal võib teil olla vaja proovida mitut erinevat meetodit parima mudeli ehitamiseks. Tõenäoliselt läbite protsessi, kus andmeteadlased hindavad mudeli jõudlust, pakkudes sellele nägemata andmeid, kontrollides täpsust, kallutatust ja muid kvaliteeti halvendavaid tegureid ning valides ülesande jaoks kõige sobivama õppemeetodi.
### Mudeli treenimine
Relvastatud oma treeningandmetega olete valmis neid "sobitama", et luua mudel. Märkate, et paljudes ML-teekides leiate koodi "model.fit" - just sel ajal saadate oma omadusmuutuja väärtuste massiivina (tavaliselt "X") ja sihtmuutuja (tavaliselt "y").
Varustatuna treeningandmetega olete valmis mudelit „sobitama“. Paljuski leiab paljudes ML raamistikus koodi 'model.fit' just sel hetkel saadate oma tunnuse muutuja väärtuste massiivi (tavaliselt 'X') ja sihtmuutuja (tavaliselt 'y').
### Mudeli hindamine
Kui treenimisprotsess on lõpule jõudnud (suure mudeli treenimiseks võib kuluda palju iteratsioone ehk "epohhe"), saate mudeli kvaliteeti hinnata, kasutades testandmeid selle toimivuse mõõtmiseks. Need andmed on algsete andmete alamhulk, mida mudel pole varem analüüsinud. Saate printida välja tabeli mudeli kvaliteedi mõõdikutega.
Kui treenimisprotsess on lõpule jõudnud (suurte mudelite treenimine võib võtta mitu iteratsiooni ehk "epohhi"), saate mudeli kvaliteeti hinnata, kasutades testandmeid tema jõudluse mõõtmiseks. Need andmed on alamhulk algsetest andmetest, mida mudel pole varem analüüsinud. Saate printida mudeli kvaliteedi mõõdikute tabeli.
🎓 **Mudeli sobitamine**
Masinõppe kontekstis viitab mudeli sobitamine mudeli aluseks oleva funktsiooni täpsusele, kui see üritab analüüsida andmeid, millega see pole tuttav.
Masinõppe kontekstis viitab mudeli sobitamine mudeli aluseks oleva funktsiooni täpsusele, kui ta proovib analüüsida andmeid, millega tal veel kogemusi pole.
🎓 **Alasobitamine** ja **ülesobitamine** on levinud probleemid, mis halvendavad mudeli kvaliteeti, kuna mudel sobitub kas liiga halvasti või liiga hästi. See põhjustab mudeli ennustusi, mis on kas liiga tihedalt seotud või liiga lõdvalt seotud treeningandmetega. Ülesobitunud mudel ennustab treeningandmeid liiga hästi, kuna see on õppinud andmete üksikasju ja müra liiga hästi. Alasobitunud mudel pole täpne, kuna see ei suuda täpselt analüüsida ei oma treeningandmeid ega andmeid, mida see pole veel "näinud".
🎓 **Alasobitamine** ja **ülesobitamine** on levinud probleemid, mis vähendavad mudeli kvaliteeti, kui mudel kas ei sobitu piisavalt hästi või sobitub liiga täpselt. Selline olukord põhjustab, et mudel teeb ennustusi kas liiga rangelt või liiga vabalt sobitudes oma treeningandmetega. Ülesobitatud mudel ennustab treeningandmeid liiga hästi, kuna on õppinud andmete detailid ja müra liiga põhjalikult. Alasobitatud mudel ei ole täpne, kuna ei suuda täpselt analüüsida ei oma treeningandmeid ega ka varem "nägemata" andmeid.
![ülesobitunud mudel](../../../../translated_images/et/overfitting.1c132d92bfd93cb6.webp)
> Infograafik: [Jen Looper](https://twitter.com/jenlooper)
![ülesobitatud mudel](../../../../translated_images/et/overfitting.1c132d92bfd93cb6.webp)
> Infograafika autor: [Jen Looper](https://twitter.com/jenlooper)
## Parameetrite häälestamine
Kui teie algne treenimine on lõpule jõudnud, jälgige mudeli kvaliteeti ja kaaluge selle parandamist, kohandades selle "hüperparameetreid". Lugege selle protsessi kohta rohkem [dokumentatsioonis](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
Kui esmane treening on tehtud, jälgige mudeli kvaliteeti ja kaalutlege selle parandamist, häälestades selle „hüperparameetreid“. Selle protsessi kohta lugege rohkem [dokumentatsioonist](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Ennustamine
See on hetk, mil saate kasutada täiesti uusi andmeid, et testida mudeli täpsust. Rakendatud ML-i seadetes, kus ehitate veebivarasid mudeli kasutamiseks tootmises, võib see protsess hõlmata kasutaja sisendi kogumist (näiteks nupuvajutus), et määrata muutuja ja saata see mudelile järeldamiseks või hindamiseks.
See on hetk, kus saate kasutada täiesti uusi andmeid, et testida mudeli täpsust. Rakendusliku ML keskkonnas, kus ehitate veebivarasid mudeli kasutamiseks tootmises, võib see protsess hõlmata kasutajasisendi kogumist (näiteks nupu vajutuse) muutuja seadmiseks ja mudelile edastamiseks inferentsiks ehk hinnanguks.
Nendes õppetundides avastate, kuidas kasutada neid samme andmete ettevalmistamiseks, mudeli ehitamiseks, testimiseks, hindamiseks ja ennustamiseks - kõik andmeteadlase žestid ja palju muud, kui edendate oma teekonda "täisstack" ML-inseneriks saamiseks.
Nendes õppetundides avastate, kuidas neid samme kasutada ettevalmistamiseks, ehitamiseks, testimiseks, hindamiseks ja ennustamiseks kõik need on andmeteadlase žestid ja palju muud kui te arendate end täispaketi masinõppe inseneriks.
---
## 🚀Väljakutse
Joonistage vooskeem, mis kajastab ML-praktiku samme. Kus näete end praegu protsessis? Kus ennustate, et teil võib tekkida raskusi? Mis tundub teile lihtne?
Joonista vooskeem, mis peegeldab masinõppe praktikandi samme. Kus sa hetkel protsessis seisad? Kus arvad, et võivad tekkida raskused? Mis tundub sulle kerge?
## [Järelloengu viktoriin](https://ff-quizzes.netlify.app/en/ml/)
## [Pärastloengu viktoriin](https://ff-quizzes.netlify.app/en/ml/)
## Ülevaade ja iseseisev õppimine
## Kordamine ja iseseisev õppimine
Otsige veebist intervjuusid andmeteadlastega, kes räägivad oma igapäevasest tööst. Siin on [üks](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Otsi internetist intervjuusid andmeteadlastega, kes räägivad oma igapäevatööst. Siin on [üks](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Ülesanne
## Kodune ülesanne
[Intervjueerige andmeteadlast](assignment.md)
[Intervjueeri andmeteadlast](assignment.md)
---
**Lahtiütlus**:
See dokument on tõlgitud AI tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vastutusest loobumine**:
See dokument on tõlgitud AI tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame täpsust, palun pange tähele, et automatiseeritud tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument oma emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste ega valesti tõlgendamise eest.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,136 +1,136 @@
# Ehita regressioonimudel kasutades Scikit-learn'i: regressioon neljal moel
# Regresseerimudeli loomine Scikit-learni abil: regressioon neli moodi
## Algaja märkus
Lineaarset regressiooni kasutatakse siis, kui soovime ennustada **numbrilist väärtust** (näiteks maja hind, temperatuur või müük).
See toimib, leides sirgjoone, mis kõige paremini esindab seost sisendomaduste ja väljundi vahel.
Lineaarset regressiooni kasutatakse siis, kui soovime ennustada **numbrilist väärtust** (näiteks maja hind, temperatuur või müük).
See töötab, leides sirgjoone, mis kõige paremini kirjeldab seost sisendiomaduste ja väljundi vahel.
Selles õppetükis keskendume mõiste mõistmisele enne kui uurime keerukamaid regressioonitehnikaid.
![Lineaarne vs polünoomne regressioon infograafik](../../../../translated_images/et/linear-polynomial.5523c7cb6576ccab.webp)
> Infograafik autorilt [Dasani Madipalli](https://twitter.com/dasani_decoded)
Selles õppetükis keskendume esmalt mõiste mõistmisele, enne kui uurime edasijõudnutele mõeldud regressioonitehnikaid.
![Lineaarse ja polünoomi regressiooni infograafik](../../../../translated_images/et/linear-polynomial.5523c7cb6576ccab.webp)
> Infograafiku autor on [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Loengu-eelne viktoriin](https://ff-quizzes.netlify.app/en/ml/)
> ### [See õppetükk on saadaval R keeles!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Sissejuhatus
> ### [See õppetükk on saadaval ka R-is!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Sissejuhatus
Nii kaugele oled uurinud, mis on regressioon, kasutades proovidataid kõrvitsahindade andmestikust, mida kasutame kogu selle õppetüki vältel. Sa oled ka visualiseerinud andmeid Matplotlibi abil.
Nii kaugele oled uurinud, mis on regressioon, lähtudes kõrvitsate hindade andmekogumist, mida kasutame kogu selle õppetüki vältel. Oled ka visualiseerinud seda Matplotlibiga.
Nüüd oled valmis süvenema sügavamalt regressioonisse masinõppes. Kuigi visualiseerimine aitab andmeid mõista, tuleb masinõppe tõeline jõud mudelite koolitamisest. Mudelid koolitatakse ajalooliste andmetega, et automaatselt tabada andmete seoseid, ja need võimaldavad prognoosida uusi tulemusi, mida mudel pole varem näinud.
Nüüd oled valmis regressiooni sügavamalt uurima masinõppes. Kuigi visualiseerimine võimaldab sul andmeid mõista, tuleb masinõppe tõeline võimsus mudelite _treenimisest_. Mudelid treenitakse ajalooliste andmete peal, et automaatselt tabada andmete sõltuvusi, ja need lubavad ennustada tulemusi uue andme kohta, mida mudel varem ei näinud.
Selles õppetükis õpid rohkem kahe regressioonitüübi kohta: _põhiline lineaarne regressioon_ ja _polünoomne regressioon_, koos mõne nende tehnika matemaatikaga. Need mudelid võimaldavad meil ennustada kõrvitsahindu sõltuvalt erinevatest sisendandmetest.
Selles õppetükis õpid rohkem kahest regressiooni tüübist: _lihtne lineaarne regressioon_ ja _polünoomne regressioon_, koos mõne matemaatikaga, mis neid tehnikaid aluseks on. Need mudelid lubavad ennustada kõrvitsate hinda sõltuvalt erinevatest sisendandmetest.
[![Masinõpe algajatele - Lineaarse regressiooni mõistmine](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "Masinõpe algajatele - Lineaarse regressiooni mõistmine")
> 🎥 Kliki pildil ülalpool, et vaadata lühike video ülevaade lineaarse regressiooni kohta.
> 🎥 Vajuta ülalolevale pildile, et vaadata lühike video lineaarse regressiooni ülevaatest.
> Kogu selle õppekava jooksul eeldame minimaalseid teadmisi matemaatikast ja püüame teha selle ligipääsetavaks teiste valdkondade tudengitele, seega pööra tähelepanu märkmetele, 🧮 kõrvalinfole, diagrammidele ja teistele õppimisvahenditele mõistmise hõlbustamiseks.
> Selle õppekava vältel eeldame matemaatikast vähest või üldse mitteoskust ning püüdleme selle poole, et see oleks ligipääsetav ka teiste alade tudengitele, seega hoia silm peal märkmetel, 🧮 arvutustel, diagrammidel ja muudel õppematerjalidel, mis aitavad mõistmist.
### Eelteadmised
Peaksid olema nüüd tuttav kõrvitsate andmete struktuuriga, mida me uurime. Selle leiad eellaadituna ja puhastatuna selle õppetüki _notebook.ipynb_ failist. Failis on kõrvitsahind kuvatud korvi kohta uues andmeraamis. Veendu, et suudaksid neid sülearvutieeskirju Visual Studio Code kernelites käivitada.
Nüüd peaksid olema tuttavaks saanud kõrvitsate andmete struktuuriga, mida uurime. Selle leiad eelnevalt laadituna ja puhastatuna selle õppetüki _notebook.ipynb_ failist. Seal on kõrvitsa hind toodud ühe busheli kohta uues andmekaadris. Veendu, et suudad käivitada neid märkmeid Visual Studio Code'i kerneli sees.
### Ettevalmistus
Meenutuseks, laadid neid andmeid, et esitada neile küsimusi.
Nagu meelde tuletuseks, laadid seda andmestikku, et saaksid selle kohta küsimusi esitada.
- Millal on parim aeg kõrvitsaid osta?
- Millist hinda võin oodata väikeste kõrvitsakastide eest?
- Kas peaksin ostma neid poolkorvi kaupa või 1 1/9-korviku hulka?
Jätkame selle andmestiku uurimist.
- Millal on parim aeg kõrvitsaid osta?
- Millist hinda võin oodata väikeste kõrvitsate kaubaaluse kohta?
- Kas peaksin ostma neid poolbusheli korvides või 1 1/9 busheli kastides?
Vaatleme seda andmestikku edasi.
Eelmises õppetükis lõid Pandase andmeraami ja täitsid selle osa originaalandmestikust, standardiseerides hinnad korvi kohta. Sellega suutsid koguda umbes 400 andmepunkti ja ainult sügiskuude kohta.
Eelnevas õppetükis lõid Pandase andmekaarvi ja täitsid selle originaalandmekogumi osaga, standardiseerides hinna busheli järgi. Nii toimides kogusid aga vaid umbes 400 andmepunkti ja ainult sügiskuude kohta.
Vaata andmeid, mis on eellaaditud selle õppetüki kaasnevas sülearvutis. Andmed on eellaaditud ja esimene hajuvdiagramm joonistatud näitamaks kuuandmeid. Võime saada rohkem üksikasju andmete olemuse kohta, neid rohkem puhastades.
Vaata andmeid, mis on eelnevalt laetud selle õppetüki kaasaegse märkme menüüsse. Andmed on eelnevalt laetud ja esialgne hajusdiagramm kuupäevade kohta joonistatud. Võib-olla saame andmete olemuse kohta rohkem detaili, kui need veelgi puhastada.
## Lineaarne regressioonijoon
Nagu õppisid õppetükis 1, on lineaarse regressiooni eesmärk joonistada joon, mis:
Nagu õppisid 1. õppetükis, on lineaarse regressiooni eesmärk:
- **Näitab muutujate seoseid**. Näitab muutujate omavahelist seost
- **Teeb ennustusi**. Teeb täpseid ennustusi, kus uus andmepunkt joonel paikneb.
- **Näidata muutujate seoseid.** Näidata seost muutujate vahel
- **Tee ennustusi.** Teha täpseid ennustusi, kuhu uus andmepunkt selle joone suhtes langeks
Tavaline on kasutada **väikseimruutude regressiooni**, et seda tüüpi joon joonistada. Mõiste "väikseim ruut" viitab protsessile, mille käigus minimeeritakse kogu vea summa mudelis. Iga andmepunkti jaoks mõõdame vertikaalse kauguse (nn residuaal) tegeliku punkti ja meie regressioonijoone vahel.
Tüüpiline on joonistada sellist joont **Vähimruutude regressioon** meetodiga. Mõiste "Least-Squares" viitab meetodile, kus minimeeritakse kogu mudeli viga. Iga andmepunkti kohta mõõdame vertikaalset kaugust (jäänukit) tegeliku punkti ja regressioonijoone vahel.
Me ruudutame need kaugused kahest põhjusest:
Need kaugused ruudutatakse kahe põhjusel:
1. **Suurus, mitte suund:** Soovime käsitleda viga -5 samaväärsena veaga +5. Ruudutamine muudab kõik väärtused positiivseks.
1. **Suuru üle suuna:** Soovime, et viga -5 oleks sama kui +5. Ruudutamine muudab kõik väärtused positiivseks.
2. **Outlierite karistamine:** Ruudutamine annab suurematele vigadele suurema kaalu, sundides joont jääma kaugel olevate punktide lähedusse.
2. **Hukkamõistmine väljud:** Suurematel vigadel on suurem kaal, mis sunnib joont jääma kaugete punktide lähedale.
Seejärel liidame kõik need ruudutatud väärtused kokku. Meie eesmärk on leida see konkreetne joon, kus see summa on minimaalne seega nimi "väikseim ruut".
Seejärel liidame kõik ruutväärtused kokku. Meie eesmärk on leida joon, mille kõigi jäänukruutude summa on minimaalne — seepärast nimetatakse seda "Least-Squares".
> **🧮 Näita matemaatikat**
> **🧮 Näita mulle matemaatikat**
>
> Seda joont, mida kutsutakse _parima sobivuse jooneks_, saab väljendada [valemiga](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> Seda joont, mida nimetatakse _parima sobivuse jooneks_, saab väljendada [valemiga](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` on "selgitav muutuja". `Y` on "sõltuv muutuja". Joonise tõus on `b` ja `a` on y-telgi lõikepunkt, mis tähendab väärtust `Y`, kui `X = 0`.
>
>![tõusu arvutus](../../../../translated_images/et/slope.f3c9d5910ddbfcf9.webp)
>
> Esiteks arvuta tõus `b`. Infograafik autorilt [Jen Looper](https://twitter.com/jenlooper)
>
> Teisisõnu ja viidates meie kõrvitsate andmete algsele küsimusele: "prognoosi kõrvitsa hind korvi kohta kuude kaupa", võib `X` tähistada hinda ja `Y` müügikuud.
>
>![täienda valemit](../../../../translated_images/et/calculation.a209813050a1ddb1.webp)
>
> Arvuta Y väärtus. Kui maksad umbes 4 dollarit, peab olema aprill! Infograafik autorilt [Jen Looper](https://twitter.com/jenlooper)
>
> Matemaatika, mis arvutab joone, peab näitama joone tõusu, mis sõltub ka lõikepunktist ehk kus `Y` paikneb kui `X = 0`.
>
> Selle väärtuse arvutusmeetodi võid vaadata veebisaidil [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Samuti külasta [Väikseima ruudu kalkulaatorit](https://www.mathsisfun.com/data/least-squares-calculator.html), et näha, kuidas arvude väärtused joont mõjutavad.
>
> `X` on 'selgitav muutuja'. `Y` on 'sõltuv muutuja'. Joonet tähistab kalle `b` ja y-lõikepunkt `a`, mis näitab väärtust `Y`, kui `X = 0`.
>
>![kalle arvutamine](../../../../translated_images/et/slope.f3c9d5910ddbfcf9.webp)
>
> Esiteks arvuta kalle `b`. Infograafiku autor on [Jen Looper](https://twitter.com/jenlooper)
>
> Teisisõnu, ja viidates meie kõrvitsate andmestiku algsele küsimusele: "ennusta kõrvitsa hind busheli kohta kuu järgi", tähendab `X` hinda ja `Y` müügikuud.
>
>![võrrandi lõpetamine](../../../../translated_images/et/calculation.a209813050a1ddb1.webp)
>
> Arvuta `Y` väärtus. Kui maksad umbes 4 dollarit, peab olema aprill! Infograafiku autor on [Jen Looper](https://twitter.com/jenlooper)
>
> Jooni arvutav matemaatika peab näitama kallet, mis sõltub ka lõikepunktist ehk sellest, kus `Y` asub, kui `X = 0`.
>
> Võid vaadata arvutusmeetodit [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) veebisaidilt. Samuti külasta [Vähimruutude kalkulaatorit](https://www.mathsisfun.com/data/least-squares-calculator.html), et näha, kuidas arvude väärtused joont mõjutavad.
## Korrelatsioon
Veel üks mõiste, mida mõista, on **korrelatsioonikordaja** antud X ja Y muutujate vahel. Hajuvdiagrammi abil saad seda kiiresti visualiseerida. Diagramm, kus andmepunktid on ilusti joonel, näitab kõrget korrelatsiooni, aga hajuv diagramm, kus andmepunktid on kõikjal X ja Y vahel, näitab madalat korrelatsiooni.
Veel üks termin, mida tuleb mõista, on **korrelatsioonikordaja** antud `X` ja `Y` muutujate vahel. Hajusdiagrammiga saab selle kordaja kiiresti visualiseerida. Punktide laialivalgumine sirgjoonel näitab kõrget korrelatsiooni, aga kui punktid on kogu `X` ja `Y` vahel laiali, on korrelatsioon madal.
Hea lineaarne regressioonimudel on selline, millel on kõrge (lähemal 1 kui 0) korrelatsioonikordaja, kasutades väikseimruutude regressioonimeetodit koos regressioonijoonega.
Hea lineaarne regressioonimudel on selline, millel on suur (lähemal 1 kui 0) korrelatsioonikordaja, kasutades vähimruutude regressioonimeetodit ja regressioonijoont.
✅ Käivita selle õppetüki kaasas olev sülearvuti ja vaata kuhjumist kuu ja hinna vahel. Kas andmed, mis seovad kuu ja kõrvitsahinna müüki, tunduvad visuaalse hinnangu põhjal kõrge või madala korrelatsiooniga? Kas see muutub, kui kasutad üksikasjalikumat mõõdet kui `Month`, nt *aasta päeva* (st päevade arv aasta algusest)?
✅ Käivita selle õppetüki kaasasolev märkmik ja vaata kuupäeva ja hinna hajusdiagrammi. Kas sinu visuaalse hinnangu järgi on kõrvitsamüükude puhul kuu ja hinna seos pigem tugev või nõrk? Kas see muutub, kui kasutad kuupäeva asemel graniitsemat mõõdet, nt *päeva aastas* (päevade arv aasta algusest)?
Alljärgnevas koodis eeldame, et oleme andmed puhastanud ja saame andmeraami nimega `new_pumpkins`, mis sarnaneb järgmisele:
Järgnevas koodis eeldame, et andmed on puhastatud ja meil on andmekaader nimega `new_pumpkins`, mis sarnaneb sellise tabeliga:
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
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
> Andmete puhastamise kood on saadaval [`notebook.ipynb`](notebook.ipynb) failis. Oleme teinud samad puhastusetapid nagu eelnevas õppetükis ja arvutanud `DayOfYear` veeru järgmise avaldisega:
> Andmete puhastamise kood on saadaval failis [`notebook.ipynb`](notebook.ipynb). Oleme teinud samad puhastusastmed nagu eelnevas õppetükis ning arvutanud `DayOfYear` veeru järgmiselt:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Nüüd kui sul on arusaam lineaarse regressiooni matemaatikast, loome regressioonimudeli, et näha, kas suudame ennustada, millisel kõrvitsapakendil on parim hind. Keegi, kes ostab kõrvitsaid püha kõrvitsapeenra jaoks, võib seda infot vajada, et oma ostusid optimeerida.
Nüüd, kui mõistad lineaarse regressiooni matemaatikat, loome regressioonimudeli, et näha, kas suudame ennustada, milline kõrvitsapakend annab parima hinna. Mõni, kes ostab kõrvitsaid püha kõrvitsapeenra jaoks, võiks seda infot kasutada, et optimeerida kõrvitsaostu.
## Korrelatsiooni otsimine
[![Masinõpe algajatele - korrelatsiooni otsimine: võti lineaarse regressiooni jaoks](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "Masinõpe algajatele - korrelatsiooni otsimine: võti lineaarse regressiooni jaoks")
[![Masinõpe algajatele - Korrelatsiooni otsimine: lineaarse regressiooni võti](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "Masinõpe algajatele - Korrelatsiooni otsimine: lineaarse regressiooni võti")
> 🎥 Kliki pildil ülalpool, et vaadata lühike video ülevaade korrelatsioonist.
> 🎥 Vajuta ülalolevale pildile, et vaadata lühike video korrelatsioonist.
Eelmises õppetükis nägid ilmselt, et keskmine hind kuude lõikes näeb välja selline:
Eelmisest õppetükist oled ilmselt näinud, et kuude keskmine hind näeb välja selline:
<img alt="Keskmine hind kuude lõikes" src="../../../../translated_images/et/barchart.a833ea9194346d76.webp" width="50%"/>
See viitab sellele, et peaks olema mingi korrelatsioon ja saame proovida koolitada lineaarse regressiooni mudelit, et prognoosida seost `Month` ja `Price` vahel või `DayOfYear` ja `Price` vahel. Järgnevalt on hajuvdiagramm, mis näitab viimast seost:
See viitab sellele, et peaks olema mingi korrelatsioon ning me võime proovida treenida lineaarset regressioonimudelit, et ennustada seost `Month` ja `Price` vahel või `DayOfYear` ja `Price` vahel. Alljärgnev hajusdiagramm näitab viimast seost:
<img alt="Hajuvdiagramm: hind versus aasta päev" src="../../../../translated_images/et/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="Hajusdiagramm hind vs aasta päev" src="../../../../translated_images/et/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
Vaatame, kas korrelatsioon olemas on, kasutades `corr` funktsiooni:
Vaatame, kas korrelatsioon eksisteerib, kasutades `corr` funktsiooni:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
Tundub, et korrelatsioon on üsna väike, -0.15 kuu järgi ja -0.17 kuupäeva järgi, aga võib olla teine oluline seos. Näib, et on erinevad hinnaklastrid eri kõrvitsatüüpide jaoks. Selle hüpoteesi kinnitamiseks joonistame iga kategooria erinevas värvis. Edastades `scatter` funktsioonile `ax` parameetri, saame joonistada kõik punktid samale graafikule:
Näib, et korrelatsioon on üsna väike: -0.15 kuu korral ja -0.17 aasta päeva korral, kuid võib olla veel mõni oluline seos. Tundub, et erinevatel kõrvitsatüüpidel on erinevad hinnaklastrid. Selle hüpoteesi kinnitamiseks joonistame iga kõrvitsatüübi erineva värviga. Edastades `ax` parameetri `scatter` funktsioonile, saame joonistada kõik punktid samale diagrammile:
```python
ax=None
@ -139,75 +139,75 @@ 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)
```
<img alt="Hajusdiagramm hinna ja aasta päeva vahel, värviliselt" src="../../../../translated_images/et/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="Hajuvdiagramm: hind versus aasta päev värvilinea" src="../../../../translated_images/et/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Uuring viitab, et sort mõjutab hinda rohkem kui müügi kuupäev. Seda näeme ka tulpdiagrammil:
Meie uurimus viitab, et sort mõjub hinna üldisele käitumisele rohkem kui müügikuupäev. Seda näitab mugavalt ka tulpdiagramm:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Tulpdiagramm hindade kohta kasvatatavate sortide kaupa" src="../../../../translated_images/et/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Tulpdiagramm hinna ja sorti kohta" src="../../../../translated_images/et/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Jätkame esialgu ainult ühe kõrvitsatüübi, 'pie type', uurimisega ja vaatame, kuidas müügikuupäev hindadele mõjub:
Keskendume praegu ühele kõrvitsatüübile, 'pie type', ja vaatame, millist mõju kuupäev hindadele avaldab:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Hajuvdiagramm hind versus aasta päev" src="../../../../translated_images/et/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="Hajusdiagramm hinna ja aasta päeva vahel pie type kõrvitsate kohta" src="../../../../translated_images/et/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
Kui nüüd arvutada korrelatsioon `Price` ja `DayOfYear` vahel `corr` funktsiooniga, saame midagi sellist nagu `-0.27` - mis tähendab, et prognoosimudeliga koolitamine on mõistlik.
Kui nüüd arvutada korrelatsioon `Price` ja `DayOfYear` vahel `corr` funktsiooniga, saame tulemuseks umbes `-0.27`, mis näitab, et mudeli treenimine ennustamiseks on mõistlik.
> Enne lineaarse regressioonimudeli koolitamist on oluline veenduda, et andmed on puhastatud. Lineaarne regressioon ei tööta hästi puuduvate väärtustega, seega on mõistlik need tühjad lahtrid eemaldada:
> Enne lineaarse regressioonimudeli treenimist on oluline veenduda, et andmestik on puhas. Lineaarne regressioon ei toimi hästi puuduva väärtusega, seega on mõistlik need tühjad lahtrid eemaldada:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Teine lähenemine oleks need puuduolevad väärtused täita vastava veeru keskmiste väärtustega.
Teine variant oleks need tühjad väärtused asendada veeru keskmiste väärtustega.
## Lihtne lineaarne regressioon
[![Masinõpe algajatele - lineaarne ja polünoomne regressioon Scikit-learniga](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "Masinõpe algajatele - lineaarne ja polünoomne regressioon Scikit-learniga")
[![Masinõpe algajatele - Lineaarne ja polünoomne regressioon Scikit-learniga](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "Masinõpe algajatele - Lineaarne ja polünoomne regressioon Scikit-learniga")
> 🎥 Kliki pildil ülalpool, et vaadata lühike video ülevaade lineaarse ja polünoomse regressiooni kohta.
> 🎥 Vajuta ülalolevale pildile, et vaadata lühike video lineaarse ja polünoomse regressiooni teemal.
Lineaarse regressioonimudeli koolitamiseks kasutame **Scikit-learn**i teeki.
Lineaarse regressioonimudeli treenimiseks kasutame **Scikit-learn** teeki.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
Alustame sisendväärtuste (omaduste) ja ootuspärase väljundi (sildi) eraldamisest eraldi numpy massiividesse:
Alustame sisendi (omaduste) ja väljundi (sildi) eraldamisega eraldi numpy massiividesse:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Pane tähele, et pidime tegema `reshape` sisendandmetele, et lineaarse regressiooni pakett mõistaks neid õigesti. Lineaarne regressioon eeldab 2D-massiivi sisendit, kus iga rida vastab sisendomaduste vektorile. Meie juhul, kui meil on ainult üks sisend, vajame massiivi kujuga N×1, kus N on andmekogu suurus.
> Märka, et pidime kasutama `reshape` meetodit sisendandmetel, et Linear Regression pakett mõistaks seda õigesti. Lineaarne regressioon ootab 2-maatriksit sisendina, kus iga rida on vektor sisendomadustest. Kuna meil on ainult üks sisend, vajame N×1 kujuga massiivi, kus N on andmestiku suurus.
Seejärel tuleb andmestik jagada treening- ja testandmestikeks, et saaksime mudelit pärast koolitamist valideerida:
Seejärel peame jagama andmed treening- ja testandmeteks, et saaksime mudelit treeningu järel testida:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Lõpuks võtab lineaarse regressioonimudeli treenimine vaid kaks koodirida. Määratleme `LinearRegression` objekti ning sobitame selle meie andmetega `fit` meetodi abil:
Lõpuks võtab maaline lineaarse regressioonimudeli treenimine vaid kaks kodeerimisrida. Definieren `LinearRegression` objekti ja sobitame selle andmetega `fit` meetodiga:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`LinearRegression` objekt pärast `fit`-imist sisaldab regressiooni kõiki koefitsiente, millele saab ligi `.coef_` omaduse kaudu. Meie puhul on ainult üks koefitsient, mis peaks olema umbes `-0.017`. See tähendab, et hinnad näivad aja jooksul veidi langevat, kuid mitte väga palju, umbes 2 senti päevas. Meile on ka võimalik juurdepääs regressiooni lõikepunktile Y-teljel, kasutades `lin_reg.intercept_` - see on meie puhul umbes `21`, mis näitab hinna alguses aasta alguses.
`LinearRegression` objekt pärast sobitamist (`fit`) sisaldab kõiki regressiooni koefitsiente, millele pääseb ligi omaduse `.coef_` kaudu. Meie puhul on ainult üks koefitsient, mis peaks olema umbes `-0.017`. See tähendab, et hinnad näivad aja jooksul veidi langemas, aga mitte liiga palju, umbes 2 senti päevas. Saame ka regressioonijoonise lõikepunkti Y-teljega vaadata, kasutades `lin_reg.intercept_` - see on meie puhul umbes `21`, mis näitab hinna taset aasta alguses.
Selleks, et näha, kui täpne meie mudel on, võime prognoosida hindu testiandmestikul ja siis mõõta, kui lähedal meie ennustused on oodatud väärtustele. Seda saab teha ruutkeskmise vea (RMSE) mõõdiku abil, mis on kõigi ruutude erinevuste keskmise ruutjuur oodatud ja ennustatud väärtuste vahel.
Selleks, et näha, kui täpne meie mudel on, võime prognoosida testandmete põhjal hindu ja seejärel mõõta, kui lähedal on meie prognoosid oodatud väärtustele. Seda saab teha ruutkeskmise vea (RMSE) meetrika abil, mis on kõigi ootuspäraste ja prognoositud väärtuste ruutude keskmise ruutjuur.
```python
pred = lin_reg.predict(X_test)
@ -216,36 +216,37 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
Meie viga paistab olevat umbes 2 punkti, mis on ~17%. Mitte väga hea. Mudeli kvaliteedi teine näitaja on **määramise koefitsient**, mida saab saada järgmiselt:
Meie viga näib olevat umbes 2 punkti ringis, mis on ~17%. Mitte väga hea. Teine mudeli kvaliteedi näitaja on **määramiskordaja**, mida saab arvutada järgnevalt:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
Kui väärtus on 0, tähendab see, et mudel ei arvesta sisendiandmeid ja käitub kui *kõige halvem lineaarne ennustaja*, mis on lihtsalt tulemuse keskmine väärtus. Väärtus 1 tähendab, et me suudame täiuslikult ennustada kõiki oodatud väljundeid. Meie puhul on koefitsient umbes 0.06, mis on üsna madal.
Võime ka joonistada testandmed koos regressioonijoonega, et paremini näha, kuidas regressioon meie juhul töötab:
Kui väärtus on 0, tähendab see, et mudel ei võta sisendandmeid arvesse ja toimib nagu *halvim lineaarne prognoosija*, mis on lihtsalt tulemi keskmine väärtus. Väärtus 1 tähendab, et suudame ideaalselt prognoosida kõiki oodatud väljundeid. Meie puhul on kordaja umbes 0.06, mis on üsna madal.
Saame ka testandmed koos regressioonijoonisega joonistada, et paremini näha, kuidas regressioon meie puhul toimib:
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Linear regression" src="../../../../translated_images/et/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
<img alt="Lineaarne regressioon" src="../../../../translated_images/et/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## Polünoomne regressioon
Teine lineaarse regressiooni tüüp on polünoomne regressioon. Kuigi mõnikord on muutujate vahel lineaarne seos - kui kõrvitsa maht suureneb, tõuseb hind - vahel ei saa neid seoseid joonistada tasapinnana või sirgjoonena.
Teine lineaarse regressiooni tüüp on polünoomne regressioon. Kuigi mõnikord on muutujate vahel lineaarne seos — suurem kõrvits mahu poolest tähendab kõrgemat hinda — siis mõnikord ei saa neid seoseid joonistada tasapinnana ega sirgel joonel.
✅ Siin on [veel mõned näited](https://online.stat.psu.edu/stat501/lesson/9/9.8) andmetest, mille jaoks võiks sobida polünoomne regressioon
✅ Siin on [mõned muud näited](https://online.stat.psu.edu/stat501/lesson/9/9.8) andmetest, mille puhul võiks kasutada polünoomset regressiooni
Vaadake uuesti suhet kuupäeva ja hinna vahel. Kas see hajuvusdiagramm peaks tingimata olema analüüsitud sirgjoonena? Kas hinnad ei saa kõikuda? Sellisel juhul võite proovida polünoomset regressiooni.
Vaatame uuesti kuupäeva ja hinna suhet. Kas see hajuvusdiagramm tundub tingimata sobivat sirgel joonel analüüsimiseks? Kas hinnad ei võiks kõikuda? Sellisel juhul võite proovida polünoomset regressiooni.
✅ Polünoomid on matemaatilised avaldised, mis võivad koosneda ühest või mitmest muutujast ja koefitsiendist
✅ Polünoomid on matemaatilised avaldised, mis võivad koosneda ühest või mitmest muutujast ja koefitsientidest
Polünoomne regressioon loob kõverjoone, mis sobib paremini mitte-lineaarsete andmetega. Meie puhul, kui lisame sisendandmetesse ruudus oleva `DayOfYear` muutuja, peaksime suutma sobitada andmed paraboolkõveraga, millel on teatud aasta jooksul minimaalne punkt.
Polünoomne regressioon loob kõverjoone, et paremini sobitada mittelineaarseid andmeid. Meie puhul, kui lisada sisendandmetesse ruuduline `DayOfYear` muutuja, peaksime suutma sobitada andmed parabolic kõveraga, millel on aasta jooksul mingi miinimum.
Scikit-learn sisaldab kasulikku [torujuhtme (pipeline) API-t](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline), et ühendada erinevad andmetöötlusetapid. **Torujuhtme** moodustab **estimatsioonide** ahel. Meie puhul loome torujuhtme, mis esmalt lisab polünoomsed tunnused mudelile ja siis treenib regressiooni:
Scikit-learn sisaldab abistavat [pipeline API-d](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline), millega saab ühendada erinevad andmetöötluse etapid. **Pipeline** on **hinnangute** ahel. Meie puhul loome pipelinei, mis esmalt lisab mudelile polünoomsed tunnused ja seejärel treenib regressiooni:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -256,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
`PolynomialFeatures(2)` kasutamine tähendab, et kaasame kõik teise astme polünoomid sisendandmetest. Meie puhul tähendab see vaid `DayOfYear`<sup>2</sup>, aga kahe sisendmuutuja X ja Y korral lisab see X<sup>2</sup>, XY ja Y<sup>2</sup>. Võime ka kasutada kõrgema astme polünoome, kui soovime.
`PolynomialFeatures(2)` tähendab, et kaasatakse kõik teise astme polünoomid sisendandmetest. Meie puhul tähendab see ainult `DayOfYear`<sup>2</sup>, aga kahe sisendmuutuja X ja Y puhul lisab see X<sup>2</sup>, XY ja Y<sup>2</sup>. Võime kasutada ka kõrgema astme polünoome, kui soovime.
Pipelines saab kasutada samamoodi nagu algset `LinearRegression` objekti, st me saame pipelinei `fit`-ida ja seejärel kasutada `predict` prognooside saamiseks:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Sujuva ligikaudse kõvera joonistamiseks kasutame `np.linspace`, et luua sisendväärtuste ühtlane vahemik, mitte joonistada otse järjestamata testandmete peal (mis annaks kõvera siksakiliselt):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Torujuhtmeid võib kasutada samamoodi nagu algset `LinearRegression` objekti, st võime `fit` torujuhtme ja seejärel kasutada `predict`, et saada ennustustulemused. Siin on graafik, mis näitab testiandmeid ja ligikaudset kõverat:
Siin on graafik, mis näitab testandmeid ja ligikaudset kõverat:
<img alt="Polynomial regression" src="../../../../translated_images/et/poly-results.ee587348f0f1f60b.webp" width="50%" />
<img alt="Polünoomne regressioon" src="../../../../translated_images/et/poly-results.ee587348f0f1f60b.webp" width="50%" />
Polünoomse regressiooni kasutades saame veidi madalama MSE ja kõrgema määramise, kuid mitte oluliselt. Peame arvesse võtma ka muid tunnuseid!
Polünoomse regressiooni kasutades saame veidi madalama RMSE ja kõrgema määramiskordaja, kuid mitte oluliselt. Peame arvesse võtma ka muid tunnuseid!
> Näete, et madalaimad kõrvitsahinnad esinevad kuskil Halloweeni ajal. Kuidas seda seletate?
> Näete, et madalaimad kõrvitsa hinnad esinevad kuskil ümber Halloweeni. Kuidas seda seletada?
🎃 Palju õnne, just lõite mudeli, mis aitab prognoosida pirukakõrvitsate hinda. Tõenäoliselt saate sama protseduuri korrata kõigi kõrvitsatüüpide puhul, kuid see oleks tüütu. Õpime nüüd, kuidas mudelis arvesse võtta kõrvitsatüüpi!
🎃 Palju õnne, sa just lõid mudeli, mis aitab ennustada pirukakõrvitsa hinda. Tõenäoliselt saad sama protseduuri korrata ka teiste kõrvitsatüüpide jaoks, kuid see oleks tülikas. Õpime nüüd, kuidas mudelis arvesse võtta kõrvitsatüüpi!
## Kategoorilised tunnused
Ideaalis tahame suuta erinevate kõrvitsatüüpide hindu ennustada sama mudeli abil. Kuid `Variety` veerg on mõnevõrra erinev veergudest nagu `Month`, sest see sisaldab mittenumerilisi väärtusi. Selliseid veerge nimetatakse **kategoorilisteks**.
Ideaalmaailmas tahame ennustada hindu erinevate kõrvitsatüüpide jaoks sama mudeli abil. Kuid veerg `Variety` erineb veergudest nagu `Month`, kuna see sisaldab mittesisulisi (mittearvulisi) väärtusi. Neid veerge nimetatakse **kategoorilisteks**.
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
[![Algajatele masinõppes - Kategooriliste tunnuste prognoos lineaarse regressiooniga](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "Algajatele masinõppes - Kategooriliste tunnuste prognoos lineaarse regressiooniga")
> 🎥 Klõpsake ülaloleval pildil, et vaadata lühivideot kategooriliste tunnuste kasutamisest.
> 🎥 Klõpsa ülaloleval pildil, et vaadata lühikest videot kategooriliste tunnuste kasutamisest.
Siin näete, kuidas keskmine hind sõltub sordist:
Siin näed, kuidas keskmine hind sõltub tüvest:
<img alt="Average price by variety" src="../../../../translated_images/et/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Keskmine hind vastavalt tüübile" src="../../../../translated_images/et/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Sordi arvestamiseks peame esmalt selle teisendama numbriliseks, ehk **kodeerima**. Selleks on mitu võimalust:
Tüübi arvestamiseks peame esmalt selle ümber kodeerima numbriliseks ehk **kodeerima**. Selleks on mitu võimalust:
* Lihtne **numbriline kodeerimine** loob tabeli erinevatest sortidest ja seejärel asendab sordinime indeksiga selles tabelis. See pole lineaarse regressiooni puhul parim mõte, sest lineaarne regressioon võtab indeksinumbri tegeliku numbrilise väärtuse ja lisab selle tulemile, korrutades selle mõne koefitsiendiga. Meie puhul on seos indeksinumbri ja hinna vahel selgelt mittelineaarne, isegi kui tagada indeksite spetsiifiline järjekord.
* **Ühe-kuuma kodeerimine (one-hot encoding)** asendab `Variety` veeru nelja erineva veeruga, iga kõrvitsasordi jaoks eraldi. Igas veerus on `1`, kui vastaval real on see sort, ja muidu `0`. See tähendab, et lineaarse regressiooni puhul on neli koefitsienti, üks iga kõrvitsatüübi kohta, mis vastutab selle sordi "algushinna" (või pigem "lisahinna") eest.
* Lihtne **numbriline kodeerimine** koostab tabeli erinevatest tüvedest ja asendab tüve nime indeksiga selles tabelis. See pole lineaarse regressiooni jaoks parim, sest lineaarne regressioon võtab indeksnumbrilise väärtuse ja lisab selle tulemi koefitsiendi korrutisena. Meie puhul seos indeksi numbri ja hinna vahel on selgelt mittelineaarne, isegi kui järjekord on mingil viisil korrektselt määratud.
* **One-hot kodeerimine** asendab veeru `Variety` nelja erineva veeruga, ühe iga tüve jaoks. Igas veerus on `1`, kui vastaval real on see tüüp, ja `0` muul juhul. See tähendab, et lineaarse regressiooni jaoks on neli koefitsienti, üks iga kõrvitsatüübi kohta, mis määravad selle tüve "algse hinna" (või pigem "lisahinna").
Allolev kood näitab, kuidas sort ühekoodina kodeerida:
Alljärgnev kood näitab, kuidas saame tüve one-hot kodeerida:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -302,14 +325,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
Lineaarse regressiooni treenimiseks, kasutades ühe-kuuma kodeeritud sorti sisendina, peame lihtsalt õigesti initsialiseerima `X` ja `y` andmed:
Et treenida lineaarset regressiooni one-hot kodeeritud tüvega sisendina, peame lihtsalt õigesti algatama andmed `X` ja `y`:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Ülejäänud kood on sama, mida kasutasime ees lineaarse regressiooni treenimiseks. Kui proovite, näete, et ruutkeskmine viga on umbes sama, kuid saame palju kõrgema määramise koefitsiendi (~77%). Veelgi täpsemate ennustuste saamiseks võime lisada ka teisi kategoorilisi tunnuseid ja numbrilisi tunnuseid nagu `Month` või `DayOfYear`. Et saada üks suur tunnuste massiiv, võime kasutada `join`:
Ülejäänud kood on sama, mida kasutasime ülal LinearRegression treenimiseks. Kui proovite seda, näete, et ruutkeskmine viga on umbes sama, kuid määramiskordaja on palju kõrgem (~77%). Veelgi täpsemate prognooside saamiseks võime lisaks käsitleda veel kategoorilisi tunnuseid ning ka numbrilisi tunnuseid, nagu `Month` või `DayOfYear`. Et saada üks suur tunnuste massiiv, võime kasutada `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,11 +342,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Siin arvestame ka `City` ja `Package` tüüpi, mis annab meile MSE 2.84 (10%) ja määramise 0.94!
Siin arvestame ka `City` ja `Package` tüüpi, mis annab meile RMSE 2.84 (10.5%) ja määramiskordaja 0.94!
## Kõige kokku panek
## Kõik kokku
Parima mudeli tegemiseks võime kasutada kombineeritud (ühe-kuuma kodeeritud kategoorilised + numbrilised) andmeid eelmisest näitest koos polünoomse regressiooniga. Siin on mugavaks kasutamiseks kogu kood:
Parima mudeli tegemiseks võime kasutada kombineeritud (one-hot kodeeritud kategoorilised + numbrilised) andmeid eelnevast näitest koos polünoomse regressiooniga. Siin on mugav täiskood:
```python
# seadista treeningandmed
@ -336,51 +359,51 @@ y = new_pumpkins['Price']
# tee treening- ja testandmete jagamine
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# seadista ja treeni andmevoog
# seadista ja treeni torujuhe
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# ennusta tulemused testandmete jaoks
# ennusta testandmete tulemusi
pred = pipeline.predict(X_test)
# arvuta keskmine ruutviga ja määramise koefitsient
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# arvuta RMSE ja määramise kordaja
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
See peaks andma peaaegu 97% määramise koefitsiendi ja MSE=2.23 (~8% prognoosiviga).
See peaks andma parima määramiskordaja ligikaudu 97% ja RMSE=2.23 (~8% prognoosiviga).
| Mudel | MSE | Määramine |
|-------|-----|-----------|
| Mudel | RMSE | Määramiskordaja |
|-------|-----|-----------------|
| `DayOfYear` lineaarne | 2.77 (17.2%) | 0.07 |
| `DayOfYear` polünoomne | 2.73 (17.0%) | 0.08 |
| `Variety` lineaarne | 5.24 (19.7%) | 0.77 |
| Kõik tunnused lineaarne | 2.84 (10.5%) | 0.94 |
| Kõik tunnused polünoomne | 2.23 (8.25%) | 0.97 |
🏆 Väga tubli! Sa lõid ühe õppetunni jooksul neli regressioonimudelit ja parandasid mudeli kvaliteeti 97%-ni. Regressiooni lõpus peatükis õpid ka logistilise regressiooni kategooriate määramiseks.
🏆 Väga hästi! Sa lõid ühe õppetunni jooksul neli regressioonimudelit ja parandasid mudeli kvaliteedi 97%-ni. Lõpuks regressiooni osas õpime logistilise regressiooni, et kategooriaid määrata.
---
## 🚀Väljakutse
## 🚀 Väljakutse
Testeeri selles märkmikus mitut erinevat muutujat ja vaata, kuidas korrelatsioon mõjutab mudeli täpsust.
Testi selles märkmikus mitut erinevat muutujat, et näha, kuidas korrelatsioon mõjutab mudeli täpsust.
## [Loengu järel test](https://ff-quizzes.netlify.app/en/ml/)
## Ülevaade ja iseseisev õppimine
## Kordamine ja iseseisev õppimine
Selles õppetükis õppisime lineaarse regressiooni kohta. On ka teisi olulisi regressiooniliike. Loe stepwise, ridge, lasso ja elasticnet tehnikate kohta. Hea kursus õppimiseks on [Stanfordi statistikõppe kursus](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).
Selles õppetükis õppisime lineaarset regressiooni. On ka teisi olulisi regressioonitüüpe. Loe Stepwise, Ridge, Lasso ja Elasticnet meetodite kohta. Hea kursus lisatud teadmise saamiseks on [Stanfordi statistilise õppimise kursus](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Kodune ülesanne
## Kodune ülesanne
[Ehita mudel](assignment.md)
[Loo mudel](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vastutusest loobumine**:
See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame täpsust, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Kriitilise informatsiooni puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud võimalike arusaamatuste või valesti tõlgenduste eest.
**Lahtiütlus**:
See dokument on tõlgitud kasutades tehisintellekti tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame tagada täpsust, palun pidage meeles, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle algkeeles tuleks pidada autoriteetseks allikaks. Olulise info puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tingitud arusaamatuste või väärtõlgenduste eest.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Lineaarne ja polünoomne regressioon kõrvitsate hinnastamiseks - Õppetund 3\n",
"## Lineaarne ja polünoomne regressioon kõrvitsahindade jaoks - õppetund 3\n",
"\n",
"Laadi vajalikud teegid ja andmestik. Muuda andmed andmeraamiks, mis sisaldab andmete alamhulka:\n",
"Laadige vajalikud teegid ja andmestik. Konverteerige andmed andmeraamistikuks, mis sisaldab alamkogumit andmetest:\n",
"\n",
"- Vali ainult kõrvitsad, mille hind on määratud bushelite järgi\n",
"- Konverteeri kuupäev kuuks\n",
"- Arvuta hind kõrge ja madala hinna keskmisena\n",
"- Muuda hind, et see kajastaks hinda bushelite koguse järgi\n"
"- Võtke ainult kõrvitsad, mille hinnad on setu kohta\n",
"- Konverteerige kuupäev kuuks\n",
"- Arvutage hind kõrgete ja madalate hindade keskmisena\n",
"- Konverteerige hind nii, et see kajastaks hinda setu koguse järgi\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Hajuvälja diagram tuletab meelde, et meil on kuuandmed ainult augustist detsembrini. Tõenäoliselt vajame rohkem andmeid, et teha järeldusi lineaarsel viisil.\n"
"Hajuvusdiagramm tuletab meelde, et meil on ainult augustist detsembrini kuupõhised andmed. Tõenäoliselt vajame tõenäosuse joonistamiseks lineaarse järelduse tegemiseks rohkem andmeid.\n"
]
},
{
@ -474,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Tundub, et korrelatsioon on üsna väike, kuid on olemas mingi muu olulisem seos - sest ülaltoodud graafiku hinnapunktid näivad moodustavat mitu eristatavat klastrit. Teeme graafiku, mis näitab erinevaid kõrvitsasorte:\n"
"Tundub, et korrelatsioon on üsna väike, kuid on olemas mõni muu olulisem seos - sest ülaltoodud joonisel tunduvad hinnapunktidel olevat mitu erinevat klastrit. Teeme joonise, mis näitab erinevaid kõrvitsatüüpe:\n"
]
},
{
@ -538,7 +538,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Praegu keskendume ainult ühele sordile - **pirukatüüp**.\n"
"Praegu keskendume ainult ühele tüübile - **pirukate tüüp**.\n"
]
},
{
@ -666,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Joone tõusu saab määrata lineaarse regressiooni koefitsientide abil:\n"
"Joonise tõusukord saab määrata lineaarsest regressioonikordajatest:\n"
]
},
{
@ -722,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Polünoomiline regressioon\n",
"### Polünoomne regressioon\n",
"\n",
"Mõnikord on tunnuste ja tulemuste vaheline seos olemuslikult mittelineaarne. Näiteks võivad kõrvitsahinnad talvel (kuud=1,2) olla kõrged, suvel (kuud=5-7) langeda ja seejärel taas tõusta. Lineaarne regressioon ei suuda seda seost täpselt leida.\n",
"Mõnikord on seos tunnuste ja tulemuste vahel olemuslikult mitte-lineaarne. Näiteks kõrvitsa hinnad võivad talvel (kuud=1,2) olla kõrged, seejärel suvel (kuud=5-7) langeda ning siis uuesti tõusta. Lineaarne regressioon ei suuda seda suhet täpselt leida.\n",
"\n",
"Sellisel juhul võiks kaaluda täiendavate tunnuste lisamist. Lihtne viis on kasutada sisendtunnustest polünoome, mis viib **polünoomilise regressioonini**. Scikit Learn'is saame polünoomilised tunnused automaatselt ette arvutada, kasutades torustikke:\n"
"Sellisel juhul võime kaaluda lisatunnuste lisamist. Lihtne viis on kasutada sisendmuutujate polünoome, mis annab tulemuseks **polünoomse regressiooni**. Scikit Learnis saame polünoomsed tunnused automaatselt eel-arvutada, kasutades pipelinee:\n"
]
},
{
@ -781,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Koodimine erinevatele sortidele\n",
"### Kodeerimise variatsioonid\n",
"\n",
"Ideaalis soovime prognoosida erinevate kõrvitsasortide hindu sama mudeli abil. Selleks, et sorti arvesse võtta, peame esmalt selle numbriliseks vormiks teisendama ehk **kodeerima**. Selleks on mitmeid viise:\n",
"Ideaalmaailmas tahame suuta prognoosida erinevate kõrvitsa sortide hindu sama mudeli abil. Selleks, et sorti arvesse võtta, peame esmalt selle arvulisse vormi teisendama ehk **kodeerima**. Selleks on mitu võimalust:\n",
"\n",
"* Lihtne numbriline kodeerimine, mis loob tabeli erinevatest sortidest ja asendab seejärel sordinime selle tabeli indeksiga. See pole lineaarse regressiooni jaoks parim lahendus, kuna lineaarne regressioon arvestab indeksi numbrilist väärtust, mis tõenäoliselt ei korreleeri numbriliselt hinnaga.\n",
"* Üks-ühele kodeerimine (one-hot encoding), mis asendab `Variety` veeru nelja erineva veeruga, üks iga sordi jaoks. Need veerud sisaldavad väärtust 1, kui vastav rida kuulub antud sordile, ja 0, kui mitte.\n",
"* Lihtne arvuline kodeerimine, mis loob tabeli erinevate sortidega ja asendab seejärel sordinime selle tabeli indeksiga. See pole lineaarse regressiooni jaoks parim idee, sest lineaarne regressioon võtab indeksite arvulist väärtust arvesse ning see väärtus ei pruugi numbriliselt korreleeruda hinnaga.\n",
"* One-hot kodeerimine, mis asendab `Variety` veeru 4 erineva veeruga, üks iga sorti jaoks, milles on 1, kui vastav rida kuulub sellesse sorte ja 0 muul juhul.\n",
"\n",
"Allolev kood näitab, kuidas saame sordi üks-ühele kodeerida:\n"
"Alljärgnev kood näitab, kuidas saab sorte one-hot kodeerida:\n"
]
},
{
@ -944,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Lineaarne regressioon sordile\n",
"### Lineaarne regressioon sortide kaupa\n",
"\n",
"Kasutame nüüd sama koodi nagu ülal, kuid sisendina kasutame ühekuumkooditud sorti `DayOfYear` asemel:\n"
"Nüüd kasutame sama koodi nagu ülal, kuid `DayOfYear` asemel kasutame sisendina meie ühesoojuskodeeritud sorti:\n"
]
},
{
@ -994,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Me võime proovida kasutada ka teisi tunnuseid samal viisil ning kombineerida neid arvuliste tunnustega, nagu `Month` või `DayOfYear`:\n"
"Me võime proovida ka teisi omadusi samal viisil ning kombineerida neid numbriliste omadustega, nagu `Month` või `DayOfYear`:\n"
]
},
{
@ -1025,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Polünoomiline regressioon\n",
"### Polünoomne regressioon\n",
"\n",
"Polünoomilist regressiooni saab kasutada ka kategooriliste tunnuste puhul, mis on kodeeritud ühekuumkoodimisega. Polünoomilise regressiooni treenimiseks vajalik kood oleks sisuliselt sama, mida oleme ülalpool näinud.\n"
"Polünoomset regressiooni saab kasutada ka ühe-kuuma kodeerimisega kategoriaalsete tunnustega. Koodi polünoomse regressiooni treenimiseks oleks sisuliselt sama, mida oleme eespool näinud.\n"
]
},
{
@ -1074,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Lahtiütlus**: \nSee dokument on tõlgitud AI tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Vastutusest loobumine**: \nSee dokument on tõlgitud kasutades tehisintellektil põhinevat tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüdleme täpsuse poole, palun arvestage, et automatiseeritud tõlked võivad sisaldada vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleb lugeda autoriteetse allikana. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta ühegi arusaamatuste või valesti mõistmiste eest, mis võivad tekkida selle tõlke kasutamisest.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1104,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-10-11T12:21:09+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "et"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "pcm"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-11-18T18:26:10+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:26:50+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "pcm"
},
@ -90,8 +90,8 @@
"language_code": "pcm"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T17:18:55+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:26:27+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "pcm"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "pcm"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:22:54+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "pcm"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-11-18T18:38:18+00:00",

@ -1,117 +1,117 @@
# Techniques of Machine Learning
Di process wey dem dey use build, use, and maintain machine learning models and di data wey dem dey use no be di same as oda development workflows. For dis lesson, we go break di process down, and show di main techniques wey you need sabi. You go:
Di process wey dey build, use, and maintain machine learning models and di data dem use na different kin process from plenty oda development workflows. For dis lesson, we go clear di process, and show di main techniques wey you need sabi. You go:
- Understand di processes wey dey under machine learning for high level.
- Check base concepts like 'models', 'predictions', and 'training data'.
- Understand di processes wey machine learning dey follow for high level.
- Explore base concepts like 'models', 'predictions', and 'training data'.
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 Click di image wey dey up to watch short video wey explain dis lesson.
> 🎥 Click di image up dere for short video wey go run through dis lesson.
## Introduction
For high level, di work wey dem dey do to create machine learning (ML) processes get plenty steps:
For high level, di skill of creating machine learning (ML) processes get plenty steps:
1. **Decide di question**. Most ML processes dey start by asking question wey no fit get answer with simple conditional program or rules-based engine. Dis kind question dey usually about predictions based on data wey dem collect.
2. **Collect and prepare data**. To fit answer your question, you need data. Di quality and sometimes di quantity of your data go determine how well you fit answer di question. To see di data well, you go need visualize am. Dis phase still include how you go divide di data into training and testing group to build di model.
3. **Choose training method**. Based on your question and di kind data wey you get, you go choose how you wan train di model to fit reflect di data well and make correct predictions. Dis part of ML process need special skill and sometimes plenty trial and error.
4. **Train di model**. With your training data, you go use different algorithms to train di model to sabi di patterns wey dey di data. Di model fit use internal weights wey dem fit adjust to focus on some parts of di data to make di model better.
5. **Evaluate di model**. You go use data wey di model never see before (your testing data) to check how di model dey perform.
6. **Parameter tuning**. Based on how di model perform, you fit start di process again with different parameters or variables wey dey control di behavior of di algorithms wey dem use train di model.
7. **Predict**. Use new inputs to test di accuracy of your model.
1. **Decide on the question**. Most ML processes dey start by asking question wey conditional program or rules-based engine no fit answer easily. These questions dey usually about predictions wey base on data wey dem collect.
2. **Collect and prepare data**. To fit answer your question, you need data. Di quality and sometimes di quantity of your data go determine how well you fit answer your question. To visualize data na important part of dis phase. Dis phase also get splitting di data into training and testing group to build model.
3. **Choose a training method**. Based on your question and di kind data wey you get, you gats choose how you go train model to best represent your data and make correct predictions. Dis na di part of ML process wey need special skill and sometimes plenty trial and error.
4. **Train the model**. Use your training data, you go use algorithms train di model to recognize patterns inside di data. Di model fit get internal weights wey you fit adjust to focus on some parts of di data pass oda parts to build better model.
5. **Evaluate the model**. Use data wey di model never see before (your testing data) to check how di model dey perform.
6. **Parameter tuning**. Based on how di model perform, you fit repeat di process using different parameters or variables wey control di algorithms behaviour wey train di model.
7. **Predict**. Use new inputs to test how correct your model predictions be.
## Wetin you go ask?
## Wetin question to ask
Computers sabi well well how to find hidden patterns for data. Dis skill dey help researchers wey get questions about one area wey no fit get answer with conditionally-based rules engine. For example, if dem wan calculate di life expectancy of smokers vs non-smokers, data scientist fit create rules for am.
Computa sabi find hidden patterns inside data well well. Dis tin dey help researchers wey get questions about domain wey no easy to answer by conditional rules engine. For example, data scientist fit fit handcrafted rules for mortality between smokers and non-smokers for actuarial task.
But if di question get plenty variables, ML model fit dey more efficient to predict future life expectancy based on past health history. Another example fit be to predict weather for April for one place based on data like latitude, longitude, climate change, how close di place dey to di ocean, jet stream patterns, and more.
But if many other variables enter di matter, ML model fit balance well to predict future mortality from past health history. Another example be forecasting weather for April for one place based on latitude, longitude, climate change, near ocean, jet stream patterns, and more.
✅ Dis [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) about weather models dey give historical perspective on how dem dey use ML for weather analysis.
✅ Dis [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) about weather models get historical view of how dem dey use ML for weather analysis.
## Before you start to build
## Pre-building tasks
Before you start to build your model, you go need do some tasks. To test your question and form hypothesis based on di model predictions, you go need identify and set some things.
Before you start to build model, you gots to finish some tasks. To test your question and form hypothesis from model predictions, you need to identify and arrange some elements.
### Data
To fit answer your question well, you need plenty data wey dey correct. You go do two things for dis stage:
To fit answer your question for sure, you need plenty data wey correct kind. Two tins you gots to do for here:
- **Collect data**. Remember di lesson wey we talk about fairness for data analysis, collect your data well. Know di source of di data, any bias wey fit dey inside, and write down where you get am from.
- **Prepare data**. Di process to prepare data get steps. You fit need join data together and normalize am if e come from different sources. You fit improve di quality and quantity of di data by converting strings to numbers (like we do for [Clustering](../../5-Clustering/1-Visualize/README.md)). You fit still generate new data from di original one (like we do for [Classification](../../4-Classification/1-Introduction/README.md)). You fit clean and edit di data (like we go do before di [Web App](../../3-Web-App/README.md) lesson). Finally, you fit need randomize and shuffle di data, depending on di training techniques.
- **Collect data**. Remember di lesson on fairness for data analysis, collect your data carefully. Know where di data come from, any biases inside, and write down where e originate.
- **Prepare data**. Data preparation get many steps. You fit combine data and normalize if e come from different sources. You fit improve data quality and quantity with methods like changing strings to numbers (like we do for [Clustering](../../5-Clustering/1-Visualize/README.md)). You fit make new data from original data (like we do for [Classification](../../4-Classification/1-Introduction/README.md)). You fit clean and edit data (like before [Web App](../../3-Web-App/README.md) lesson). Finally, you fit randomize and shuffle am, depend on your training techniques.
✅ After you don collect and process your data, check if di shape of di data go fit help you answer di question wey you wan solve. E fit be say di data no go work well for di task, like we see for our [Clustering](../../5-Clustering/1-Visualize/README.md) lessons!
✅ After you don collect and process your data, check if di shape of am fit answer your question. Sometimes data no go perform well for your task, like we see for our [Clustering](../../5-Clustering/1-Visualize/README.md) lessons!
### Features and Target
[Feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) na measurable property of your data. For many datasets, e dey show as column heading like 'date', 'size', or 'color'. Your feature variable, wey dem dey usually represent as `X` for code, na di input variable wey dem go use train di model.
[Feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) na measurable property for your data. For many dataset, e dey show as column header like 'date' 'size' or 'color'. Your feature variable, most time dem call am `X` for code, na di input variable wey you go use train model.
Target na di thing wey you wan predict. Dem dey usually represent target as `y` for code, and e dey answer di question wey you dey ask from your data: for December, which **color** of pumpkin go cheap pass? For San Francisco, which neighborhood go get di best real estate **price**? Sometimes, dem dey call target label attribute.
Target na wetin you dey try predict. Target, wey dem dey call `y` for code, na di answer to di question you dey ask your data: for December, which **color** pumpkins go cheap? for San Francisco, which neighborhoods get best real estate **price**? Sometime target fit also be label attribute.
### How to choose your feature variable
### Selecting your feature variable
🎓 **Feature Selection and Feature Extraction** How you go sabi which variable to choose when you dey build model? You go probably go through process of feature selection or feature extraction to choose di correct variables for di best model. But dem no be di same thing: "Feature extraction dey create new features from functions of di original features, but feature selection dey return subset of di features." ([source](https://wikipedia.org/wiki/Feature_selection))
🎓 **Feature Selection and Feature Extraction** How you go sabi which variable to choose to build model? You fit do feature selection or feature extraction to choose correct variables wey model go perform well. Dem no mean di same: "Feature extraction dey create new features from original features functions, but feature selection na to pick subset of features." ([source](https://wikipedia.org/wiki/Feature_selection))
### Visualize your data
One important tool wey data scientist dey use na di power to visualize data with libraries like Seaborn or MatPlotLib. To show your data visually fit help you see hidden correlations wey you fit use. Your visualizations fit still help you see bias or unbalanced data (like we see for [Classification](../../4-Classification/2-Classifiers-1/README.md)).
One power data scientist get na how to visualize data with good libraries like Seaborn or MatPlotLib. To show your data visually fit help you find hidden connections wey you fit use. Your visualizations fit also help find bias or unbalanced data (like we see for [Classification](../../4-Classification/2-Classifiers-1/README.md)).
### Split your dataset
Before you train, you go need divide your dataset into two or more parts wey no dey equal but still represent di data well.
Before training, you gots split your dataset into two or more parts wey no equal size but still represent di data well.
- **Training**. Dis part of di dataset na di one wey you go use train di model. E dey make up di majority of di original dataset.
- **Testing**. Test dataset na independent group of data, wey you go use check di performance of di model wey you don build.
- **Validating**. Validation set na smaller independent group of examples wey you go use tune di model hyperparameters or architecture to improve di model. Depending on di size of your data and di question wey you dey ask, you fit no need build dis third set (like we talk for [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
- **Training**. Dis part of dataset na for train your model. E be di majority of original dataset.
- **Testing**. Test dataset na independent data group, often from original data, wey you use check how model dey perform.
- **Validating**. Validation set na smaller independent sample wey you use tune model hyperparameters or architecture to improve model. Depending on your data size and question, you fit no need build this third group (like we talk for [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
## How to build model
## Building a model
With your training data, your goal na to build model, or statistical representation of your data, using different algorithms to **train** am. Training di model go expose am to di data and e go make assumptions about di patterns wey e see, validate, and accept or reject.
Use your training data, your aim na to build model, or statistical representation of your data, with algorithms to **train** am. Training model mean you expose am to data so e fit make assumptions about patterns e finds, confirms, accept or reject.
### Choose training method
### Decide on a training method
Based on your question and di kind data wey you get, you go choose method to train am. If you check [Scikit-learn's documentation](https://scikit-learn.org/stable/user_guide.html) - wey we dey use for dis course - you go see plenty ways to train model. Based on your experience, you fit need try different methods to build di best model. You go likely go through process where data scientists dey check di performance of di model by giving am data wey e never see before, check for accuracy, bias, and oda issues, and choose di best training method for di task.
Based on your question and your data type, you go select method to train am. If you check [Scikit-learn's documentation](https://scikit-learn.org/stable/user_guide.html) - we dey use am for this course - you fit explore many ways to train model. Depending on your experience, you fit try many methods before you build best model. Data scientists dey evaluate model by feeding am unseen data, look how accurate e be, check bias or quality wahala, then pick best training method.
### Train di model
### Train a model
With your training data, you go 'fit' am to create model. You go notice say for many ML libraries, you go see code like 'model.fit' - na dis time you go send your feature variable as array of values (usually 'X') and target variable (usually 'y').
With your training data, you ready to 'fit' am build model. For many ML libraries, you go find code 'model.fit' - this na when you send your feature variable as array (usually 'X') and target variable (usually 'y').
### Evaluate di model
### Evaluate the model
Once di training process don complete (e fit take many iterations, or 'epochs', to train big model), you go fit evaluate di model quality by using test data to check how e perform. Dis data na subset of di original data wey di model never analyze before. You fit print table of metrics about di model quality.
After training complete (e fit take many rounds or 'epochs' to train big model), you fit check model quality using test data to see how am perform. Dis data na part of original data wey model never analyze before. You fit print table of metrics for your model quality.
🎓 **Model fitting**
For machine learning, model fitting mean how accurate di model function dey as e dey try analyze data wey e no sabi.
For machine learning, model fitting mean how accurate model function dey wen e dey try analyze data wey e never see before.
🎓 **Underfitting** and **overfitting** na common problems wey dey reduce di quality of di model, as di model fit no fit well or e fit too fit. Dis one dey make di model predictions either too close or too far from di training data. Overfit model dey predict training data too well because e don sabi di details and noise of di data too much. Underfit model no dey accurate because e no fit analyze di training data or di data wey e never see well.
🎓 **Underfitting** and **overfitting** na common problems wey spoil model quality, as model fit no fit well or e fit too well. This one fit cause model to make predictions wey too close or too far from training data. Overfit model dey predict training data well because e sabi di detail and noise well well. Underfit model no accurate because e no fit analyze training data or unseen data correctly.
![overfitting model](../../../../translated_images/pcm/overfitting.1c132d92bfd93cb6.webp)
> Infographic by [Jen Looper](https://twitter.com/jenlooper)
## Parameter tuning
After your first training, check di quality of di model and think of how you fit improve am by adjusting di 'hyperparameters'. Read more about di process [for di documentation](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
After your first training finish, watch model quality and think about improving am by adjusting 'hyperparameters'. Read more about dis process [for documentation](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
## Prediction
Dis na di time wey you go use new data to test di model accuracy. For 'applied' ML setting, where you dey build web assets to use di model for production, dis process fit involve collecting user input (like button press) to set variable and send am to di model for inference or evaluation.
Na dis time you go use fresh data test your model accuracy. For 'applied' ML setting, where you dey build web tools to use model for production, dis tin fit involve gathering user input (like pressing button) to set variable and send am go model for inference or evaluation.
For dis lessons, you go learn how to use dis steps to prepare, build, test, evaluate, and predict - all di work wey data scientist dey do and more, as you dey progress to become 'full stack' ML engineer.
For dis lessons, you go learn how to use these steps to prepare, build, test, evaluate, and predict - all di skills wey data scientists get and more, as you dey waka your journey to become 'full stack' ML engineer.
---
## 🚀Challenge
Draw flow chart wey show di steps of ML practitioner. Where you dey now for di process? Where you think say you go get difficulty? Wetin dey easy for you?
Draw flow chart wey show steps wey ML practitioner dey follow. Where you dey now for di process? Which part you think go hard? Which part go easy for you?
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Review & Self Study
Search online for interviews with data scientists wey dey talk about their daily work. Here na [one](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
Search online for interviews with data scientists wey talk about their daily work. Here be [one](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## Assignment
@ -121,5 +121,5 @@ Search online for interviews with data scientists wey dey talk about their daily
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Dis dokyument don use AI transleto service [Co-op Translator](https://github.com/Azure/co-op-translator) do di translation. Even as we dey try make am correct, abeg sabi say machine translation fit get mistake or no dey accurate well. Di original dokyument for im native language na di main source wey you go fit trust. For important mata, e good make professional human transleto check am. We no go fit take blame for any misunderstanding or wrong interpretation wey fit happen because you use dis translation.
Dis dokument don get translate by AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we dey try make am correct, abeg sabi say automated translation fit get mistake or no too correct. The original dokument wey dey im own language na im be correct source. For important information, make person wey sabi human translation do am. We no go responsible if any misunderstanding or wrong meaning show because of this translation.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -3,95 +3,95 @@
## Beginner Note
Linear regression na wen we wan predict **numerical value** (for example, house price, temperature, or sales).
E dey work by finding straight line wey go best show di relationship between input features and di output.
E dey work by finding straight line wey go represent beta di relationship between input features and output.
For dis lesson, we go focus on understanding di concept before we go explore advance regression techniques.
For dis lesson, we go focus on to sabi the concept before we explore more advanced regression techniques.
![Linear vs polynomial regression infographic](../../../../translated_images/pcm/linear-polynomial.5523c7cb6576ccab.webp)
> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [This lesson dey R too!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
> ### [This lesson dey available for R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### Introduction
So far, you don explore wetin regression mean with sample data we gather from di pumpkin pricing dataset wey we go dey use through dis lesson. You don also visualize am using Matplotlib.
So far, you don explore wetin regression be with sample data wey we gather from pumpkin pricing dataset wey we go take use for dis whole lesson. You don also use Matplotlib do visualisation.
Now, you ready to dive deeper into regression for ML. Visualizing dey help you understand data, but real power for Machine Learning come from _training models_. Models dem dey train on historic data to dey automatically capture data dependencies, and dem allow you predict outcomes for new data wey di model never see before.
Now you ready to go deeper for regression for ML. Even though visualisation dey help you understand data, the real power of Machine Learning na from _training models_. Models dey trained on historic data to automatically capture data dependencies, and dem allow you predict outcomes for new data, wey model never see before.
For dis lesson, you go learn more about two types of regression: _basic linear regression_ and _polynomial regression_, plus some math wey dey under these techniques. Dem models go allow us predict pumpkin prices depending on different input data.
For dis lesson, you go learn more about two types of regression: _basic linear regression_ and _polynomial regression_, plus some of di math wey dey behind these techniques. Those models go allow us predict pumpkin prices depending on the different input data.
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 Click di image up top for small video overview of linear regression.
> 🎥 Click di picture above for short video wey go explain linear regression.
> Throughout dis curriculum, we assume say you get little knowledge of math, and we wan make am easy for students wey come from other fields, so lookout for notes, 🧮 callouts, diagrams, and other learning tools wey go help you understand.
> Throughout dis curriculum, we dey assume say people no too sabi math, and we wan make am easy for students from different fields, so watch for notes, 🧮 callouts, diagrams, and other learning tools wey go help you understand.
### Prerequisite
By now, you suppose sabi di structure of di pumpkin data wey we dey look. You fit find am preloaded and pre-cleaned for dis lesson's _notebook.ipynb_ file. For di file, pumpkin price dey show per bushel for new data frame. Make sure say you fit run these notebooks for kernels for Visual Studio Code.
By now, you suppose don sabi the structure of di pumpkin data we dey look. You fit see am preloaded and pre-cleaned for this lesson's _notebook.ipynb_ file. For di file, pumpkin price dey show per bushel inside new data frame. Make sure say you fit run dis notebook dem for kernels for Visual Studio Code.
### Preparation
Just reminder, you dey load dis data so you fit ask questions about am.
Just to remind you, you dey load this data so you fit ask questions about am.
- When bae time to buy pumpkins?
- Wetin price I fit expect for one case of miniature pumpkins?
- Make I buy dem for half-bushel basket or for 1 1/9 bushel box?
Make we continue to dig into dis data.
- When be di best time to buy pumpkins?
- Wetin price I fit expect for case of miniature pumpkins?
- Make I buy dem for half-bushel baskets or for the 1 1/9 bushel box?
Make we continue dig this data.
For di previous lesson, you create Pandas data frame and put part of di original dataset inside, standardize di pricing by di bushel. But by doing that one, you only fit gather about 400 datapoints and only for fall months.
For di previous lesson, you create Pandas data frame and fill am with part of di original dataset, dem standardize price by bushel. But as you do am, you fit only gather about 400 datapoints and na only for fall months.
Check di data wey we preload for dis lessons notebook. Di data dey preloaded and dem don chart initial scatterplot to show month data. Maybe we fit get small more detail about di nature of di data if we clean am more.
Make you check di data wey we preloaded inside this lesson's notebook. Di data dey preloaded and initial scatterplot dey show month data. Maybe we fit get small extra detail about di data by cleaning am more.
## A linear regression line
Like you learn for Lesson 1, di goal of linear regression exercise na to fit draw line to:
As you learn for Lesson 1, the goal of linear regression exercise na to fit line wey go:
- **Show variable relationships**. Show d relationship between variables
- **Make predictions**. Make correct predictions how where new datapoint go land for di relationship to dat line.
Na normal for **Least-Squares Regression** to draw dis kain line. Di "Least-Squares" term mean say you dey minimize total error for our model. For every data point, we measure di vertical distance (wey dem dey call _residual_) between di actual point and di regression line.
- **Show variable relationships**. Show di relationship between variables
- **Make predictions**. Make correct predictions about where new datapoint fit fall compared to dat line.
We dey square these distances for two main reasons:
E normal for **Least-Squares Regression** to draw line like dis. Di term "Least-Squares" mean say na di process to reduce total error for our model. For every data point, we measure di vertical distance (we go call am residual) between the real point and our regression line.
1. **Magnitude over Direction:** We want treat -5 error same as +5 error. Squaring go make all values positive.
We dey square these distances for two main reasons:
2. **Penalizing Outliers:** Squaring dey give more weight to big errors, e go make line stay close to points wey far away.
1. **Magnitude over Direction:** We wan treat error of -5 same as error of +5. Squaring go make all values positive.
We go add all di squared values join. Our goal na to find di one exact line where di sum of dem less (smallest possible value)—na im cause di name "Least-Squares".
2. **Punish Outliers:** Squaring dey put more weight for bigger errors, so di line go stay close to points wey dey far.
> **🧮 Show me di math**
Then we put all dis squared values join. Our goal na to find dat line wey get smallest total sum—na why dem call am "Least-Squares".
> **🧮 Show me the math**
>
> Dis line, wey dem dey call _line of best fit_ fit express by [an equation](https://en.wikipedia.org/wiki/Simple_linear_regression):
> Dis line, wey dem call _line of best fit_ fit express by [equation](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` na di 'explanatory variable'. `Y` na di 'dependent variable'. Di slope of di line na `b` and `a` na di y-intercept, wey mean di value of `Y` when `X = 0`.
> `X` na di 'explanatory variable'. `Y` na di 'dependent variable'. Di slope of di line na `b` and `a` na y-intercept, wey mean di value of `Y` when `X = 0`.
>
>![calculate the slope](../../../../translated_images/pcm/slope.f3c9d5910ddbfcf9.webp)
>
> First, calculate slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper)
>
> In oda words, and referring to di original question wey our pumpkin data get: "predict di price of pumpkin per bushel by month", `X` go mean di price and `Y` go mean di month of sale.
> For example, regarding our pumpkin data question: "predict price of pumpkin per bushel by month", `X` go mean price, and `Y` go mean di month of sale.
>
>![complete the equation](../../../../translated_images/pcm/calculation.a209813050a1ddb1.webp)
>
> Calculate di value of Y. If you dey pay about $4, e suppose be April! Infographic by [Jen Looper](https://twitter.com/jenlooper)
> Calculate di value of Y. If you dey pay around $4, e must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper)
>
> Di math wey dey calculate di line gats show di slope of di line, wey also depend on di intercept, or where `Y` dey when `X = 0`.
> Di math wey calculate di line must show slope of di line, wey also depend on intercept, or di place wey `Y` dey when `X = 0`.
>
> You fit see how to calculate these values for [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) website. You fit also visit [dis Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to see how numbers values fit affect di line.
> You fit see how to calculate these values from [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) website. You fit also try [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to see how numbers fit affect di line.
## Correlation
One more term wey you gats sabi na **Correlation Coefficient** between given X and Y variables. With scatterplot, you fit quickly see dis coefficient. Scatterplot wey get points for neat line get high correlation, but scatterplot wey get points scatter everywah for X and Y get low correlation.
One more term wey you suppose sabi na **Correlation Coefficient** between X and Y variables. Using scatterplot, you fit quickly see dis coefficient. When datapoints dey scatter nicely for line, e mean high correlation, but if dem scatter everywhere between X and Y, na low correlation.
Good linear regression model go get high (near 1 pass 0) Correlation Coefficient using Least-Squares Regression with regression line.
Good linear regression model go get high (near 1, no be 0) Correlation Coefficient with Least-Squares Regression line.
✅ Run di notebook for dis lesson and see di Month to Price scatterplot. Di data wey connect Month to Price for pumpkin sales get high or low correlation based on your visual check of di scatterplot? E fit change if you use fine-grained measure instead of `Month`, like *day of di year* (number of days since year start)?
✅ Run di lesson notebook and check Month to Price scatterplot. Di data wey connect Month to Price for pumpkin sales get high or low correlation, based on how you see di scatterplot? E go change if you use detailed measure instead of `Month`, e.g. *day of the year* (number of days since beginning of year)?
For di code below, we go assume say we don clean di data, and dem get data frame wey dem call `new_pumpkins`, similar to dis one:
For code below, we assume say data don clean and we get data frame name `new_pumpkins`, similar to di one below:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
---|-------|-----------|---------|------|---------|-----------|------------|-------
@ -101,36 +101,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri
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
> Di code to clean di data dey for [`notebook.ipynb`](notebook.ipynb). We don do same cleaning steps like for previous lesson, and we calculate `DayOfYear` column using dis expression:
> Code to clean data dey inside [`notebook.ipynb`](notebook.ipynb). We follow same cleaning steps like before and calculate `DayOfYear` column with this expression:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
Now wey you don understand di math behind linear regression, make we create Regression model to see if we fit predict which pumpkin package go get di best pumpkin prices. Anybody wey wan buy pumpkins for holiday pumpkin patch fit want this info to optimize dem pumpkin package purchases.
Now we don understand the math behind linear regression, make we create Regression model to see if we fit predict which pumpkin package go get best price. Person wey wan buy pumpkins for holiday pumpkin patch fit like get this info to optimise their pumpkin package purchases.
## Looking for Correlation
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 Click di image up top for small video overview of correlation.
> 🎥 Click di picture above for quick video overview of correlation.
From previous lesson, you don probably see say average price for different months look like dis:
From the previous lesson, you don notice say average price for different months look like dis:
<img alt="Average price by month" src="../../../../translated_images/pcm/barchart.a833ea9194346d76.webp" width="50%"/>
Dis one suggest say e get correlation, and we fit try train linear regression model to predict di relationship between `Month` and `Price`, or between `DayOfYear` and `Price`. Here na di scatter plot wey show dis latter relationship:
Dis one mean say correlation dey, and we fit try train linear regression model to predict di relationship between `Month` and `Price`, or between `DayOfYear` and `Price`. Below na scatter plot wey show dat latter relation:
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pcm/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pcm/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
Make we check if correlation dey using di `corr` function:
Lets check if correlation dey using `corr` function:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
E look like say di correlation small small, -0.15 by `Month` and -0.17 by `DayOfMonth`, but fit get another important relationship. E look like different price clusters dey correspond to different pumpkin varieties. To confirm dis guess, make we plot each pumpkin category with different color. By passing `ax` parameter to `scatter` plotting function, we fit plot all points for same graph:
E be like say correlation small, -0.15 by `Month` and -0.17 by `DayOfYear`, but maybe another important connection dey. E be like different price clusters dey based on pumpkin varieties. To confirm, make we plot each pumpkin category with different color. By passing `ax` parameter to `scatter` function, we fit plot all points for same graph:
```python
ax=None
@ -140,40 +140,40 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pcm/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pcm/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
Our investigation show say variety get more effect on price than di selling date. We fit see dis with bar graph:
Our observation show say variety get more effect on price than di day wey dem sell am. We fit see am with bar graph:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Bar graph of price vs variety" src="../../../../translated_images/pcm/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Bar graph of price vs variety" src="../../../../translated_images/pcm/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
Make we focus for now on one pumpkin variety, 'pie type', and see wetin di date dey do to price:
Make we focus for while on one pumpkin variety, 'pie type', to see how date dey affect price:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pcm/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/pcm/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
If we calculate correlation between `Price` and `DayOfYear` with `corr` function, we go get something like `-0.27` - e mean say training predictive model make sense.
If we calculate correlation between `Price` and `DayOfYear` with `corr` function, e fit be about `-0.27`—which mean training model make sense.
> Before you train linear regression model, e important say make sure say our data clean. Linear regression no dey work well if e get missing values, so e make sense to remove all empty cells:
> Before you train linear regression model, make sure data clean well. Linear regression no dey work well with missing values, so e good to clear all empty cells:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
Another way fit be to fill empty values with mean from di column wey get dem.
Another way na to fill them empty cells with mean values of di column.
## Simple Linear Regression
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 Click di image up top for short video overview of linear and polynomial regression.
> 🎥 Click di picture above for short video about linear and polynomial regression.
To train our Linear Regression model, we go use **Scikit-learn** library.
@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
We dey start by separating input values (features) and expected output (label) into separate numpy arrays:
We start by separating input values (features) and expected output (label) into separate numpy arrays:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Note say we gats do `reshape` on input data make Linear Regression package fit understand am correct. Linear Regression dey expect 2D-array as input, wey each row get vector of input features inside. For our case, we get only one input, so we need array with shape N&times;1, where N na dataset size.
> Note say we do `reshape` on the input data so that Linear Regression package go understand am well. Linear Regression expect 2D-array as input, where each row be vector of input features. For our case, we get only one input so we need array with shape N×1, where N be dataset size.
Next, we need split data into train and test datasets, so that we fit validate our model after training:
Then, we wan split data into train and test datasets, so we fit validate our model after training:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
Finally, training di real Linear Regression model na just two lines code. We define `LinearRegression` object, then fit am to our data using `fit` method:
Finally, training the actual Linear Regression model dey only take two lines of code. We define `LinearRegression` object, then fit am to data using `fit` method:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
Di `LinearRegression` object afta `fit`-ting get all di coefficients of di regression, wey fit access wit `.coef_` property. For our case, e get only one coefficient, wey suppose be round `-0.017`. E mean say di prices dey drop small wit time, but no too much, around 2 cents per day. We fit still access di intersection point of di regression wit Y-axis wit `lin_reg.intercept_` - e go be around `21` for our case, wey mean di price for di beginning of di year.
Di `LinearRegression` object afta `fit`-ting get all di coefficients of di regression, we fit access wit `.coef_` property. For our case, e get just one coefficient wey suppose dey around `-0.017`. E mean say di prices dey like dey drop small wit time, but no too much, like 2 cents per day. We fit also access di intersection point of di regression wit Y-axis wit `lin_reg.intercept_` - e go be like `21` for our case, wey mean di price for di beginning of di year.
To see how correct our model be, we fit predict prices for test dataset, then measure how near our predictions be to di expected values. Dis one fit do wit root mean square error (RMSE) metrics, wey be root of di mean of all squared differences between expected and predicted value.
To see how correct our model be, we fit predict prices for test dataset, den measure how near our predictions be to di values wey we suppose get. Dis one fit use root mean square error (RMSE) metrics, wey be di root of di mean of all squared difference between di expected and predicted value.
```python
pred = lin_reg.predict(X_test)
@ -216,15 +216,15 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
Our error look like around 2 points, wey be ~17%. No too good. Another indicator of model quality na di **coefficient of determination**, wey fit get like dis:
Our error dey around 2 points, wey be ~17%. No too good. Another sign of model quality na di **coefficient of determination**, wey fit get like dis:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
If di value na 0, e mean say di model no dey use input data, e just act as di *worst linear predictor*, wey be just mean value of di result. If e be 1, e mean say we fit predict all expected outputs perfectly. For our case, di coefficient na around 0.06, wey low small.
If di value be 0, e mean say di model no dey consider di input data at all, e dey behave as di *worst linear predictor*, wey be just mean value of di result. If di value be 1, e mean say we fit predict di expected outputs perfectly. For our case, di coefficient dey around 0.06, wey low well well.
We fit still plot di test data with di regression line to betta see how di regression dey work for our case:
We fit plot di test data togida wit di regression line make we fit see well how di regression dey work for our case:
```python
plt.scatter(X_test,y_test)
@ -235,17 +235,17 @@ plt.plot(X_test,pred)
## Polynomial Regression
Another kind of Linear Regression na Polynomial Regression. Sometimes, e dey get linear relationship between variables - like di bigger pumpkin in volume, di higher di price - but sometimes dis relationship no fit plot as plane or straight line.
Another Kind of Linear Regression na Polynomial Regression. Sometimes, di relationship between variables be linear - di bigger di pumpkin volume, di higher di price - but sometimes di relationship no dey fit plot as plane or straight line.
✅ Here be [some more examples](https://online.stat.psu.edu/stat501/lesson/9/9.8) of data we fit use Polynomial Regression
✅ Here be [some more examples](https://online.stat.psu.edu/stat501/lesson/9/9.8) of data wey Polynomial Regression fit use
Make you check di relationship between Date and Price again. Dis scatterplot look like e suppose necessarily analyze wit straight line? Prices no dey fluctuate abi? For dis kain case, you fit try polynomial regression.
Make you check di relationship between Date and Price again. Dis scatterplot be like e suppose analyze by straight line? Prices no fit dey change? For dis kain case, you fit try polynomial regression.
✅ Polynomials na mathematical expressions wey fit get one or more variables plus coefficients
✅ Polynomials na mathematical expressions wey fit get one or more variables and coefficients
Polynomial regression dey create curved line to betta fit nonlinear data. For our case, if we put squared `DayOfYear` variable for input data, e suppose fit our data wit parabolic curve wey go get minimum for some point inside di year.
Polynomial regression dey create curved line to fit nonlinear data better. For our case, if we add squared `DayOfYear` variable inside input data, we suppose fit plot our data with parabolic curve, wey get minimum point somewhere inside di year.
Scikit-learn get better [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) wey fit join different steps of data processing. **Pipeline** na chain of **estimators**. For our case, we go create pipeline wey first add polynomial features to our model, then go train di regression:
Scikit-learn get beta [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) wey combine different steps of data processing together. A **pipeline** na chain of **estimators**. For our case, we go create pipeline wey first add polynomial features to our model, then train di regression:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -256,36 +256,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
If we use `PolynomialFeatures(2)`, e mean say we go include all second-degree polynomials from di input data. For our case, e go be just `DayOfYear`<sup>2</sup>, but if e get two input variables X and Y, e go add X<sup>2</sup>, XY and Y<sup>2</sup>. We fit still use higher degree polynomials if we want.
Using `PolynomialFeatures(2)` mean say we go include all second-degree polynomials from di input data. For our case, e mean `DayOfYear`<sup>2</sup>, but if we get two variables X and Y, e go add X<sup>2</sup>, XY, and Y<sup>2</sup>. We fit still use higher degree polynomials if we want.
Pipelines fit work same way as original `LinearRegression` object, so we fit `fit` di pipeline, and then use `predict` to get prediction results:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
To plot smooth approximation curve, we dey use `np.linspace` to create uniform input values range, no just plot directly on unordered test data (wey fit produce zigzag line):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
Pipelines fit use same way as di original `LinearRegression` object, we fit `fit` di pipeline, then use `predict` get prediction results. Dis na graph wey show test data with approximation curve:
Na here di graph wey show test data, plus di approximation curve:
<img alt="Polynomial regression" src="../../../../translated_images/pcm/poly-results.ee587348f0f1f60b.webp" width="50%" />
If we use Polynomial Regression, we fit get small lower MSE and higher determination, but no too much. We need take other features join!
Using Polynomial Regression, we fit get small lower RMSE and higher determination but no too much. We need consider other features!
> You fit see say minimum pumpkin prices dey happen around Halloween. How you fit explain dis?
> You fit see say di minimal pumpkin prices dey around Halloween. How you fit explain dis?
🎃 Congrats, you don create model wey fit help predict price of pie pumpkins. You fit fit do di same for all pumpkin types, but dat one go be tedious. Make we learn now how take pumpkin variety join our model!
🎃 Congrats! You just create model wey fit predict pie pumpkin price. You fit do same for all pumpkin types but e go hard. Make we learn now how pumpkin variety fit enter our model!
## Categorical Features
For ideal world, we want fit predict prices for different pumpkin varieties wit one model. But di `Variety` column different small from `Month` column, because e get non-numeric values. Dis kin columns na **categorical**.
For perfect world, we wan fit predict prices for different pumpkin varieties inside di same model. But di `Variety` column different small from columns like `Month`, because e get non-numeric values. Such column dem dey call **categorical**.
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 Click di image for short video wey show how to use categorical features.
> 🎥 Click di picture above to watch short video about using categorical features.
Here you fit see how average price dey depend on variety:
Here you fit see how di average price depend on variety:
<img alt="Average price by variety" src="../../../../translated_images/pcm/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
To take variety join, we first need convert am to numeric form, wey be **encode** am. Several ways dey we fit do am:
To take variety enter account, we first gats convert am to numeric form, or **encode** am. We get some ways to do am:
* Simple **numeric encoding** go create table of different varieties, then go replace variety name wit index for dat table. Dis no be di best idea for linear regression because linear regression go take di actual numeric value of dat index and add am to di result, multiply by some coefficient. For our case, di relationship between di index number and di price no linear, even if we arrange di indices somehow.
* **One-hot encoding** go replace `Variety` column wit 4 different columns, one for every variety. Each column go get `1` if di row na dat variety, else `0`. Dis mean say di linear regression go get four coefficients, one for each pumpkin variety, wey go control "starting price" (or "additional price") for dat variety.
* Simple **numeric encoding** go build table of different varieties, then replace di variety name wit index for dat table. Dis no be good plan for linear regression, because linear regression go take actual numeric value of index, den add am to result, wey dem go multiply by some coefficient. For our case, di relationship between index number and price no linear, even if we arrange di indices in one specific order.
* **One-hot encoding** go replace di `Variety` column wit 4 different columns, one for each variety. Each column go contain `1` if dat row belong to dat particular variety, else `0`. Dis mean say di linear regression go get four coefficients, one for each pumpkin variety, wey dey responsible for "starting price" (or "additional price") for dat variety.
Code below show how to do one-hot encode for variety:
Code below show how to one-hot encode variety:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -309,7 +331,7 @@ X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
Other code still be same wit how we train Linear Regression before. If you try am, you go see say mean squared error dey nearly di same, but coefficient of determination high pass (~77%). To get more correct predictions, we fit take more categorical features join, plus numeric features, like `Month` or `DayOfYear`. To get one big feature array, we fit use `join`:
Rest of di code be di same as we use before to train Linear Regression. If you try am, you go see say mean squared error still about de same, but we get much higher coefficient of determination (~77%). To get more accurate predictions, we fit also take more categorical features into account, plus numeric features like `Month` or `DayOfYear`. To get one big features array, we fit use `join`:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,41 +341,41 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
Here we still take `City` and `Package` type join, wey bring MSE 2.84 (10%) and determination 0.94!
Here we also consider `City` and `Package` type, wey give RMSE 2.84 (10.5%), and determination 0.94!
## Putting it all together
## Put am all together
To make di best model, we fit combine (one-hot encoded categorical + numeric) data from above example wit Polynomial Regression. Here be full code for you:
To make di best model, we fit use combined (one-hot encoded categorical + numeric) data from di example above together wit Polynomial Regression. Here na complete code for your convenience:
```python
# arrange training data
# 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 divide
# 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 di pipeline
# 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}%)')
# calculate RMSE and determination
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
Dis one suppose give us di best determination coefficient nearly 97%, and MSE=2.23 (~8% prediction error).
Dis one suppose give best determination coefficient close to 97%, and RMSE=2.23 (~8% error for prediction).
| Model | MSE | Determination |
| Model | RMSE | Determination |
|-------|-----|---------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
@ -361,18 +383,18 @@ Dis one suppose give us di best determination coefficient nearly 97%, and MSE=2.
| All features Linear | 2.84 (10.5%) | 0.94 |
| All features Polynomial | 2.23 (8.25%) | 0.97 |
🏆 Well done! You don create four Regression models for one lesson, and improve model quality to 97%. For final section on Regression, you go learn about Logistic Regression to know categories.
🏆 Well done! You create four Regression models inside one lesson, and improve model quality to 97%. For final section about Regression, you go learn Logistic Regression to find categories.
---
## 🚀Challenge
Try different variables for dis notebook to see how correlation dey relate to model accuracy.
Try different variables inside dis notebook to see how correlation relate to model accuracy.
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Review & Self Study
For dis lesson we learn about Linear Regression. Other important kinds of Regression dey. Read about Stepwise, Ridge, Lasso and Elasticnet techniques. Better course to learn more na [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
For dis lesson, we learn about Linear Regression. Other important Regression types dey. Read about Stepwise, Ridge, Lasso and Elasticnet techniques. One good course to study na di [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## Assignment
@ -382,5 +404,5 @@ For dis lesson we learn about Linear Regression. Other important kinds of Regres
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Dis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try make am correct, abeg make you sabi say automated translations fit get errors or wahala for accuracy. Di original document for im own language na di correct source wey you suppose trust pass. For important tori dem, better make professional human translation dey used. We no go gree for any misunderstanding or wrong meaning wey fit happen because of this translation.
Dis document don be translated by AI translation service wey dem dey call [Co-op Translator](https://github.com/Azure/co-op-translator). Even though we dey try make am correct, abeg sabi say automated translation fit get some error or mistake. The original document for im own language na im be the correct and original source. For important mata, e better make person wey sabi do professional human translation look am. We no go responsible for any kasala or misunderstanding wey fit happen because of how dis translation be.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -6,12 +6,12 @@
"source": [
"## Linear and Polynomial Regression for Pumpkin Pricing - Lesson 3\n",
"\n",
"Load di libraries wey you need and di dataset. Change di data to dataframe wey get small part of di data:\n",
"Load all di libraries wey you need and di dataset. Convert di data to one dataframe wey get small part of di data:\n",
"\n",
"- Only collect pumpkins wey dem price by bushel\n",
"- Only take pumpkins wey dem price by di bushel\n",
"- Change di date to month\n",
"- Calculate di price make e be average of di high and low prices\n",
"- Change di price make e show di pricing by bushel quantity\n"
"- Calculate di price as average of high and low prices\n",
"- Change di price make e show di price by bushel quantity\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Scatterplot dey remind us say we only get month data from August go reach December. We go need more data to fit draw conclusion for linear way.\n"
"A scatterplot dey remind us say we only get month data from August go reach December. We fit need more data to fit draw conclusion for linear way.\n"
]
},
{
@ -448,7 +448,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Make we see if dem dey connect:\n"
"Mek we see if dem get connection:\n"
]
},
{
@ -474,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"E be like say di correlation no too strong, but e get one oda relationship wey dey more important - because di price points for di plot wey dey up get some distinct clusters. Make we do one plot wey go show di different pumpkin varieties:\n"
"E dey look like say di correlation small, bot di get some oda more important relationship - becos di price points wey dey di plot up dere get several different cluster dem. Make we make one plot wey go show different pumpkin varieties:\n"
]
},
{
@ -538,7 +538,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"For now, make we focus only on one type - **pie type**.\n"
"For now, make we focus only for one kind - **pie type**.\n"
]
},
{
@ -666,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Di slope of di line fit dey determined from linear regression coefficients:\n"
"Di slope of di line fit fit find from linear regression coefficients:\n"
]
},
{
@ -693,7 +693,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We fit use di trained model take predict price:\n"
"We fit use the trained model predict price:\n"
]
},
{
@ -724,9 +724,9 @@
"source": [
"### Polynomial Regression\n",
"\n",
"Sometimes di relationship wey dey between di features and di results no dey straight. For example, pumpkin price fit high for winter (months=1,2), then e go drop for summer (months=5-7), and later e go rise again. Linear regression no fit catch dis kain relationship well.\n",
"Sometayms di kin relation wey dey between features and di results na non-linear. For example, pumpkin price fit high for winter (months=1,2), den e fit fall for summer (months=5-7), and den e go rise again. Linear regression no fit find dis kain relation correct.\n",
"\n",
"For dis kain case, we fit add extra features. One simple way na to use polynomials from di input features, wey go give us **polynomial regression**. For Scikit Learn, we fit use pipelines to pre-compute polynomial features automatically:\n"
"For dis kain case, we fit add extra features. Simple way na to use polynomials from input features, wey go give us **polynomial regression**. For Scikit Learn, we fit automatically pre-compute polynomial features using pipelines: \n"
]
},
{
@ -781,8 +781,11 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
@ -791,12 +794,12 @@
"source": [
"### Encoding varieties\n",
"\n",
"For better world, we go like make we fit predict price for different pumpkin varieties wit di same model. To fit variety inside di model, we first need to change am to number form, or **encode**. We get plenty ways wey we fit do am:\n",
"For dia perfect world, we wan fit predict price for different pumpkin varieties using di same model. To fit count variety, we first gats convert am to number form, or **encode**. Several way dey we fit do am:\n",
"\n",
"* Simple numeric encoding wey go build table of di different varieties, then go replace di variety name wit index for dat table. Dis one no be di best idea for linear regression, because linear regression dey use di number value of di index, and di number value no go fit match di price well well.\n",
"* One-hot encoding, wey go replace `Variety` column wit 4 different columns, one for each variety, wey go get 1 if di row na di variety wey dem talk, and 0 if e no be.\n",
"* Simple number encoding wey go build table of different varieties, then replace variety name with index for dat table. Dis no be di best idea for linear regression, because linear regression go consider di number value of di index, and di number value fit no relate well with di price.\n",
"* One-hot encoding, wey go replace `Variety` column with 4 different columns, one for each variety, wey go get 1 if di row na di correct variety, and 0 if e no be.\n",
"\n",
"Di code wey dey below go show how we fit one-hot encode variety:\n"
"Di code wey dey below show how we fit do one-hot encode for variety:\n"
]
},
{
@ -944,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Linear Regression on Variety\n",
"### Linear Regression on Variety \n",
"\n",
"We go use di same code wey dey up, but dis time, instead of `DayOfYear`, we go use our one-hot-encoded variety as input:\n"
"We go use the same code wey dey up, but instead make we use `DayOfYear` we go use our one-hot-encoded variety as input:\n"
]
},
{
@ -994,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We fit try use oda features for di same way, and join dem wit numerical features, like `Month` or `DayOfYear`:\n"
"We fit still try use oda features for di same way, and join dem wit numerical features, like `Month` or `DayOfYear`:\n"
]
},
{
@ -1027,7 +1030,7 @@
"source": [
"### Polynomial Regression\n",
"\n",
"Polynomial regression fit work too with categorical features wey dem don one-hot-encode. Di code to train polynomial regression go dey basically di same as wetin we don see before.\n"
"Polynomial regression fit fit also use wit categorical features wey dem don one-hot encode. Di code to train polynomial regression go basically be di same as we don see above.\n"
]
},
{
@ -1074,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Disclaimer**: \nDis docu don use AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator) take translate am. Even though we dey try make e accurate, abeg no forget say automatic translation fit get mistake or no correct well. Di original docu for di language wey dem write am first na di main correct one. For important information, e better make professional human translator check am. We no go fit take blame for any misunderstanding or wrong interpretation wey fit happen because of dis translation.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Disclaimer**:\nDis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try to make am correct, abeg sabi say automated translation fit get mistakes or no too accurate. Di original document for im own language na di correct source wey you suppose trust. For important information, make you use professional human translation. We no go responsible for any misunderstanding or wahala wey fit happen because of dis translation.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1104,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-11-18T19:17:17+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "pcm"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "ta"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-10-11T11:28:53+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:24:27+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "ta"
},
@ -90,8 +90,8 @@
"language_code": "ta"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T17:08:50+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:23:55+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "ta"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "ta"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:21:57+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ta"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-10-11T11:41:17+00:00",

@ -1,123 +1,125 @@
# இயந்திர கற்றல் நுட்பங்கள்
இயந்திர கற்றல் மாதிரிகளை உருவாக்குவது, பயன்படுத்துவது மற்றும் பராமரிப்பது, அவற்றின் தரவுகளை கையாள்வது போன்ற செயல்முறைகள் பல்வேறு அபிவிருத்தி பணிமுறைகளிலிருந்து மிகவும் வேறுபட்டவை. இந்த பாடத்தில், இந்த செயல்முறையை தெளிவுபடுத்தி, நீங்கள் அறிந்துகொள்ள வேண்டிய முக்கிய நுட்பங்களை விளக்குவோம். நீங்கள்:
இயந்திர கற்றல் மாதிரிகளை உருவாக்குவது, பயன்படுத்துவது, மற்றும் பராமரிப்பது மற்றும் அவற்றில் பயன்படுத்தப்படும் தரவு என்பது பல்வேறு பிற மேம்பாட்டு பணியெழுத்துக்களிலிருந்து மிகவும் வேறுபட்ட செயல்முறை ஆகும். இந்த பாடத்தில், நாம் இந்த செயல்முறையை புரிந்துகொண்டு, நீங்கள் அறிந்து கொள்ள வேண்டிய முக்கிய நுட்பங்களை விளக்கப்போகிறோம். நீங்கள்:
- இயந்திர கற்றலின் அடிப்படை செயல்முறைகளை உயர்ந்த நிலை பார்வையில் புரிந்துகொள்வீர்கள்.
- 'மாதிரிகள்', 'முன்கூட்டிய கணிப்புகள்', மற்றும் 'பயிற்சி தரவுகள்' போன்ற அடிப்படை கருத்துகளை ஆராய்வீர்கள்.
- இயந்திர கற்றலை ஆதரிக்கும் செயல்முறைகளை உயர்நிலை அளவில் புரிந்துகொள்ளலாம்.
- 'மாடல்கள்', 'முன்னறிவிப்புகள்', மற்றும் 'பயிற்சி தரவு' போன்ற அடிப்படை கருத்துக்களை ஆராயலாம்.
## [பாடத்துக்கு முன் கேள்வி](https://ff-quizzes.netlify.app/en/ml/)
## [முன்-பாட நிகழ்ச்சி வினாடி விடை](https://ff-quizzes.netlify.app/en/ml/)
[![இயந்திர கற்றல் தொடக்கத்திற்கான - இயந்திர கற்றல் நுட்பங்கள்](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "இயந்திர கற்றல் தொடக்கத்திற்கான - இயந்திர கற்றல் நுட்பங்கள்")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 மேலே உள்ள படத்தை கிளிக் செய்து இந்த பாடத்தைப் பற்றிய குறுகிய வீடியோவைப் பாருங்கள்.
> 🎥 இமேஜ் மீது கிளிக் செய்து, இந்த பாடத்தைக் குறுகிய காணொளியாக பார்க்கவும்.
## அறிமுகம்
உயர்ந்த நிலை பார்வையில், இயந்திர கற்றல் (ML) செயல்முறைகளை உருவாக்கும் கலை பல படிகளைக் கொண்டுள்ளது:
உயர் நிலை திருப்பத்தில், இயந்திர கற்றல் (ML) செயல்முறைகளை உருவாக்கும் கலை பல படிகளால் ஆனது:
1. **கேள்வியைத் தீர்மானிக்கவும்**. பெரும்பாலான ML செயல்முறைகள் ஒரு கேள்வியை கேட்பதிலிருந்து தொடங்குகின்றன, இது ஒரு எளிய நிபந்தனையுடன் செயல்படும் நிரலால் அல்லது விதிமுறைகளின் அடிப்படையிலான இயந்திரத்தால் பதிலளிக்க முடியாது. இந்த கேள்விகள் பெரும்பாலும் தரவின் அடிப்படையில் முன்கூட்டிய கணிப்புகளைச் சுற்றி மையமாக இருக்கும்.
2. **தரவை சேகரித்து தயாரிக்கவும்**. உங்கள் கேள்விக்கு பதிலளிக்க, உங்களுக்கு தரவுகள் தேவைப்படும். உங்கள் தரவின் தரம் மற்றும் சில நேரங்களில் அளவு, உங்கள் ஆரம்ப கேள்விக்கு நீங்கள் எவ்வளவு நன்றாக பதிலளிக்க முடியும் என்பதை தீர்மானிக்கும். தரவுகளை காட்சிப்படுத்துவது இந்த கட்டத்தின் முக்கிய அம்சமாகும். இந்த கட்டம், மாதிரியை உருவாக்க தரவுகளை பயிற்சி மற்றும் சோதனை குழுவாகப் பிரிப்பதையும் உள்ளடக்கியது.
3. **பயிற்சி முறையைத் தேர்ந்தெடுக்கவும்**. உங்கள் கேள்வி மற்றும் உங்கள் தரவின் தன்மை ஆகியவற்றைப் பொறுத்து, உங்கள் தரவுகளை சிறப்பாக பிரதிபலிக்கவும், அதற்கு எதிராக துல்லியமான கணிப்புகளைச் செய்யவும் ஒரு மாதிரியை எப்படி பயிற்சி செய்ய வேண்டும் என்பதை நீங்கள் தேர்ந்தெடுக்க வேண்டும். இது உங்கள் ML செயல்முறையின் ஒரு பகுதி, இது குறிப்பிட்ட நிபுணத்துவத்தைத் தேவைப்படும் மற்றும் பெரும்பாலும் கணிசமான அளவிலான பரிசோதனையைத் தேவைப்படும்.
4. **மாதிரியை பயிற்சி செய்யவும்**. உங்கள் பயிற்சி தரவுகளைப் பயன்படுத்தி, தரவிலுள்ள முறைமைகளை அடையாளம் காண ஒரு மாதிரியை பயிற்சி செய்ய பல்வேறு அல்காரிதங்களைப் பயன்படுத்துவீர்கள். மாதிரி, தரவின் சில பகுதிகளை மற்றவற்றை விட முன்னுரிமை அளிக்க, உள்நாட்டு எடைகளை பயன்படுத்தி ஒரு சிறந்த மாதிரியை உருவாக்கலாம்.
5. **மாதிரியை மதிப்பீடு செய்யவும்**. உங்கள் சேகரிக்கப்பட்ட தொகுப்பிலிருந்து, உங்கள் சோதனை தரவுகளைப் பயன்படுத்தி, மாதிரி எப்படி செயல்படுகிறது என்பதைப் பாருங்கள்.
6. **அளவுரு அமைத்தல்**. உங்கள் மாதிரியின் செயல்திறனை அடிப்படையாகக் கொண்டு, நீங்கள் மாதிரியை பயிற்சி செய்ய பயன்படுத்தப்படும் அல்காரிதங்களின் நடத்தை கட்டுப்படுத்தும் பல்வேறு அளவுருக்கள் அல்லது மாறிகள் மூலம் செயல்முறையை மீண்டும் செய்யலாம்.
7. **கணிக்கவும்**. உங்கள் மாதிரியின் துல்லியத்தை சோதிக்க புதிய உள்ளீடுகளைப் பயன்படுத்தவும்.
1. **வினாவைத் தீர்மானிக்கவும்**. பெரும்பாலான ML செயல்முறைகள் ஒரு எளிய நிபந்தனை சார்ந்த நிரல் அல்லது விதிகளின் இயந்திரத்தால் பதில் அளிக்க முடியாத கேள்வியுடன் ஆரம்பிக்கின்றன. இக் கேள்விகள் பெரும்பாலும் தரவுத் தொகுப்பின் அடிப்படையில் முன்னறிவிப்புகளையும் சுற்றுகிறது.
2. **தரவை சேகரித்து தயாரிக்கவும்**. உங்கள் கேள்விக்கு பதில் அளிக்க நீங்கள் தரவு தேவை. உங்கள் தரவின் தரமும், சில நேரங்களில் அளவும், உங்கள் ஆரம்ப கேள்வியை எவ்வாறு நன்றாக நீங்கள் பதில் அளிக்க முடியும் என்பதை தீர்மானிக்கும். தரவு காட்சிப்படுத்தல் இந்த படியின் முக்கிய அம்சமாகும். இந்த படியில் தரவுகளை பயிற்சி மற்றும் சோதனை குழுக்களாகப் பிரிப்பதும் அடக்கம்.
3. **பயிற்சி முறையைத் தேர்ந்தெடுக்கவும்**. உங்கள் கேள்வியும், தரவின் இயல்பும் அடிப்படையில், நீங்கள் ஒரு மாதிரியை எப்படி பயிற்றுவிக்க வேண்டும் எனத் தேர்ந்தெடுக்க வேண்டும், அது உங்கள் தரவை சிறப்பாக பிரதிபலிக்கவும், அதன் மீது துல்லியமான முன்னறிவிப்புகளைச் செய்யவும். இது உங்கள் ML செயல்முறையின் அந்த பகுதி ஆகும், இது சிறப்பான நிபுணத்துவத்தையும், பெரும்பாலும் ஏராளமான சோதனைகளையும் தேவைக்கும்.
4. **மாதிரியை பயிற்றுவிக்கவும்**. உங்கள் பயிற்சி தரவைப் பயன்படுத்தி, பல்வேறு அல்காரிதம்களை கொண்டு மாதிரியை பயிற்றுவித்து, தரவில் உள்ள வடிவங்களை அடையாளம் காண அதிகரிக்கவும். மாதிரி சில இடைவெளித் எடைகள் போன்றவற்றை பயன்படுத்தி தரவின் சில பகுதிகளை முன்னுரிமை தரும் வகையில் சரிசெய்யலாம்.
5. **மாதிரியை மதிப்பீடு செய்யவும்**. முன்பே காணாத தரவுகளை (உங்கள் சோதனை தரவு) பயன்படுத்தி மாதிரியின் செயல்திறனை பாருங்கள்.
6. **பராமிதி சரிசெய்தல்**. உங்கள் மாதிரியின் செயல்திறன்படி, நீங்கள் மாதிரியை பயிற்றுவிக்க பயன்படுத்தும் அல்காரிதங்களில் கட்டுப்பாடு கொண்ட பராமிதிகளுடன் செயல்முறை மீண்டும் செய்யலாம்.
7. **முன்னறிவு செய்யவும்**. புதிய உள்ளீடுகளை பயன்படுத்தி உங்கள் மாதிரியின் துல்லியத்தை பரிசோதிக்கவும்.
## எந்த கேள்வியை கேட்க வேண்டும்
கணினிகள் தரவிலுள்ள மறைக்கப்பட்ட முறைமைகளை கண்டறிவதில் மிகவும் திறமையானவை. இது ஒரு குறிப்பிட்ட துறையில் கேள்விகள் உள்ள ஆராய்ச்சியாளர்களுக்கு மிகவும் உதவியாக இருக்கும், இது ஒரு நிபந்தனையுடன் செயல்படும் விதிமுறைகளின் இயந்திரத்தை உருவாக்குவதன் மூலம் எளிதாக பதிலளிக்க முடியாது. உதாரணமாக, ஒரு கணக்கீட்டு பணியில், ஒரு தரவியல் விஞ்ஞானி புகைபிடிப்பவர்களின் மரணத்திற்கான விதிகளை உருவாக்க முடியும்.
கணினிகள் தரவுகளில் மறைந்து உள்ள வடிவங்களை கண்டுபிடிப்பதில் சிறந்த திறமையுடையவையாக இருக்கின்றன. இது ஒரு வலுவான உதவியாக இருக்கும், ஏனெனில் சில துறைகளில் உள்ள கேள்விகளை ஒரு நிபந்தனைவாத விதிகள் இயந்திரத்தை உருவாக்குவதால் எளிதில் பதில் அளிக்க முடியாது. உதாரணமாக, ஒரு டேட்டா விஞ்ஞானி வரும் காலத்தில் புகையிலைபிடிப்பவர்களும், பிடிப்பவர்களும் உடைய மரண விகிதங்களை குறிக்கும் விதிகளை நுண்ணறிவுடன் உருவாக்கலாம்.
எனினும், பல்வேறு மாறிகள் சமன்பாட்டில் கொண்டு வரப்பட்டால், கடந்த கால சுகாதார வரலாற்றின் அடிப்படையில் எதிர்கால மரண விகிதங்களை கணிக்க ஒரு ML மாதிரி மிகவும் திறமையாக இருக்கலாம். ஒரு மகிழ்ச்சியான உதாரணமாக, ஒரு குறிப்பிட்ட இடத்தில் ஏப்ரல் மாதத்திற்கான வானிலை கணிப்புகளை, அகலாங்கு, நீளாங்கு, காலநிலை மாற்றம், கடலுக்கு அருகாமை, ஜெட் ஸ்ட்ரீம் முறைமைகள் மற்றும் பலவற்றை உள்ளடக்கிய தரவின் அடிப்படையில் செய்யலாம்.
இருப்பினும், பல்வேறு மாற்றிகள் சேர்க்கப்பட்டால், கடந்த கால ஆரோக்கிய வரலாறு அடிப்படையில் எதிர்கால மரண விகிதங்களை முன் கணிப்பதில் ML மாதிரி மிகவும் திறமையானது ஆகும். மேலும் சந்தோஷமான உதாரணமாக, ஏப்ரல் மாதத்தில் ஒரு குறிப்பிட்ட இடத்தில் காலநிலை முன் கணிப்புகளை செய்யலாம், அதில் அகலம், நீளரம், காலநிலை மாற்றம், கடலுக்கு நெருக்கம், ஜெட் ஸ்ட்ரீம் வடிவங்கள் மற்றும் பல அம்சங்கள் உள்ளன.
வானிலை மாதிரிகளைப் பற்றிய இந்த [சுருக்கமான சுருக்கம்](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) வானிலை பகுப்பாய்வில் ML ஐப் பயன்படுத்துவதற்கான வரலாற்று பார்வையை வழங்குகிறது.
இந்த [ஸ்லைட் வெரைகள்](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) காலநிலை மாதிரிகளில் ML பயன்படுத்துவதற்கு ஒரு வரலாற்று பார்வையை வழங்குகின்றன.
## மாதிரி உருவாக்கத்திற்கு முன் பணிகள்
## கட்டுமான முன் பணிகள்
மாதிரியை உருவாக்கத் தொடங்குவதற்கு முன், நீங்கள் நிறைவேற்ற வேண்டிய பல பணிகள் உள்ளன. உங்கள் கேள்வியை சோதிக்கவும், மாதிரியின் கணிப்புகளின் அடிப்படையில் ஒரு கருதுகோளை உருவாக்கவும், பல கூறுகளை அடையாளம் காணவும் மற்றும் அமைக்கவும் வேண்டும்.
உங்கள் மாதிரியை உருவாக்கும் முன், நிறைய பணிகளை நீங்கள் நிறைவேற்ற வேண்டும். உங்கள் கேள்வியை சோதித்து, ஒரு வரைவைக் கணிக்க, மாதிரியின் முன்னறிவிப்புகளுக்கு அடிப்படையாக பல கூறுகளை அடையாளம் கண்டு, கட்டமைக்க வேண்டும்.
### தரவுகள்
### தரவு
உங்கள் கேள்விக்கு எந்தவிதமான உறுதிப்பாட்டுடன் பதிலளிக்க, சரியான வகையான போதுமான அளவிலான தரவுகள் தேவைப்படும். இந்த நேரத்தில் நீங்கள் செய்ய வேண்டிய இரண்டு விஷயங்கள் உள்ளன:
உங்கள் கேள்விக்கு எந்த விதமான உறுதிப்படுத்தலும் இல்லாமல் பதில் அளிக்க, சரியான வகை மற்றும் போதுமான அளவு தரவு தேவை. இதற்காக இரண்டு முக்கிய நடவடிக்கைகள் உண்டு:
- **தரவை சேகரிக்கவும்**. தரவுகள் பகுப்பாய்வில் நியாயம் பற்றிய முந்தைய பாடத்தை மனதில் வைத்துக்கொண்டு, உங்கள் தரவுகளை கவனமாக சேகரிக்கவும். இந்த தரவின் மூலங்கள், அதில் உள்ள எந்தவொரு உட்கார்ந்த பாகுபாடுகள் மற்றும் அதன் தோற்றத்தை ஆவணப்படுத்தவும்.
- **தரவைத் தயாரிக்கவும்**. தரவுகளை தயாரிக்கும் செயல்முறையில் பல படிகள் உள்ளன. இது பல்வேறு மூலங்களிலிருந்து வந்தால், தரவுகளை ஒருங்கிணைத்து, சாதாரணமாக்க வேண்டும். தரவின் தரத்தை மற்றும் அளவினை மேம்படுத்த, சரங்களை எண்களாக மாற்றுவது போன்ற பல்வேறு முறைகளைப் பயன்படுத்தலாம் (நாம் [கிளஸ்டரிங்](../../5-Clustering/1-Visualize/README.md) இல் செய்யும் போல்). நீங்கள் அசல் தரவின் அடிப்படையில் புதிய தரவுகளை உருவாக்கலாம் (நாம் [வகைப்படுத்தல்](../../4-Classification/1-Introduction/README.md) இல் செய்யும் போல்). தரவுகளை சுத்தம் செய்து திருத்தலாம் (நாம் [வெப் பயன்பாட்டிற்கு](../../3-Web-App/README.md) முன் செய்யும் போல்). இறுதியாக, உங்கள் பயிற்சி நுட்பங்களைப் பொறுத்து, அதை சீரற்றதாக்கி கலக்கவும்.
- **தரவை சேகரிக்கவும்**. கடந்த பாடத்தில் மதிப்பீட்டின் நியாயமான தரவு அணுகுமுறையை நினைவில் வைத்து, உங்கள் தரவை கவனமாக சேகரிக்கவும். தரவின் மூலங்களை, அதில் உள்ள முன்கூட்டிய பக்கவாதங்களை அறிந்து அதை ஆவணப்படுத்துக.
- **தரவை தயார் செய்யவும்**. தரவு தயாரிப்பு பல படிகளைக் கொண்டுள்ளது. வேறு வேறு மூலங்களிலிருந்து வந்ததாக இருந்தால், தரவை ஒன்றிணைத்து சமமுறைப்படுத்த வேண்டும். தரவு தரம் மற்றும் அளவை மேம்படுத்த நீங்கள் பல முறைகள் பயன்படுத்தலாம், எடுத்துக்காட்டாக எண்களாக சரங்கள் மாற்றுதல் ([கீழே போல கிளஸ்டரிங்](../../5-Clustering/1-Visualize/README.md)). நீங்கள் புதிய தரவையும் உருவாக்கலாம் ([கிளாசிபிகேஷன்](../../4-Classification/1-Introduction/README.md) பாடத்தில் போல). வரம்பற்ற மற்றும் மாற்றியமைத்தலும் (நாம் [Web App](../../3-Web-App/README.md) பாடத்திற்கு முன் செய்வது போல்) இதில் அடக்கம். இறுதியில் உங்கள் பயிற்சி நுட்பங்களுக்கு ஏற்ப அதனை அசைவுசெய்து அசைவுப்படுத்தவும் வேண்டும்.
உங்கள் தரவுகளை சேகரித்து செயல்படுத்திய பிறகு, உங்கள் கேள்வியைத் தீர்மானிக்க அதன் வடிவம் உங்களை அனுமதிக்குமா என்பதைப் பாருங்கள். உங்கள் கொடுக்கப்பட்ட பணியில் தரவுகள் நன்றாக செயல்படாது என்று கண்டுபிடிக்கலாம், [கிளஸ்டரிங்](../../5-Clustering/1-Visualize/README.md) பாடங்களில் நாம் கண்டுபிடித்தது போல!
தரவு சேகரிப்பு மற்றும் செயலாக்கம் முடிந்தபின், அதன் வடிவம் உங்கள் கேள்வியைத் தீர்க்க அனுமதிப்பதா என ஒரு நிமிடம் பாருங்கள். தரவு உங்கள் பணிக்கு நன்றாகச் செயல்படாமல் இருக்கக்கூடும் என்பது, நாங்கள் [கிளஸ்டரிங்](../../5-Clustering/1-Visualize/README.md) பாடங்களில் கண்டுபிடிப்பதுபோல்!
### அம்சங்கள் மற்றும் இலக்கு
ஒரு [அம்சம்](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) என்பது உங்கள் தரவின் அளவிடக்கூடிய பண்பாகும். பல தரவுத்தொகுப்புகளில் இது 'தேதி', 'அளவு' அல்லது 'நிறம்' போன்ற தலைப்புகளாக வெளிப்படுகிறது. உங்கள் அம்ச மாறி, பொதுவாக `X` என குறிக்கப்படும், மாதிரியை பயிற்சி செய்ய பயன்படுத்தப்படும் உள்ளீடு மாறியை பிரதிநிதித்துவப்படுத்துகிறது.
ஒரு [அம்சம்](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) உங்கள் தரவின் அளவிடக்கூடிய பண்பாகும். பல தரவு தொகுப்புகளில் அது ஒரு நெடுவரிசை தலைப்பாக, உதாரணமாக 'தேதி', 'அளவு' அல்லது 'நிறம்' என வெளிக்காட்டப்படுகிறது. உங்கள் அம்ச மாறி, பொதுவாக குறியிடப்பட்டுள்ள `X`, ஒரு மாதிரியை பயிற்றுவிக்க பயன்படுத்தப்படும் உள்ளீடு மாறியை குறிக்கிறது.
இலக்கு என்பது நீங்கள் கணிக்க முயற்சிக்கும் விஷயமாகும். இலக்கு பொதுவாக `y` என குறிக்கப்படும், இது உங்கள் தரவிலிருந்து நீங்கள் கேட்க முயற்சிக்கும் கேள்விக்கு பதிலாகும்: டிசம்பர் மாதத்தில் எந்த **நிறம்** கொண்ட பூசணிக்காய்கள் குறைந்த விலையில் இருக்கும்? சான் பிரான்சிஸ்கோவில், எந்தப் பகுதிகளில் சிறந்த நிலம**விலை** இருக்கும்? சில நேரங்களில் இலக்கு 'லேபிள் அட்ரிப்யூட்' என்றும் குறிப்பிடப்படுகிறது.
ஒரு இலக்கு என்பது நீங்கள் முன்னறிவிக்க முயற்சிக்கும் ஒன்று ஆகும். இலக்கு பொதுவாக குறிக்கப்படும் `y` உங்கள் கேள்விக்கு தரவிற்கு நீங்கள் கேட்கிற பதிலை குறிக்கிறது: டிசம்பரில், எந்த **நிறம்** பாம்பாக்கள் மிகவும் மலையாக இருக்கும்? சான் பிரான்சிஸ்கோவில், எந்த பகுதியில் சிறந்த நில சொத்துக**விலை** இருக்கும்? சில நேரங்களில் இலக்கு ஒரு லேபிள் பண்பாகும்.
### உங்கள் அம்ச மாறியைத் தேர்ந்தெடுக்கவும
### உங்கள் அம்ச மாறியை தேர்வு செய்தல
🎓 **அம்சத் தேர்வு மற்றும் அம்சம் எடுக்கும் செயல்முறை**. ஒரு மாதிரியை உருவாக்கும்போது எந்த மாறியைத் தேர்ந்தெடுப்பது என்று நீங்கள் எப்படி தெரிந்துகொள்வீர்கள்? நீங்கள் சரியான மாறிகளை தேர்ந்தெடுக்கும் செயல்முறையைப் பின்பற்றுவீர்கள். அவை ஒரே மாதிரியானவை அல்ல: "அம்சம் எடுக்கும் செயல்முறை அசல் அம்சங்களின் செயல்பாடுகளிலிருந்து புதிய அம்சங்களை உருவாக்குகிறது, ஆனால் அம்சத் தேர்வு அம்சங்களின் ஒரு துண்டை மட்டுமே திரும்ப அளிக்கிறது." ([மூலம்](https://wikipedia.org/wiki/Feature_selection))
🎓 **அம்ச தேர்வு மற்றும் அம்ச உற்பத்தி** மாதிரி உருவாக்கும்போது எந்த மாறியைத் தேர்வு செய்வது என்று எப்படி அறிவீர்கள்? நீங்கள் அதிக செயல்திறன் கொண்ட மாதிரிக்கு ஏற்றதாக அம்ச தேர்வு அல்லது அம்ச உற்பத்தி செயல்முறையை கடந்து செல்கீங்கள். அவை ஒருபோதும் ஒரே மாதிரியல்ல: "அம்ச உற்பத்தி என்பது அசல் அம்சங்களின் செயல்பாடுகளிலிருந்து புதிய அம்சங்களை உருவாக்குகிறது, ஆனால் அம்ச தேர்வு என்பது அம்சங்களின் துணுக்கைப் பின்வரும்." ([மூலம்](https://wikipedia.org/wiki/Feature_selection))
### உங்கள் தரவுகளை காட்சிப்படுத்தவும
### உங்கள் தரவை காட்சிப்படுத்தல
தரவுகளை காட்சிப்படுத்துவதற்கான பல சிறந்த நூலகங்களைப் பயன்படுத்தும் திறன் என்பது ஒரு தரவியல் விஞ்ஞானியின் கருவிகளின் முக்கிய அம்சமாகும். உங்கள் தரவுகளை காட்சிப்படுத்துவது, நீங்கள் பயன்படுத்தக்கூடிய மறைக்கப்பட்ட தொடர்புகளை கண்டறிய உதவலாம். உங்கள் காட்சிப்படுத்தல்கள் பாகுபாடு அல்லது சமநிலையற்ற தரவுகளை கண்டறியவும் உதவலாம் ([வகைப்படுத்தல்](../../4-Classification/2-Classifiers-1/README.md) இல் நாம் கண்டுபிடித்தது போல).
ஒரு தகவல் விஞ்ஞானி கருவிகளின் முக்கிய அம்சமாக தரவை பல சிறந்த நூலகங்கள் போன்று Seaborn அல்லது MatPlotLib மூலம் காட்சிப்படுத்துவதற்கு திறன் உள்ளது. உங்கள் தரவை காட்சிப்படுத்துவதால் மறைந்துள்ள இணைப்புகளைக் கண்டுபிடித்து அவற்றை பயன்படுத்த முடியும். உங்கள் காட்சிகள் பக்கவாதம் அல்லது சமநிலையற்ற தரவையும் கண்டுபிடிக்க உதவும் ([கிளாசிபிகேஷன்](../../4-Classification/2-Classifiers-1/README.md) பாடத்தில் பார்க்கலாம்).
### உங்கள் தரவுத்தொகுப்பை பிரிக்கவும்
பயிற்சி செய்யும் முன், உங்கள் தரவுத்தொகுப்பை சம அளவில்லாத அளவுகளில் இரண்டு அல்லது அதற்கு மேற்பட்ட பகுதிகளாகப் பிரிக்க வேண்டும், ஆனால் தரவுகளை நன்றாக பிரதிநிதித்துவப்படுத்த வேண்டும்.
பயிற்சி முன்னதாக, உங்கள் தரவுத்தொகுப்பை குறைவான அளவு கொண்ட ஒருகூட்டமாக அல்லாமல், பல பகுதிகளாக பிரிக்க வேண்டும், ஆனால் அவை தரவைக் சிறப்பாக பிரதிபலிக்க வேண்டும்.
- **பயிற்சி**. தரவுத்தொகுப்பின் இந்த பகுதி உங்கள் மாதிரிக்கு பொருத்தமாக உள்ளது. இது அசல் தரவுத்தொகுப்பின் பெரும்பகுதியை உள்ளடக்கியது.
- **சோதனை**. சோதனை தரவுத்தொகுப்பு என்பது அசல் தரவிலிருந்து சேகரிக்கப்பட்ட சுயாீன தரவுகளின் குழு, இது உருவாக்கப்பட்ட மாதிரியின் செயல்திறனை உறுதிப்படுத்த பயன்படுத்தப்படுகிறது.
- **ரிபார்ப்பு**. சரிபார்ப்பு தொகுப்பு என்பது மாதிரியின் ஹைப்பர்பாராமீட்டர்கள் அல்லது கட்டமைப்பை மேம்படுத்த ஒரு சிறிய சுயாதீன தரவுகளின் குழு ஆகும். உங்கள் தரவின் அளவு மற்றும் நீங்கள் கேட்கும் கேள்வியைப் பொறுத்து, இந்த மூன்றாவது தொகுப்பை உருவாக்க தேவையில்லை ([நேரம் வரலாற்று கணிப்பு](../../7-TimeSeries/1-Introduction/README.md) இல் நாம் குறிப்பிட்டது போல).
- **பயிற்சி**. இந்த பகுதி உங்கள் மாதிரிக்குப் பொருந்தும், பயிற்றுவிப்பதற்கு. இது அசல் தரவுத்தொகுப்பின் பெரும்பங்கு.
- **சோதனை**. சோதனை தரவு என்பது தனித்துப் பகுதி தரவு, பொதுவாக அசல் தரவிலிருந்து சேகரிக்கப்பட்டது, உருவாக்கப்பட்ட மாதிரியின் செயல்திறன் உறுதிப்படுத்த பயன்படும்.
- **ெல்லுபடியாக்கல்**. செல்லுபடியாக்கல் தொகுப்பு என்பதன் பெரும்பாலும் சிறிய தனித்துக் கூறுகளின் தொகுப்பு, அதனை மாதிரியின் ஹைப்பர்பராமிதர்களை, அல்லது கட்டமைப்பை, மேம்படுத்த பயன்படுத்துகிறீர்கள். உங்கள் தரவு அளவிற்கு மற்றும் கேள்விக்கு ஏற்ப, இந்த மூன்றாவது தொகுப்பை கட்டியமைக்க வேண்டாமாயிருக்கலாம் ([டைம் சீரி ஃபோர்காஸ்டிங்](../../7-TimeSeries/1-Introduction/README.md) பாடமாக உள்ளது).
## ஒரு மாதிரியை உருவாக்குதல்
## மாதிரியை கட்டமைத்தல்
உங்கள் பயிற்சி தரவுகளைப் பயன்படுத்தி, உங்கள் நோக்கம் ஒரு மாதிரியை உருவாக்குவது, அல்லது உங்கள் தரவின் புள்ளிவிவரங்களை பிரதிநிதித்துவப்படுத்துவது, பல்வேறு அல்காரிதங்களைப் பயன்படுத்தி அதை **பயிற்சி** செய்ய வேண்டும். ஒரு மாதிரியை பயிற்சி செய்வது, தரவுகளை வெளிப்படுத்தி, அது கண்டறியும் முறைமைகளைப் பற்றி கருதுகோள்களை உருவாக்க, சரிபார்க்க மற்றும் ஏற்க அல்லது மறுக்க அனுமதிக்கிறது.
உங்கள் பயிற்சி தரவைக் கொண்டு, அவற்றின் பல அல்காரிதங்களைப் பயன்படுத்தி, உங்கள் தரவின் ஒரு புள்ளியியல் பிரதிபலிப்பான, ஒரு மாதிரியை **பயிறுத்த** உருவாக்குவது உங்கள் குறிக்கோள். மாதிரியை பயிற்றுவிப்பது அதற்கு தரவை காட்டுவது மற்றும் அது கண்டுபிடிக்கும் காட்சி வடிவங்களை பற்றிய கருதுகோள்களை செய்ய அனுமதிக்கும்.
### பயிற்சி முறையைத் தீர்மானிக்கவும்
### பயிற்சி முறையைத் தேர்வு செய்யவும்
உங்கள் கேள்வி மற்றும் உங்கள் தரவின் தன்மை ஆகியவற்றைப் பொறுத்து, அதை பயிற்சி செய்ய ஒரு முறையை நீங்கள் தேர்ந்தெடுப்பீர்கள். [Scikit-learn இன் ஆவணங்களை](https://scikit-learn.org/stable/user_guide.html) - நாம் இந்த பாடத்தில் பயன்படுத்துகிறோம் - படிக்கும்போது, ஒரு மாதிரியை பயிற்சி செய்ய பல வழிகளை நீங்கள் ஆராயலாம். உங்கள் அனுபவத்தைப் பொறுத்து, சிறந்த மாதிரியை உருவாக்க பல்வேறு முறைகளை முயற்சிக்க வேண்டியிருக்கும். தரவியல் விஞ்ஞானிகள் ஒரு மாதிரியின் செயல்திறனை மதிப்பீடு செய்யும் செயல்முறையை நீங்கள் கடந்து செல்ல வாய்ப்பு உள்ளது, அதற்கு தெரியாத தரவுகளை வழங்கி, துல்லியம், பாகுபாடு மற்றும் தரத்தை குறைக்கும் பிற பிரச்சினைகளைச் சரிபார்த்து, கொடுக்கப்பட்ட பணிக்கான மிகவும் பொருத்தமான பயிற்சி முறையைத் தேர்ந்தெடுக்கவும்.
உங்கள் கேள்வி மற்றும் தரவு இயல்பின்படி, அதனை பயிற்றுவிக்க ஒரு முறை தேர்வு செய்ய வேண்டும். [Scikit-learn ஆவணங்களை](https://scikit-learn.org/stable/user_guide.html) நோக்கி பயண்படுத்தும் இந்த பாடத் தொடரில் பல பயிற்சி முறைகளை ஆராயலாம். அனுபவம் அடிப்படையில் சிறந்த மாதிரியை கட்டமைக்க பல முறைகளை முயற்சி செய்ய வேண்டும். தரவு விஞ்ஞானிகள் பல நேரங்களில் ஒளியற்ற தரவை மாதிரிக்கு வழங்கி அதன் செயல்திறனை மதிப்பீடு செய்து, துல்லியம், பக்கவாதம் மற்றும் பெயர் குறைவான பிரச்சினைகளை பார்வையிட்டு, பணிக்கான உகந்த பயிற்சி முறையைத் தேர்வு செய்கின்றனர்.
### ஒரு மாதிரியை பயிற்சி செய்யவும்
### மாதிரியை பயிற்றுவிக்கவும்
உங்கள் பயிற்சி தரவுகளுடன், ஒரு மாதிரியை உருவாக்க 'பிட்' செய்ய நீங்கள் தயாராக இருக்கிறீர்கள். பல ML நூலகங்களில், 'model.fit' என்ற குறியீட்டை நீங்கள் காண்பீர்கள் - இது உங்கள் அம்ச மாறியை (பொதுவாக 'X') மற்றும் ஒரு இலக்கு மாறியை (பொதுவாக 'y') மதிப்பீடு செய்ய அனுப்பும் நேரம்.
உங்கள் பயிற்சி தரவோடு, அதை 'பிடி'செய்து மாதிரியை உருவாக்கத் தயாராக இருப்பீர்கள். பல ML நூலகங்களில் 'model.fit' போன்ற குறியீடு காணப்படும் - இந்த நேரத்தில் நீங்கள் பெரும்பாலும் 'X' எனும் அம்ச மாறியை மதிப்புகளின் வரிசையாகவும், 'y' எனும் இலக்கு மாறியையும் அனுப்புகிறீர்கள்.
### மாதிரியை மதிப்பீடு செய்யவும்
பயிற்சி செயல்முறை முடிந்தவுடன் (ஒரு பெரிய மாதிரியை பயிற்சி செய்ய பல முறை அல்லது 'எபோக்கள்' ஆகலாம்), அதன் செயல்திறனை மதிப்பீடு செய்ய நீங்கள் சோதனை தரவுகளைப் பயன்படுத்தலாம். இந்த தரவுகள், மாதிரி முன்பு பகுப்பாய்வு செய்யாத அசல் தரவின் ஒரு துண்டாகும். உங்கள் மாதிரியின் தரத்தைப் பற்றிய அளவுகோல் அட்டவணையை நீங்கள் அச்சிடலாம்.
பயிற்சி செயல்முறை முடிந்ததும் (பல முறை திருப்பங்கள் அல்லது 'எபோச்சுகள்' தேவைப்படலாம்), நீங்கள் சோதனை தரவைப் பயன்படுத்தி மாதிரியின் தரத்தை மதிப்பீடு செய்யலாம். இந்த தரவு மாதிரி முன் அணுகாத, அசலில் இருந்த தரவின் ஒரு துணுக்குதான். மாதிரியின் தரத்தைக் குறிக்க முறைமைகளை அச்சிடலாம்.
🎓 **மாதிரி பொருத்தம்**
🎓 **மாதிரி பிடித்தல்**
இயந்திர கற்றல் சூழலில், மாதிரி பொருத்தம் என்பது, அது அறியாத தரவுகளை பகுப்பாய்வு செய்ய முயற்சிக்கும் போது மாதிரியின் அடிப்படை செயல்பாட்டின் துல்லியத்தைக் குறிக்கிறது.
இயந்திர கற்றல் சூழலில், மாதிரி பிடித்தல் என்பது மாதிரியின் அடிப்படை செயல்பாட்டின் துல்லியம்; அது பழகாத தரவைக் கணிக்க முயற்சிக்கிறது.
🎓 **குறைவான பொருத்தம்** மற்றும் **அதிக பொருத்தம்** ஆகியவை மாதிரியின் தரத்தை குறைக்கும் பொதுவான பிரச்சினைகள், ஏனெனில் மாதிரி போதுமான அளவு பொருந்தவில்லை அல்லது மிகவும் பொருந்துகிறது. இது மாதிரியை அதன் பயிற்சி தரவுகளுடன் மிகவும் நெருக்கமாக அல்லது மிகவும் தளர்வாக இணைக்கச் செய்கிறது. ஒரு அதிக பொருத்தமான மாதிரி, பயிற்சி தரவுகளை மிகவும் நன்றாக கணிக்கிறது, ஏனெனில் அது தரவின் விவரங்கள் மற்றும் சத்தத்தை மிகவும் நன்றாக கற்றுக்கொண்டுள்ளது. ஒரு குறைவான பொருத்தமான மாதிரி, அதன் பயிற்சி தரவுகளை அல்லது அது 'கண்டறியாத' தரவுகளை சரியாகப் பகுப்பாய்வு செய்ய முடியாது.
🎓 **அதிகபிடித்தல்** மற்றும் **குறைபிடித்தல்** என்பது மாதிரியின் தரத்தை குறைக்கும் சாதாரண பிரச்சினைகள்; மாதிரி சரியாக பயிறுத்தப்படாமல் அல்லது மிக বেশি பயிற்றுவிப்பதால் ஏற்படும். அதிகபிடித்தல் மாதிரி பயிற்சி தரவை மிகச் நன்கு கணிக்கிறது ஏனெனில் அது தரவின் விவரங்கள் மற்றும் ஒலி நன்றாகக் கற்றுக்கொண்டுள்ளது. குறைபிடித்தல் மாதிரி துல்லியமாக அல்ல; அது பயிற்சி தரவை சரியாக பரிசோதிக்க இயலாது, மற்றும் முன் காணாத தரவையும் சரியாக மதிப்பிடமுடியாது.
![அதிக பொருத்தமான மாதிரி](../../../../translated_images/ta/overfitting.1c132d92bfd93cb6.webp)
> [ஜென் லூப்பர்](https://twitter.com/jenlooper) உருவாக்கிய தகவல் வரைபடம்
![overfitting model](../../../../translated_images/ta/overfitting.1c132d92bfd93cb6.webp)
> படக்கதை வடிவம்: [ஜென் லூப்பர்](https://twitter.com/jenlooper)
## அளவுரு அமைத்தல்
## பராமிதி சரிசெய்தல்
உங்கள் ஆரம்ப பயிற்சி முடிந்தவுடன், மாதிரியின் தரத்தை கவனித்து, அதன் 'ஹைப்பர்பாராமீட்டர்கள்' ஐ சரிசெய்து அதை மேம்படுத்துவது பற்றி யோசிக்கவும். இந்த செயல்முறையைப் பற்றிய மேலும் தகவலுக்கு [ஆவணங்களை](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) படிக்கவும்.
உங்கள் ஆரம்ப பயிற்சி முடிந்தவுடன், மாதிரியின் தரத்தை கவனித்து, அதன் 'ஹைப்பர்பராமிதர்களை' சரிசெய்து மேம்படுத்தலாம். இந்த செயல்முறை பற்றி மேலும் படிக்க [ஆவணங்களில்](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) பார்க்கவும்.
## கணிப்ப
## முன்னறிவ
இது உங்கள் மாதிரியின் துல்லியத்தை சோதிக்க புதிய தரவுகளை முழுமையாகப் பயன்படுத்தும் தருணம். 'விண்ணப்பிக்கப்பட்ட' ML அமைப்பில், நீங்கள் உற்பத்தியில் மாதிரியைப் பயன்படுத்த வெப் சொத்துகளை உருவாக்கும்போது, இந்த செயல்முறை ஒரு மாறியை அமைக்கவும், மாதிரிக்கு மதிப்பீடு அல்லது கணிப்பு செய்ய அனுப்பவும் பயனர் உள்ளீட்டை (உதாரணமாக ஒரு பொத்தானை அழுத்துதல்) சேகரிப்பதை உள்ளடக்கலாம்.
முழுமையாக புதிய தரவை பயன்படுத்தி மாதிரியின் துல்லியத்தைச் சோதிக்க இப்பொழுது நேரம். 'பயன்பாட்டுக்' கொண்ட ML சூழலில், நீங்கள் மாதிரியை உற்பத்தியில் பயன்படுத்த வலை சொத்துகளை உருவாக்கும் போது, இந்த செயல்முறை பயனர் உள்ளீட்டை (உதாரணமாக ஒரு பொத்தான் அழுத்தம்) சேகரித்து அதை மாதிரிக்குக் கட்டளையிடுதல் அல்லது மதிப்பிடுதல் ஆகியவற்றை கொண்டிருக்கலாம்.
இந்த பாடங்களில், நீங்கள் தயாரிக்க, உருவாக்க, சோதிக்க, மதிப்பீடு செய்ய மற்றும் கணிக்க எப்படி என்பதை கண்டறிவீர்கள் - தரவியல் விஞ்ஞானியின் அனைத்து நடவடிக்கைகளையும் மேலும், 'முழு ஸ்டாக்' ML பொறியாளராக மாற உங்கள் பயணத்தில் முன்னேறுவீர்கள்.
இந்த பாடங்களில், நீங்கள் இந்த படிகளைப் பயன்படுத்தி, தயார் செய்ய, கட்டமைக்க, சோதனை செய்ய, மதிப்பீடு செய்ய, மற்றும் முன்னறிவு செய்ய கற்றுக் கொள்ளப்போகிறீர்கள் - ஒரு தகவல் விஞ்ஞானியின்Gestureகளும் இதயமும் உங்களுக்கு வளர்ந்து, ஒரு 'முழுமையான' ML பொறியாளராகவும் உங்களைக் கொண்டு செல்லும்.
---
## 🚀சவால்
## 🚀போட்டி
ஒரு ML பயிற்சியாளரின் படி படி செயல்முறையை பிரதிபலிக்கும் ஒரு ஓட்டப் படத்தை வரை. இந்த செயல்முறையில் நீங்கள் தற்போது எங்கு இருக்கிறீர்கள்? நீங்கள் எந்த இடத்தில் சிக்கல்களை எதிர்கொள்வீர்கள் என்று நீங்கள் கணிக்கிறீர்கள்? உங்களுக்கு எது எளிதாக தோன்றுகிறது?
ML பயPractitioner (பயிற்றுநர்) செயல்முறைகளை ஒளிபடமாக ஒரு இயக்கவரிசை வரைபடத்தை வரைந்திடுங்கள். இப்பொழுது நீங்கள் செயல்முறையில் எங்கு இருக்கிறீர்கள்? எந்த இடத்தில் கடினமாக இருக்கும் என்று நீங்கள் முன்னறிவிக்கின்றீர்கள்? எது எளிதாகத் தோன்றுகிறது?
## [ாடத்திற்குப் பின் கேள்வி](https://ff-quizzes.netlify.app/en/ml/)
## [ோஸ்ட்-பாட நிகழ்ச்சி வினாடி விடை](https://ff-quizzes.netlify.app/en/ml/)
## மதிப்பீடு மற்றும் சுயபயிற்சி
## மதிப்பாய்வு மற்றும் சுயநிலைபாடம்
ரவியல் விஞ்ஞானிகள் தங்கள் தினசரி பணிகளைப் பற்றி விவாதிக்கும் ஆன்லைன் நேர்காணல்களைத் தேடுங்கள். இதோ [ஒரு நேர்காணல்](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
கவல் விஞ்ஞானிகள் தங்கள் தினசரி வேலையை விவரிக்கும் நேர்முகங்களை ஆன்லைனில் தேடுங்கள். இதோ [ஒன்று](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
## பணிக்கான ஒப்பந்தம
## பணிக
[ஒரு தரவியல் விஞ்ஞானியை நேர்காணல் செய்யவும்](assignment.md)
[தகவல் விஞ்ஞானியை நேர்முகம் கொள்ளவும்](assignment.md)
---
**குறிப்பு**:
இந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையைப் பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சிக்கின்றோம், ஆனால் தானியங்கி மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறான தகவல்கள் இருக்கக்கூடும் என்பதை தயவுசெய்து கவனத்தில் கொள்ளவும். அதன் தாய்மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பல்ல.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**முகவரி**:
இந்த ஆவணம் AI மொழிபெயர்ப்பு சேவை [Co-op Translator](https://github.com/Azure/co-op-translator) மூலம் மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் சரியான மொழிபெயர்ப்புக்காக முயலுகிறோம், இருப்பினும் தானாக உருவாக்கப்படும் மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறுகள் இருக்கலாம் என்பதை தயவுசெய்து கருத்தில் கொள்ளவும். முதன்மை ஆவணம் அதன் சொந்த மொழியில் அதிகாரப்பூர்வ மூலமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்நுட்ப மனித மொழிபெயர்ப்பை பரிந்துரைக்கிறோம். இந்த மொழிபெயர்ப்பைப் பயன்படுத்தி ஏற்படும் எந்தவொரு தவறான புரிதல்களுக்கும் அல்லது தவறான பொருள்களுக்கும் எங்கள் பொறுப்பு இல்லை.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,135 +1,137 @@
# Scikit-learn பயன்படுத்தி ஒரு பகுப்பாய்வு மாதிரியை உருவாக்குதல்: regression நான்கு வழிகள
# Scikit-learn பயன்படுத்தி ஒரு ரெக்ரஷன் மாதிரியை உருவாக்குக: நான்கு விதமான ரெக்ரஷன
## ஆரம்பக்காரர் குறிப்பு
## தொடக்கம் குறிப்பு
எண் மதிப்பை (உதாரணமாக, வீட்டு விலை, வெப்ப நிலை அல்லது விற்பனை) கணிக்க linear regression பயன்படுத்தப்படுகிறது.
இது உள்ளீட்டு அம்சங்களுக்கும் வெளியீட்டு மதிப்பிற்குமான தொடர்பை சிறந்த முறையில் பிரதிநிதித்துவப்படுத்தும் நேர்கைக்கோவை கண்டுபிடிப்பதன் மூலம் செயல்படுகிறது.
நேரியல் ரெக்ரஷன் என்பது நாம் **அளவைக் கணிக்க** விரும்பும் போது பயன்படுத்தப்படுகிறது (உதாரணமாக, வீட்டின் விலை, வெப்பநிலை, அல்லது விற்பனைகள்).
இது உள்ளீட்டு அம்சங்களுக்கும் வெளியீட்டு மதிப்புக்கும் இடையிலான தொடர்பைக் சிறந்த முறையில் பிரதிநிதித்துவம் செய்யும் நேர்கோட்டை கண்டுபிடிப்பதன் மூலம் செயல்படுகிறது.
இந்த பாடத்தில், நாம் regression முறைகளை புரிந்து கொள்வதில் கவனம் செலுத்தி இன்னும் மேம்பட்ட regression நுட்பங்களை ஆராய்வதற்கு முன் இத்தொடர்பை புரிந்து கொள்கிறோம்.
![Linear vs polynomial regression infographic](../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp)
> [Dasani Madipalli](https://twitter.com/dasani_decoded) என்பவரின் தகவல்காட்சி
## [பாடமுன் வினாத்தாளி](https://ff-quizzes.netlify.app/en/ml/)
இந்த பாடத்தில், மேம்பட்ட ரெக்ரஷன் தொழில்நுட்பங்களை ஆராயும் முன் இந்த கருத்தைப் புரிந்துகொள்ள கவனம் செலுத்துகிறோம்.
![நேரியல் மற்றும் பல்கோணம் ரெக்ரஷன் தகவல்படம்](../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp)
> தகவல்படம்: [டாசனி மடிபள்ளி](https://twitter.com/dasani_decoded)
## [முன்பாடக் கேள்வித்தட்டு](https://ff-quizzes.netlify.app/en/ml/)
> ### [இந்த பாடம் R மொழியிலும் கிடைக்கிறது!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
> ### [இந்த பாடம் R இல் கிடைக்கும்!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### அறிமுகம்
துவரை நீங்கள் regression என்பது என்ன என்பதை pumpkin விலை தரவுத்தொகுப்பிலிருந்து எடுத்துக்காட்டுக் கூரிய தரவுடன் ஆராய்ந்துள்ளீர்கள், இதை இந்த பாடத்துடன் முழுமையாக பயன்படுத்த உள்ளோம். Matplotlib பயன்படுத்தி அதனை காண்பித்துள்ளீர்கள்.
ப்பொழுது வரை நீங்கள் ரெக்ரஷன் என்பது என்ன என்று கற்றுக்கொண்டது மற்றும் இந்த பாடத்தில் பயன்படுத்தப்படும் பரங்கிக்குருவி விலை தரவுகள் மூலம் எடுத்துக்காட்டு தரவுகளை ஆராய்ந்துள்ளீர்கள். நீங்கள் இந்த தரவை Matplotlib மூலம் காட்சிப்படுத்தவும் செய்துள்ளீர்கள்.
இப்போது நீங்கள் ML க்கான regression இல் மேலும் நுழைய தயாராக உள்ளீர்கள். தரவுகளை காண்பிப்பது அவற்றை புரிந்துகொள்ள உதவுகிறது, ஆனாலும் இயந்திரக் கற்றல் மாட்சிமை என்பது _மாதிரிகளை பயிற்சி செய்வதில்_ உள்ளது. மாதிரிகள் கடந்த தரவுகளில் பயிற்சி பெற்று தரவு சார்புகளை தானாக பறைசெய்கின்றன, மேலும் புதிய தரவிற்கான முடிவுகளை கணிக்க உதவுகின்றன, இந்த மாதிரி பழைய தரவுகளை காட்டியதில்லை.
இப்பொழுது, இயந்திரக் கற்றலுக்கான ரெக்ரஷனில் ஆழமாக நுழைய தயாராக உள்ளீர்கள். காட்சிப்படுத்தல் தரவை புரிந்து கொள்ள உதவுகிறது, ஆனால் இயந்திரக் கற்றலின் உண்மையான சக்தி _மாதிரிகளை பயிற்சிசெய்யும்_ செயலிலிருந்து வருகிறது. மாதிரிகள் கடந்த கால தரவில் பயிற்சி பெற்று, தரவின் சார்புகளை தானாகவே அடையாளம் காண்கிறன, மேலும் புதிய தரவுகள் குறித்து (மாதிரி முன்பே பார்க்காதவை) முடிவுகளை கணிக்க உதவுகின்றன.
இந்த பாடத்தில், நீங்கள் இரண்டு regression வகைகள், _அடிப்படை நேரியல் regression_ மற்றும் _பல்கோண regression_ கொஞ்சம் கணிதத்துடன் பற்றி கற்றுக்கொள்வீர்கள். அவை pumpkin விலை கணிக்க உதவும், உள்ளீட்டு தரவை பொருத்து.
இந்த பாடத்தில், இரண்டு வகை ரெக்ரஷன்கள் பற்றி கூடுதல் கற்றுக்கொள்வீர்கள்: _அடிப்படையான நேரியல் ரெக்ரஷன்_ மற்றும் _பல்கோணம் ரெக்ரஷன்_, மற்றும் இத்தொழில்நுட்பங்களுக்கான சில கணிதங்களும். இவை பரங்கிக்குருவி விலைகளை பல்வேறு உள்ளீட்டு தரவுகளைப் பொருத்து கணிக்க உதவும்.
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
[![ML தொடக்கநரர்களுக்கான - நேரியல் ரெக்ரஷன் புரிதல்](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML தொடக்கநரர்களுக்கான - நேரியல் ரெக்ரஷன் புரிதல்")
> 🎥 மேலே உள்ள படத்தை கிளிக் செய்து நேரியல் regression குறித்த சிறு வீடியோ சர்போட்டைப் பெறவும்.
> 🎥 மேலுள்ள படத்தை கிளிக் செய்து நேரியல் ரெக்ரஷன் குறித்த ஒரு குறுகிய வீடியோக்களை பார்க்கவும்.
> இந்த பாடத்திட்டத்தில், கணிதத்தில் மிகக் குறைந்த அறிவுப்பார்வையை மதிப்பிடுகிறோம், மற்றும் வேறு துறையிலிருந்து வரும் மாணவர்களுக்கு சோதனை செய்யிறோம், ஆகையால் குறிப்பு, 🧮 அழைப்புகள், வரைபடங்கள் மற்றும் பிற கற்றல் கருவிகளை கவனியுங்கள்.
> இந்த பாடத்திட்டத்தில், கணிதம் குறைந்த அளவாக தெரிந்திருப்பத assumptionsஇல் உள்ளோம், மற்ற துறைகள் வந்துள்ள மாணவர்களுக்குப் புரியுமாறு செய்ய முயல்கிறோம்; எனவே குறிப்பு குறிப்புகள், 🧮 கணக்கீடுகள், வரைபடங்கள் மற்றும் பிற கற்றல் உதவிகள் மூலம் விளக்கங்களைக் கொடுக்கின்றோம்.
### முன் அறிவு
### முன்னோடியான அறிவு
இப்போது நாம் பார்க்கும் pumpkin தரவின் அமைப்புக்குப் பழகியிருக்க வேண்டும். இந்த பாடத்தில் முன்னமே preloaded மற்றும் pre-cleaned செய்யப்பட்டுள்ளது. இதில் pumpkin விலை புதிய தரவு பெட்டியில் bushel வீதம் காட்டப்பட்டுள்ளது. Visual Studio Codeல் இந்த notebook இனை கெர்னல்களில் இயக்கு என்பது உறுதியாக்கொள்ள வேண்டும்.
நீங்கள் இன்று பரங்கிக்குருவி தரவு அமைப்பைப் பற்றி பழகியிருப்பீர்கள். இந்த பாடத்திட்டத்தின் _notebook.ipynb_ கோப்பில் அது முன் ஏற்றப்பட்டு சுத்தம் செய்யப்பட்டு உள்ளது. அங்கு பரங்கிக்குருவி விலை புஷல் ஒன்றுக்கு கணிக்கப்பட்டு புதிய தரவுக் கட்டத்தில் காணப்படுகிறது. Visual Studio Code இனிப்புகளில் இந்த நோட்புக்களை இயக்க முடியும் என்பதை உறுதிப்படுத்திக்கொள்ளவும்.
### தயாரிப்பு
### தயார் செய்தல்
நீங்கள் இந்த தரவை ஏற்று அதில் கேள்விகள் கேட்கப் போகிறீர்கள் என்பதைக் நினைவுக்கொள்ளுங்கள்.
ஒரு நினைவூட்டல் போல, நீங்கள் இந்த தரவை ஏற்றிக் கொண்டு அதை பற்றி கேள்விகள் கேட்கவிருந்தீர்கள்.
- pumpkins வாங்க எந்த நேரம் சிறந்தது?
- குறுந்துண்டு pumpkins ஒரு பெட்டிக்கு என்ன விலை எதிர்பார்க்கலாம்?
- பால்-bushel தொட்டிகளில் வாங்க மறுப்பதா அல்லது 1 1/9 bushel பெட்டியில் வாங்குமா?
நாம் இந்த தரவை ஆராய்வு செய்கிறோம்.
- பரங்கிக்குருவிகளை வாங்க சிறந்த நேரம் எப்போது?
- ஒரு சிறிய பரங்கிக்குருவி தொகுப்பின் விலை என்ன இருக்கலாம்?
- அதைப் பாதி புஷல் கூடை அல்லது 1 1/9 புஷல் பெட்டியில் வாங்குவது நல்லதா?
இந்த தரவை இன்னும் ஆராய பயிற்சியைத் தொடர்வோம்.
கடந்த பாடத்தில், நீங்கள் Pandas data frame உருவாக்கி அதனை ஆரம்ப தரவின் ஒரு பகுதியுடன் நிரப்பி, விலையை bushel கூறு விகிதத்தால் சீரமைத்துள்ளீர்கள். ஆனால், இதனால் நீங்கள் சுமார் 400 தரவு புள்ளிகளை மட்டுமே மற்றும் இறறுநீண்ட காலங்களுக்குப் பொருந்தி சேகரித்துள்ளீர்கள்.
முந்தைய பாடத்தில், நீங்கள் ஒரு Pandas தரவுக் கட்டமைப்பை உருவாக்கி, அசல் தரவுத்தொகுதியின் ஒரு பகுதிக்கு விலை பொருத்தப்பட்டு படிந்துள்ளீர்கள், புஷல் எண்ணிக்கையின் அடிப்படையில் விலை நிலைத்திருத்தம் செய்யப்பட்டது. ஆனால் அதனால், சுமார் 400 தரவுப் புள்ளிகள் மட்டுமே வரிசைப்படுத்தப்பட்டன மற்றும் முந்தைய காலக் காலங்களுக்குப் பொருந்தியது.
இந்த பாடத் தொடர்பாக உள்ள notebook இல் முன்னதாக ஏற்றப்பட்ட தரவைக் கவனியுங்கள். அங்கு ஆரம்ப scatterplot வரைபடம் மாத தரவை காட்டுகிறது. கூடுதலான தரவின் இயல்பைப் புரிந்துகொள்ள, மேலும் சுத்திகரிப்பது வாய்ப்பு உள்ளது.
இந்த பாடத்திட்டத்தின் கூடுதலான நோட்புக் முன் ஏற்றிய தரவை பாருங்கள். இதில் ஒரு தொடக்கமான ஸ்காட்டர்ப்ளாட் வரைபடமாக மாத விவரங்கள் காட்டப்பட்டுள்ளது. மீண்டும் அதனை சுத்தம் செய்யும்போது தரவின் இயல்பைக் குறித்த கூடுதல் விவரங்களைப் பெறலாம்.
## ஒரு நேரியல் regression கோடு
## ஒரு நேரியல் ரெக்ரஷன் கோடு
பாடம் 1ல் கற்றுக்கொண்டது போல, linear regression பயிற்சியின் நோக்கம் கோடை வரைபடத்தைக் கடைப்பிடிப்பதற்குள் இருக்கிறது:
பாடம் 1் நீங்கள் கற்றுக்கொண்டது போல, நேரியல் ரெக்ரஷன் செயல்முறை நோக்கு:
- **மாற்றியமை கடத்தியவை** ஓர் மாறில்களுக்கு இடையேயான தொடர்பை காட்ட
- **பரிந்துரைகள் செய்ய** புதிய தரவு புள்ளி அந்தக் கோட்டிற்கு எங்கிருக்கும் என்பதில் துல்லியமான கணிப்பை செய்ய
- **மாறி தொடர்புகளை காட்டுக**. மாறிகளுக்கு இடையிலான தொடர்பை காண்பிக்கவும்
- **முன்னறிவிப்புகளைச் செய்யும்**. புதிய தரவுப் புள்ளி அந்த கோட்டோடு எப்படி தொடர்புடையிருக்கும் என்பதை துல்லியமாக கணிக்கவும்
**Least-Squares Regression** இல் இந்த வகையான கோடு வரைபடம் கிட்டத்தட்ட வழக்கம். Least-Squares என்பது, மாதிரியின் மொத்த பிழையை குறைத்துக் கொள்ளும் செயல்முறையை குறிக்கும். ஒவ்வொரு தரவு புள்ளிக்கும், நாங்கள் உண்மையான புள்ளி மற்றும் கோடி இடையே நேரடி தொலைவான (residual என்று அழைக்கப்படும்) அளவை அளவிடுகிறோம்.
**குறைந்த இடர்களுக்கான ரெக்ரஷன் (Least-Squares Regression)** இல் இந்த வகை கோட்டை வரைப்பது சாமானியம். "குறைந்த இடர்கள்" என்பது மாதிரியிலுள்ள முழு பிழையை குறைக்க முயற்சிக்கும் செயல்முறையைக் குறிக்கும். ஒவ்வொரு தரவுப் புள்ளிக்கும், நமது ரெக்ரஷன் கோடு மற்றும் புள்ளி இடையே உள்ளது ஆகிய செங்குத்து தூரம் (அதை மீதமுள்ளவை என கூறுவர்) அளக்கப்படுகிறது.
இதைக் مربع முறையில் மதிப்பீடு செய்வதற்குக் காரணங்கள் இரண்டு:
இத்தூரங்களுக்கு மேற்கோள்கின்ற இரண்டு முக்கிய காரணங்கள்:
1. **திசை சாரா அளவு:** -5 என்ற பிழையை +5 பிழை போலவே கையாள்வது தேவை. مربع செய்வதால் அனைத்து மதிப்புகளும் நேர்மறை ஆனவை ஆகின்றன.
1. **திசை விட அளவு முக்கியம்**: -5 பிழை மற்றும் +5 பிழை இரண்டையும் சமமாக பார்க்க வேண்டும். அளவுகளின் வரம்பைக் கவனிக்க வெளிப்படுத்தல் அனைத்து மதிப்புகளையும் நேர்மறையாக மாற்றும்.
2. **விலகிய தரவுகளுக்கு அதிகம் போக்குதல்:** பெரிய பிழைகள் இல் مربع அதிக மதிப்பளிக்கிறது, அதனால் கோடு அந்த புள்ளிகளுக்கு நெருக்கம் படுகிறது.
2. **மாறான புள்ளிகளுக்கு அதிக தண்டனை**: பெரும் பிழைகளுக்கு அதிக முக்கியத்துவம் கொடுத்து கோட்டை அருகில் இருக்க வைக்கிறது.
பிறகு அனைத்து مربع மதிப்புகளையும் கூட்டுகிறோம். குறைந்தபட்சமான மொத்தம் (சிறந்த துல்லியத்துடன்) உள்ள கோட்டை கண்டுபிடிப்பதே நோக்கம்— அதனால் இது "Least-Squares" எனப்படும்.
பின்பு நாங்கள் அனைத்து அளவுக் கணக்குகளையும் கூடச் சேர்ப்போம். நமது நோக்கம் இந்த கூட்டு மதிப்பின் குறைந்த விலை கொண்ட குறிப்பிட்ட கோட்டை கண்டுபிடிப்பதே (இது தான் "குறைந்த இடர்கள்" என்ற பெயரின் காரணம்).
> **🧮 எண்கணிதம் காட்டவும்**
> இது _சிறந்த பொருந்தக்கூடிய கோடு_ என அழைக்கப்படுகின்றது மற்றும் [ஒரு சமன்பாடால்](https://en.wikipedia.org/wiki/Simple_linear_regression) வெளிப்படுகிறது:
> **🧮 கணிதத்தை காண்பி**
> இந்த கோடு, _சிறந்த பொருத்த கோடு_ என்று அழைக்கப்படுவது, [ஒரு சமன்பாட்டில்](https://en.wikipedia.org/wiki/Simple_linear_regression) வெளிப்படுத்தலாம்:
>
> ```
> Y = a + bX
> ```
>
> `X` என்பது ‘விளக்க மாறி’. `Y` என்பது ‘மாறாக உள்ள மாறி’. கோட்டின் சாய்வு `b` ஆகும் மேலும் `a` என்பது y-இலக்கு, இது `X = 0` ஆகும் போது `Y`ன் மதிப்பை குறிக்கிறது.
>
>![calculate the slope](../../../../translated_images/ta/slope.f3c9d5910ddbfcf9.webp)
>
> முதலில், சாய்வு `b`-ஐ கணக்கிடவும். தகவல்காட்சி [Jen Looper](https://twitter.com/jenlooper) என்பவருடையது
>
> மற்றொரு வழியில் கூறுவதில், pumpkin தரவின் ஆரம்ப கேள்வியை கூறும் போது: "ஒரு pumpkin விலையை மாத வாரியாக predict செய்ய", `X` விலை மற்றும் `Y` விற்பனை மாதமாக இருக்கும்.
>
>![complete the equation](../../../../translated_images/ta/calculation.a209813050a1ddb1.webp)
>
> Y இன் மதிப்பை கணக்கிடுங்கள். நீங்கள் $4 ஆல் பாவிக்கிறீர்கள் எனில் அது ஏப்ரல் மாதம் என்பதுதான்! தகவல்காட்சி [Jen Looper](https://twitter.com/jenlooper) என்பவருடையது
>
> கோட்டின் சாய்வும், இப்படியே மதிப்பிடும் கோட்டின் இடைச்சேதம் (intercept) கூட Y இடம் நிரந்தரப்படுத்தும் இடமும் கணிதத்தில் அடங்கியிருக்க வேண்டும்.
>
> இந்த மதிப்பீட்டுக்கான முறைகளை [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) இணையதளத்தில் பார்க்கலாம். மேலும் [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) இல் எண்களின் மதிப்புகள் கோட்டிற்கு எப்படி பாதகம் செய்கின்றன என காணலாம்.
## தொடர்பு (Correlation)
இன்னொரு முக்கியமான மாறி என்பது கொடுக்கப்பட்டு X மற்றும் Y மாறில்களுக்கு இடையேயான **Correlation Coefficient** ஆகும். scatterplot பயன்படுத்தி இதை விரைவாக காட்சி படுத்தலாம். தரவு புள்ளிகள் ஓர் நேரடி கோட்டில் சீராக பரவியிருந்தால் அதிக தொடர்பு, அந்நிலையை வாயிலாக புள்ளிகள் எங்கெங்கும் பரவியிருந்தாலும் குறைந்த தொடர்பு.
சிறந்த linear regression மாதிரி, Least-Squares Regression முறையிலும் regression கோட்டுடன் Correlation Coefficient 1க்கு அருகிலும் (0க்கு அல்ல) இருப்பதே.
✅ இந்த பாடத்திற்கான notebook இனை இயக்கு, Month மற்றும் Price இடையேயான scatterplot பார்க்கவும். Month மற்றும் Price இடையே தாவரவியல் தொடர்பு அதிகமாக இருக்கிறதா, குறைவா என்ற விவரமளித்துக் கொள்ளவும். இதை Month பதிலாக வருடத்தின் நாட்கள் (day of the year) போன்ற சுருக்கமான அளவீட்டுடன் மாற்றியால் நிலைமைகள் மாறுமா?
கீழே உள்ள குறியீட்டில், தரவை சுத்திகரித்து, `new_pumpkins` எனும் data frame உருவாக்கிவிட்டோம், இதோ அதர்வானது:
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
> தரவை சுத்திகரிக்கும் குறியீடு [`notebook.ipynb`](notebook.ipynb) இல் உள்ளது. கடந்த பாடத்தில் செய்த அதே சுத்திகரிப்பு நடவடிக்கைகள் கையாண்டோம். `DayOfYear` பத்தியை பின்வரும் வெளிப்பாட்டின் மூலம் உருவாக்கியுள்ளோம்:
>
> `X` என்பது 'விளக்க மாறி', `Y` என்பது 'பொறுப்பு மாறி'. கோட்டின் சரிவு `b`; `a` என்பது y குறுக்கு இடைநிலை. `X = 0` ஆக இருக்கும் போது `Y` மதிப்பைக் குறிக்கும்.
>
>![சரிவைக் கணக்கிடுக](../../../../translated_images/ta/slope.f3c9d5910ddbfcf9.webp)
>
> முதலில் சரிவு `b`-ஐ கணக்கிடுக. தகவல்படம்: [ஜென் லூப்பர்](https://twitter.com/jenlooper)
>
> வேறு வார்த்தைகளில், நமது பரங்கிக்குருவி தரவின் அசல் கேள்வி: "ஒரு பரங்கிக்குருவி புஷல் விலையில் மாதம் அடிப்படையில் கணிதம் செய்ய", `X` விலை மற்றும் `Y` விற்பனை மாதம் ஆகும்.
>
>![சமன்பாட்டை முடிக்கவும்](../../../../translated_images/ta/calculation.a209813050a1ddb1.webp)
>
> `Y` மதிப்பைக் கணக்கிடுக. நீங்கள் சுமார் $4 செலுத்தினால், அது ஏப்ரல் மாதமாக இருக்கலாம்! தகவல்படம்: [ஜென் லூப்பர்](https://twitter.com/jenlooper)
>
> கோட்டின் சரிவு மற்றும் இடைநிலையைக் கணக்கிடும் கணிதம், `X = 0` ஆகும்போது `Y` எங்கு அமைகிறது என்பதையும் கண்டறிவது அவசியம்.
>
> [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) இனிப்பது கணக்கீடுகளை கவனகரமாக பார்க்கவும். மேலும் [குறைந்த இடர் கணக்கி](https://www.mathsisfun.com/data/least-squares-calculator.html) கோட்டை மொத்த மதிப்புகளை எப்படி பாதிக்கிறது என்பதைக் காணவும்.
## தொடர்பு
மேலும் ஒரு முக்கியமான பதம் விளக்கப்பட வேண்டும் என்பது `X` மற்றும் `Y` மாறிகளுக்கு இடையேயான **தொடர்பு காரிகை**. ஸ்காட்டர்பிளாட்டின் மூலம் இக்காரிகையை எளிதில் காணலாம். ஒரு நேர்கோட்டில் சீராக விரிந்துள்ள புள்ளிகளுக்கு உயர் தொடர்பு உள்ளது; ஆனால் புள்ளிகள் பரவியிருக்கிறபோது குறைந்த தொடர்பு இருக்கும்.
சிறந்த நேரியல் ரெக்ரஷன் மாதிரி தான் பின்வரும் தன்மையை உடையது: `Least-Squares Regression` முறையுடன் ஒரு உயர் தொடர்பு காரிகை (0 விட 1க்கு நெருங்கிய) கொண்டது.
✅ இந்த பாடத்திட்டத்துடன் கூடிய நோட்புக் ஓடுங்கள் மற்றும் மாதத்திற்கான விலை ஸ்காட்டர்ப்ளாட்டைப் பாருங்கள். உங்கள் பார்வையின் படி, பரங்கிக்குருவி விற்பனைகளுக்கான மாதத்துக்கும் விலைக்கும் இடையேயான தரவு உயர் அல்லது குறைந்த தொடர்பு உள்ளதா? `Month` மாறி பதிலாக வருட நாள் (ஆதரவு காலத்தின் தொடக்கம் முதல் நாட்கள் எண்ணிக்கை) பயன்படுத்தினால் அது மாறுமா?
பின்வரும் குறியீட்டில், நாம் தரவை சுத்தமாக்கி, கீழ்க்கண்ட மாதிரியில் தோற்றம் கொண்ட `new_pumpkins` என்ற ஒரு தரவுக் கட்டமைப்பைக் கொண்டிருப்பதாக எண்ணுகிறோம்:
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
> தரவைச் சுத்தம் செய்வதற்கான குறியீடு [`notebook.ipynb`](notebook.ipynb) இல் உள்ளது. முந்தைய பாடத்தில் செய்த நிலையான சுத்தம் செய்யும் படிகளே இங்கே பிரயோகிக்கப்பட்டுள்ளன, மேலும் `DayOfYear` நிரலை பின்வரும் சமன்பாட்டைப் பயன்படுத்தி கணக்கிட்டுள்ளோம்:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
இப்போது, நேரியல் ரெக்ரஷன் பின்னணியில் உள்ள கணிதத்தை புரிந்துகொண்டு, எந்த பஞ்சுப் பாட்டில் தொகுப்புக்கு சிறந்த விலைகள் இருக்கும் என்பதை கணிக்க ஒரு கேள்வி மாதிரியை உருவாக்குவோம். விடுமுறை பரங்கிக்குருவி பண்ணைக்கு பரங்கிப்பொருட்கள் வாங்குபவர், இந்தத் தகவலைச் கொண்டு தங்கள் கொள்முதல் முடிவுகளை மேம்படுத்த விரும்புவர்.
இப்போது linear regression மேலான கணிதம் புரிந்திருக்கிறது; pumpkin விலையில் எது சிறந்தது என்று predict செய்ய Regression மாதிரி உருவாக்குவோம். ஓர் pumpkin கிளப்புக்காக pumpkins வாங்கும் நபர், வாங்கும் தொகுதிகளை முறையாக தேர்ந்தெடுக்க இதன் உதவிச்செய்யலாம்.
## தொடர்பை தேடுதல்
## தொடர்பைத் தேடுதல்
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
[![ML தொடக்கநரர்கள் - தொடர்பைக் காண்பது: நேரியல் ரெக்ரஷனுக்கான முக்கியம்](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML தொடக்கநரர்கள் - தொடர்பைக் காண்பது: நேரியல் ரெக்ரஷனுக்கான முக்கியம்")
> 🎥 மேலே உள்ள படத்தை கிளிக் செய்து தொடர்பு குறித்த சிறிய காணொளி பெறவும்.
> 🎥 மேலுள்ள படத்தை கிளிக் செய்து தொடர்பு பற்றிய குறுகிய வீடியோவைப் பாருங்கள்.
கடந்த பாடத்தில், விதிவிலக்கு, மாதத்திற்கு பேராசை விலை இப்படியே இருந்தது என்று பார்த்திருப்பீர்கள்:
முந்தைய பாடத்தில் நீங்கள் கண்டிருப்பீர்கள், வெவ்வேறு மாதங்களுக்கு சராசரி விலை இதுபோன்று காணப்படுகிறது:
<img alt="Average price by month" src="../../../../translated_images/ta/barchart.a833ea9194346d76.webp" width="50%"/>
<img alt="மாதம் அடிப்படையிலான சராசரி விலை" src="../../../../translated_images/ta/barchart.a833ea9194346d76.webp" width="50%"/>
இதன் மூலம் தொடர்பு இருக்கவேண்டும் என்றும், நாங்கள் linear regression மாதிரியை பயிற்சி செய்து `Month` மற்றும் `Price`, அல்லது `DayOfYear` மற்றும் `Price` இடையேயான தொடர்பை கணிக்கலாம். கீழே உடன் வரும் scatter plot, அந்த இரண்டாவது தொடர்பை காட்டுகிறது:
இதனால் எந்தவொரு தொடர்பும் இருக்க வேண்டும் என்று தோன்றுகிறது, மேலும் `Month` மற்றும் `Price` அல்லது `DayOfYear` மற்றும் `Price` இடையேயான உறவை கணிக்க நேரியல் ரெக்ரஷன் மாதிரியை பயிற்சி செய்தால் பலனுள்ளதாக இருக்கும். கீழே அப்படி தொடர்புடைய தரவு பார்வை:
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/ta/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="விலை மற்றும் வருட நாளின் ஸ்காட்டர்ப்ளாட்" src="../../../../translated_images/ta/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
`corr` function பயன்படுத்தி தொடர்பு சரிபார்ப்போம்:
`corr` செயல்பாட்டைப் பயன்படுத்தி தொடர்பை காண்போம்:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
மாதத்தில் -0.15 மற்றும் தினத்தில் -0.17 ஆகியவை போன்ற குறைந்த தொடர்புகள் இருப்பதாக தெரிகிறது, ஆனால் வேறு முக்கியமான தொடர்பு இருக்கலாம். pumpkin வகைகள் விலை ஒருங்கிணைப்பின் வேறுபாடு இருப்பதாக தோன்றுகிறது. இதில் நம்பிக்கை பெற pumpkin வகைகளுக்கு வெவ்வேறு வண்ணங்களில் பரவியானது காட்டுவோம். `scatter` வரைபட செயல்பாட்டுக்கு `ax` அளவுருவை கொடுத்து அனைத்து புள்ளிகளையும் ஒரே வரைபடத்தில் காட்டலாம்:
`Month` முறையில் -0.15 மற்றும் `DayOfYear` முறையில் -0.17 என்ற அளவுக்கு குறைந்த தொடர்பு உள்ளது போலத் தெரிகிறது; ஆனால் வேறு முக்கியமான உறவு இருக்கலாம். விலை நிலைகள் வெவ்வேறு பரங்கிக்குருவி வகைகளுக்கு முரண்படுகின்றன. இந்த எண்ணத்தை உறுதிப்படுத்த, ஒவ்வொரு வகைக்கும் வேறு வண்ணத்தைப் பயன்படுத்தி ஸ்காட்டர்ப்ளாட் வரைபடத்தை இடுவோம். `scatter` வரைபட செயல்பாட்டுக்கு `ax` அளவுருவை வழங்கி அனைத்து புள்ளிகளும் ஒரே வரைபடத்தில் இருப்பதாக ஆரம்பிக்கலாம்:
```python
ax=None
@ -138,75 +140,77 @@ 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)
```
<img alt="விலை மற்றும் வருட நாள் ஸ்காட்டர்ப்ளாட் வண்ணத்துடன்" src="../../../../translated_images/ta/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/ta/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
மாத இறுதியில் pumpkin வகை விலை மீது விடுவிக்கப்படும் விளைவுகள் தேதி விட அதிகமானது என்பதை மாதிரியாக்கலாம்:
நமது ஆய்வு பரங்கிக்குருவி வகை விலை பருவத்தை விட விலைக்கு அதிக தாக்கம் ஏற்படுத்துகிறது என்று காட்டுகிறது. இதை ஒரு பட்டியல்படமாகவும் காணலாம்:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="விலை மற்றும் வகை தொடர்புடைய பட்டியல்படம்" src="../../../../translated_images/ta/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="Bar graph of price vs variety" src="../../../../translated_images/ta/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
நாம் 'pie type' pumpkin வகையில் மட்டும் கவனம் செலுத்தி நாளில் விலை மீது விலை விளைவுகளை பார்க்கலாம்:
இப்பொழுது நாம் 'பை வகை' என்ற பரங்கிக்குருவி வகையிலேயே கவனம் செலுத்தி, விற்பனை தேதியின் விலை மீது தாக்கத்தை பார்ப்போம்:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/ta/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="பை வகை பரங்கிக்குருவி ஸ்காட்டர்ப்ளாட்" src="../../../../translated_images/ta/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
இப்போது `Price` மற்றும் `DayOfYear` இடையேயான தொடர்பை `corr` மூலம் கணக்கிடினால், `-0.27` போன்ற மதிப்பை பெறுவீர்கள் அதாவது கணிப்புத் தன்மைக்கான மாதிரியின் பயிற்சி அர்த்தமுள்ளதாகும்.
`corr` மூலம் `Price` மற்றும் `DayOfYear` இடையேயான தொடர்பை கணக்கிடுவோம், அது சுமார் `-0.27` இருக்கும் — அதன்படி கணிக்கும் மாதிரிகள் பயிற்சி செய்வது பொருத்தமாகும்.
> linear regression பயிற்சி செய்யும் முன், தரவு சுத்தமாக இருப்பதை உறுதி செய்வது அவசியம். linear regression காணாமல் போன மதிப்புகளுடன் நல்ல செயல்பாட்டைத் தராது; ஆகையால் வெறும் காலியான செல்களை அகற்றுவது நன்றானது:
> நேரியல் ரெக்ரஷன் மாதிரியை பயிற்சி செய்யும் முன் தரவு சுத்தமாக இருக்க வேண்டும். நேரியல் ரெக்ரஷன் குறைந்த மதிப்புள்ள தரவுகளுடன் சரியல்ல. ஆதலால் வெற்றிடங்களைக் கழிப்பது நல்லது:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
மறுபடியும், வெற்றிடங்களை நிரப்ப எதிர்கால நிலைகளின் சராசரி மதிப்புகள் கொண்டு நிரப்புவது ஒரு நடுத்தரமாக இருக்கும்.
மற்றொரு வழி காலியான மதிப்புகளை கோலத்தின் சராசரி மதிப்புகளால் நிரப்புவது.
## எளிமையான நேரியல் Regression
## எளிய நேரியல் ரெக்ரஷன்
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
[![ML தொடக்கநரர்கள் - Scikit-learn மூலம் நேரியல் மற்றும் பல்கோணம் ரெக்ரஷன்](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML தொடக்கநரர்கள் - Scikit-learn மூலம் நேரியல் மற்றும் பல்கோணம் ரெக்ரஷன்")
> 🎥 மேலே உள்ள படத்தை கிளிக் செய்து linear மற்றும் polynomial regression குறித்த சிறு வீடியோ பார்வை பெறவும்.
> 🎥 மேலுள்ள படத்தை கிளிக் செய்து நேரியல் மற்றும் பல்கோணம் ரெக்ரஷன் குறித்த குறுகிய வீடியோக்களைப் பாருங்கள்.
நாம் Linear Regression மாதிரியை பயிற்சியிட Scikit-learn நூலகத்தை பயன்படுத்துவோம்.
நாம் எங்கள் நேரியல் ரெக்ரஷன் மாதிரியை பயிற்சி செய்ய **Scikit-learn** நூலகத்தை பயன்படுத்தப் போகிறோம்.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
முதல் நிலையாக உள்ளீட்டு மதிப்புகள் (அம்சங்கள்) மற்றும் எதிர்பார்க்கப்படும் வெளியீடு (குறி) பிரித்து numpy arrays ஆக மாற்றுவோம்:
நீங்கள் முதலில் உள்ளீட்டு மதிப்புகளை (அம்சங்கள்) மற்றும் எதிர்பார்க்கப்படும் வெளியீட்டை (லேபிள்) தனித்தனி numpy வரிசைகளாக பிரிக்கிறோம்:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> கவனிக்க வேண்டியது, நாம் உள்ளீட்டை Linear Regression தொகுப்பின் சரியான புரிதலுக்காக `reshape` செய்யவேண்டியிருந்தது. Linear Regression 2D வரிசையாக உள்ளீட்டை எதிர்பார்க்கிறது, அங்கு வரிசையில் ஒவ்வொரு வரிசையும் உள்ளீட்டு அம்சப்படிவத்தை வைத்திருக்கும். எங்கள் நிலைமை ஓர் உள்ளீட்டுடன் உள்ளது; எனவே N×1 வடிவிலான வரிசை ஒன்று தேவை, இதில் N என்பது தரவுத் தொகுதி அளவு ஆகும்.
> எச்சரிக்கை: Linear Regression தொகுப்பை சரியாக புரிந்துகொள்ள,input தரவுகள் `reshape` செய்யப்பட்டு 2D array ஆக மாற்ற வேண்டியது அவசியம். Linear Regression 2D array (ஒரு வரி ஒரு அம்ச குறியீடு) வடிவம் எதிர்பார்க்கிறது. நமது வழியில், உள்ளீடு ஒன்றை மட்டும் கொண்டு இருப்பதால், வடிவம் N×1 ஆக வேண்டும், இதில் N என்பது தரவு அளவு.
பின்னர், பயிற்சி மற்றும் சோதனை தரவுதொகுதிகளை பிரித்து, பயிற்சியில் மாதிரியை சரிபார்க்க வேண்டும்:
பின்பு, பயிற்சி மற்றும் சோதனை தரவுக் கட்டமைப்புகளாக தரவை பிரிக்க வேண்டும், அப்படித்தான் பயிற்சி முடிந்ததும் நமது மாதிரியை சரிபார்க்க முடியும்:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
இறுதியில், Linear Regression மாதிரியை தவிர்க்க இரண்டு வரிகளிலேயே பயிற்சி செய்கிறது. `LinearRegression` பொருளை வரையறுக்கி, அதை `fit` முறையால் தரவுக்கு பொருத்துோம்:
கடைசியாக, நேரியல் ரெக்ரஷன் மாதிரியை பயிற்சி செய்வது இரண்டு கட்டங்களையே கொண்டது. `LinearRegression` பொருளை வரையறுக்கி, அத`fit` முறையால் நம் தரவுக்கு பொருத்துகிறோம்:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`LinearRegression` பொருள் `fit` செய்த பிறகு, அனைத்து ரெגרெஷன் коэффициентுகளை `.coef_` சொத்தைப் பயன்படுத்தி அணுக முடியும். எங்கள் நிலையில், ஒரு коэффициентே உள்ளது, அது `-0.017` கிட்டத்தட்ட இருக்க வேண்டும். இதன் பொருள், விலைகள் காலத்தோடு சிறிது குறையும் போலும், ஆனால் அதிகமாக அல்ல, ஒரு நாளுக்கு சுமார் 2 சென்ட். ரெגרெஷன் வையின் Y அச்சுடன் கட்டாயிடும் புள்ளியை `lin_reg.intercept_` மூலம் அணுகலாம் - இது எங்கள் நிலையில் சுமார் `21` இருக்கும், அதாவது வருடத்தின் தொடக்கத்தில் விலை.
`fit` செய்த பிறகு `LinearRegression` பொருள் ரெக்ரஷனின் அனைத்து கூட்டுறவுகளையும் கொண்டிருக்கும், அவற்றை `.coef_` சொத்து மூலம் அணுகலாம். எங்கள் வழக்கில், ஒரு மட்டுமே கூட்டுறவு உள்ளது, அது சுமார் `-0.017` இருக்க வேண்டும். இது விலை காலத்துடன் சிறிது குறையும் போன்று தெரிகிறது, ஆனால் அதிகமாக இல்லாமல், தினத்திற்கு சுமார் 2 சென்ட் 정도. நாமே ரெக்ரஷன் Y-அச்சுடன் கடிக்கும் இடத்தை `lin_reg.intercept_` மூலம் அணுகலாம் - எங்கள் வழக்கில் இது சுமார் `21` இருக்கும், ஆண்டு தொடக்கத்தின் விலையை குறிக்கின்றது.
எங்கள் மாதிரி எவ்வளவு நுட்பமாக உள்ளது என்று பார்க்க, நாம் ஒரு சோதனை தரவுத்தொகுப்பில் விலை கணிக்கலாம், பிறகு எவ்வளவு நமது கணிப்புகள் எதிர்பார்க்கப்பட்ட மதிப்புகளுக்கு அருகில் உள்ளது என்பதை மதிப்பிடலாம். இது root mean square error (RMSE) அளவுகோலை பயன்படுத்தி செய்ய முடியும், இது எதிர்பார்க்கப்படும் மற்றும் கணிக்கப்பட்ட மதிப்புகளுக்கிடையேயான அனைத்து சதுர வேறுபாடுகளின் சராசரி வேர் ஆகும்.
எங்கள் மாதிரி எவ்வாறு துல்லியமாக இருக்கின்றது என்பதைப் பார்க்க, நாமே ஒரு சோதனை தரவுத்தொகுதியில் விலைகளை கணிக்கலாம், பின்னர் நமது கணிப்புகள் எதிர்பார்க்கப்பட்ட மதிப்புகளுடன் எவ்வளவு நெருக்கமாக உள்ளது என்பதை அளக்கலாம். இது ருட் மீன் ஸ்கொயர் ஏரர் (RMSE) அளவுகளால் செய்யப்படலாம், இது எதிர்பார்க்கப்பட் மற்றும் கணிக்கப்பட்ட மதிப்புகளுக்கு இடையேயான அனைத்து சதுர வேறுபாடுகளின் சராசரி வேரின வரவு ஆகும்.
```python
pred = lin_reg.predict(X_test)
@ -214,38 +218,38 @@ pred = lin_reg.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
எமது பிழை சுமார் 2 புள்ளிகள் இருக்குமென தெரிகிறது, இது ~17% ஆகும். மிகவும் நன்றாக இல்லை. மாதிரி தரத்தின் மற்றொரு குறியீடு **coefficient of determination** ஆகும், இதைப் பின்வருமாறு பெறலாம்:
எமது பிழை சுமார் 2 புள்ளிகள், அதாவது ~17% ஆக இருக்கிறது. அது மிக நல்லது அல்ல. மாதிரி தரத்தின் மற்றொரு குறியீடு **coefficient of determination** ஆகும், இதைப் பிறு பெறலாம்:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
மதிப்பு 0 என்றால், மாதிரி உள்ளீட்டு தரவை எடுத்துக்கொள்வதில்லை என்றும், *மிக மோசமான நேர்காணல் முன்மாதிரி* போல செயல்படுகிறது என்றும் பொருள், இது வெறும் முடிவின் சராசரி மதிப்பாகும். மதிப்பு 1 என்றால், நாம் எதிர்பார்க்கப்படும் அனைத்து வெளியீடுகளையும் முற்றிலும் கணிக்க முடியும் என்று பொருள். எங்கள் நிலையில், коэффициент சுமார் 0.06, இது மிகவும் குறைவாக உள்ளது.
சோதனை தரவுத்தொகுப்பைக் கூட்டி ரெเกஸ்ஸனின் கோட்டுடன் வரைபடம் வரைதல் மூலம் எமது மாதிரி எவ்வாறு செயல்படுகிறது என்பதை தெளிவாக பார்க்கலாம்:
மதிப்பு 0 என்றால், மாதிரி உள்ளீட்டு தரவை கவனிக்கவில்லை என்று பொருள், அது *கெட்ட linear முன்னறிவிப்பாளர்* ஆக செயல்படும், அது வெறும் முடிவின் சராசரியான மதிப்பாகும். மதிப்பு 1 என்றால், நாம் அனைத்து எதிர்பார்க்கப்பட்ட வெளியீடுகளையும் சரியாக கணிக்க முடியும். எங்கள் வழக்கில், கூட்டுநிலைகள் சுமார் 0.06 ஆகும், இது மிகவும் குறைவாகும்.
சோதனை தரவையும் ரெக்ரஷன் கோட்டையும் ஒன்றாக வரைபடக்கூடியது, எங்கள் வழக்கில் ரெக்ரஷன் எப்படி வேலை செய்கிறது என்பதைச் சிறப்பாக காண:
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Linear regression" src="../../../../translated_images/ta/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## Polynomial Regression
## பாலினோமியல் ரெக்ரஷன்
Linear Regression இன் மற்றொரு வகை Polynomial Regression ஆகும். சில நேரங்களில், மாறிலிகளுக்கு நேர்காணல் தொடர்பு உள்ளது - ஒரு பூசணிக்காய் அதிக அளவில் இருந்தால் விலை உயர்ந்திருக்கும் - ஆனால் சில சமயங்களில் இத்தகைய தொடர்புகளை சமத்துவமான அல்லது நேரியல் கோட்டாக வரைய முடியாது.
Linear Regression இன் மற்றொரு வகை பாலினோமியல் ரெக்ரஷன் ஆகும். சில நேரங்களில், வேறுபாடுகளுக்கு நேர்காணல் தொடர்பு இருக்கலாம் - அளவில் பெரிய பூசணிக்காய் விலை அதிகம் - ஆனால் சில நேரங்களில் இந்த தொடர்புகளை பிளேன் அல்லது நேர்க் கோட்டாக வரைபடமிட முடியாது.
✅ இங்கு [இன்னும் சில எடுத்துக்காட்டுகள்](https://online.stat.psu.edu/stat501/lesson/9/9.8) உள்ளன, Polynomial Regression பயன்படும் தரவுக்கு
✅ இங்கே [மேலும் சில உதாரணங்கள்](https://online.stat.psu.edu/stat501/lesson/9/9.8) உள்ளன, பாலினோமியல் ரெக்ரஷனை பயன்படுத்த கூடிய தரவுக்கான.
Date மற்றும் Price இடையேயான தொடர்பை மறுபடியும் பாருங்கள். இந்த scatterplot நேர்காணல் கோட்டால் பகுப்பாய்வு செய்ய வேண்டுமா? விலை மாற்றமடைய முடியாது என்றாய்? இவ்வாறு இருந்தால், polynomial regression முயற்சி செய்யலாம்.
தேதியும் விலையும் இடையேயான தொடர்பை மீண்டும் பாருங்கள். இந்த ஸ்காட்டர்பிளாட் கண்டிப்பாக நேர்க் கோட்டால் ஆய்வு செய்ய வேண்டுமா? விலைகள் மாற முடியாது என்று என்ன? இந்த வேழையில், நீங்கள் பாலினோமியல் ரெக்ரஷனை முயற்சிக்கலாம்.
Polynomial என்பது ஒரு அல்லது அதற்கு மேற்பட்ட மாறிலிகள் மற்றும் коэффициентுகள் கொண்ட கணித வெளிப்பாடுகள் ஆகும்
பாலினோம் என்பது ஒருங்கிலு அல்லது பல மாறிகள் மற்றும் கூட்டாக்களைக் கொண்ட கணித வெளிப்பாடுகள்.
Polynomial regression ஒரு வளைந்த கோட்டைக் உருவாக்கி, நேரியல் அல்லாத தரவுக்கு சிறந்த பொருத்தத்தை அளிக்கிறது. எங்கள் நிலைமையில், வகையான `DayOfYear²` மாறியை உள்ளீடு தரவில் சேர்த்தால், நாம் ஒரு பரபோலிக் வளைவை பொருத்த முடியும், அதில் வருடத்தின் ஒரு குறிப்பிட்ட இடத்தில் குறைந்தபட்சம் இருக்கும்.
பாலினோம் ரெக்ரஷன் நேர்கொண்டாட்டம் இல்லாத தரவுக்கு பொருத்தமான வளைவு கோட்டை உருவாக்கும். எங்கள் வழக்கில், நாமே உள்ளீட்டு தரவுக்கு சதுரமான `DayOfYear` மாறியை சேர்க்கும்போது, ஆண்டு முழுவதும் ஒரு குறிப்பிட்ட கட்டத்தில் குறைந்த அளவு கொண்ட பரப்பைக் கொண்ட வளைவு கோட்டை பெற்று தரவுடன் பொருந்துவோம்.
Scikit-learn ஆல் ஒரு பயனுள்ள [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) உள்ளது, இது தரவு செயலாக்க பல படிகளை ஒன்றிணைக்க உதவுகிறது. **pipeline** என்பது பல **estimators** வரிசையாகும். எங்கள் நிலையில், முதலில் polynomial பண்புகளை மாதிரிக்கு சேர்த்து, பிறகு ரெக்ரெஷன் பயிற்சி பெறும் pipeline ஒன்றை உருவாக்குவோம்:
Scikit-learn ஒரு உதவியுள்ள [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) கொண்டுள்ளது, இது தரவு செயலாக்கத்தின் வெவ்வேறு படிகளை ஒன்றிணைக்க உதவும். ஒரு **pipeline** என்பது **மதிப்பீடுகளின்** சங்கிலி ஆகும். எங்கள் வழக்கில், முதலில் பாலினோமியல் அம்சங்களை நமது மாதிரிக்கு சேர்க்கும் மற்றும் பிறகு ரெக்ரஷன் பயிற்சி செய்யும் pipeline ஒன்றை உருவாக்குவோம்:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -255,61 +259,83 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
`PolynomialFeatures(2)` பயன்படுத்துவது, உள்ளீடு தரவின் இரண்டாம் நிலை அனைத்து polynomial யையும் சேர்த்துக் கொள்வதை 의미ம். எங்கள் நிலைமையில் இது `DayOfYear²` ஆகும், ஆனால் இரண்டு மாறிலிகள் X மற்றும் Y என்றால், இது X², XY, Y² ஆகியவற்றை சேர்க்கும். மேல் நிலை polynomial களை நாங்கள் விரும்பினால் பயன்படுத்தலாம்.
Pipelines ஐ இயல்பான `LinearRegression` பொருளின் மாதிரியே பயன்படுத்தலாம், அதாவது pipeline ஐ `fit` செய்து, பிறகு `predict` மூலம் கணிப்புகளை பெறலாம். கீழே சோதனை தரவும், பரபோலிக் பரப்பையும் காட்டியுள்ளோம்:
`PolynomialFeatures(2)` பயன்படுத்துவது, உள்ளீட்டு தரவிலிருந்து அனைத்து இரண்டாம் நிலை பாலினோம் சேர்க்கும் என்று பொருள். எங்கள் வழக்கில் அது `DayOfYear`<sup>2</sup> மட்டுமே இருக்கும், ஆனால் இரண்டு உள்ளீட்டு மாறிகள் X மற்றும் Y இருந்தால், இது X<sup>2</sup>, XY மற்றும் Y<sup>2</sup> ஐ சேர்க்கும். நாமே அதிகநிலை பாலினோம்களையும் பயன்படுத்தலாம்.
Pipelines-ஐ முதன்மை `LinearRegression` பொருளைப் போல பயன்படுத்தலாம், அதாவது நாம் pipeline-ஐ `fit` செய்து, பின்னர் `predict` மூலம் கணிப்புகளைப் பெறலாம்:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
மென்மையான அணுகுமுறை வளைவு வரைபடம் காண, `np.linspace` பயன்படுத்தி உள்ளீட்டு மதிப்புகளின் நேர்மையான வரம்பை உருவாக்குகிறோம், நேரடியாக ஒழுங்கற்ற சோதனை தரவுக்கே இல்லாமல் (அது சுழற்படியான கோட்டைக் கொடுக்கும்):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
சோதனை தரவும் அணுகுமுறை வளைவுக் கோட்டும் காட்டும் வரைபடம் இதோ:
<img alt="Polynomial regression" src="../../../../translated_images/ta/poly-results.ee587348f0f1f60b.webp" width="50%" />
Polynomial Regression பயன்படுத்தி சில அளவிற்கு குறைந்த MSE மற்றும் அதிகமாகும் determination பெற முடியும், ஆனால் அதிக மாறுபாடு இல்லை. மற்ற பண்புகளையும் கவனிக்க வேண்டும்!
பாலினோமியல் ரெக்ரஷன் மூலம், நாமே சிறிது குறைந்த RMSE மற்றும் அதிகமான நிர்ணயக்கூறாடலை பெற முடியும், ஆனால் பெரிய மாற்றம் இல்லை. நாமே வேறு அம்சங்களையும் கருத்தில் கொள்ள வேண்டும்!
> பீ பதங்களை அதிகரிக்கும் மிகக் குறைந்த விலைகள் ஹாலோவீன் சுற்றிலும் உள்ளது என்று நீங்கள் கவனித்தீர்களா? இதனை எப்படி விளக்கமுடியும்?
> குறைந்தபட்ச பூசணிக்காய் விலைகள் ஹாலோவீனுக்கு அருகில் காணப்படுகின்றது. இதை நீங்கள் எப்படி விளக்கவிட்டீர்கள்?
🎃 வாழ்த்துக்கள், நீங்கள் பை பீற்கூடிய பீ விலையை கணிக்க உதவும் மாதிரியை உருவாக்கினீர்கள். இதே சீரியல் முறையை அனைத்து பீ வகைகளுக்கும் பயன்படுத்தலாம், ஆனால் அது களைப்பானதாக இருக்கும். இப்போது உங்கள் மாதிரியில் பீ விதத்தை மாற்றுவது எப்படி என்று கற்றுக் கொள்வோம்!
🎃 வாழ்த்துக்கள், நீங்கள் பை பூசணிக்காய் விலையை கணிக்க உதவும் மாதிரியை உருவாக்கியுள்ளீர்கள். நீங்கள் அனைத்து பூசணிக்காய் வகைகளுக்குமான அதே செயல்முறையை மீளவும் செய்யலாம் என்றாலும் அது சலுகையாக இருக்கும். இப்போது பூசணிக்காய் வகைப் பிரிவை எங்கள் மாதிரியில் எவ்வாறு கருத வேண்டும் என்பதை கற்றுக்கொள்வோம்!
## Categorical Features
## வகை அம்சங்கள்
சரியான உலகில், நம்முடைய மாதிரி பல பீ விதங்களுக்கு விலை கணிக்க முடியும். ஆனால், `Variety` நெடுவரிசை `Month` போன்ற எண் சார்ந்த அல்லாத மதிப்புகளை கொண்டுள்ளது. இந்த நெடுவரிசைகள் **categorical** என அழைக்கப்படுகின்றன.
இடையில், ஒரே மாதிரியைக் கொண்டு வெவ்வேறு பூசணிக்காய் வகைகளுக்கான விலைகளைக் கணிக்கக்கூடியதாக கருதுகிறோம். ஆனால், `Variety` பத்தியில் சிலவிதமாக `Month` போன்ற பத்திகளைக் காட்டிலும் வேறுபடுகிறது, ஏனெனில் அதில் எண்காணிப்பற்ற மதிப்புகள் உள்ளன. இத்தരം பத்திகள் **வகைபடுத்தப்பட்டவை (categorical)** என அழைக்கப்படுகின்றன.
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 தெரிந்துகொள்ள முக்கிய வீடியோ - categorical பண்புகளை எப்படி பயன்படுத்துவது.
> 🎥 மேற்கண்ட படத்தை கிளிக் செய்து வகை அம்சங்களை பயன்படுத்தும் குறுந்தட நிழற்படத்தை பார்க்கலாம்.
இங்கு விதத்தின் அடிப்படையில் சராசரி விலை எப்படி உள்ளது பார்க்கலாம்:
இங்கு வகையின் அடிப்படையில் சராசரி விலை எப்படி இருக்கும் என்று காணலாம்:
<img alt="Average price by variety" src="../../../../translated_images/ta/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
விதத்தை எண்ணிக்கையாக மாற்ற, அதாவது **encode** செய்ய முதலில் அதை எண்கள் வடிவத்திற்குப் பதிக்க வேண்டும். இதற்குள் பல வழிகள் உள்ளன:
கையை கருத்தில் கொள்ள, முதலில் அதை எண்கள் வடிவத்தில் மாற்ற வேண்டியிருக்கும், அதாவது **எண் குறியீடு அளித்தல் (encoding)**. இதனை செய்வதற்கான பல வழிகள் உள்ளன:
* எளிய **எண்ணியல் எண்கோவை** விதங்களின் பட்டியலை நோக்கி அமைத்து, பெயரை அந்த பட்டியலில் உள்ள இடமான எண்ணுடன் மாற்றும். இது linear regression க்கு நல்லதல்ல, ஏனெனில் linear regression அந்த எண்ணை நேரடி மதிப்பாக எடுத்துக்கொண்டு, சில коэффициентுகளுடன் கூடிய கூட்டலைச் செய்கிறது. எங்கள் நிலைகளில், இந்த எண்ணும் விலை இடையேயான தொடர்பு நேர்காணல் அல்ல என்பதுவரை, இத்தெரிவு நல்லது அல்ல.
* **One-hot encoding** என்பது `Variety` நெடுவரிசையை 4 வித்தியாசமான நெடுவரிசைகளாக மாற்றும், ஒவ்வொரு விதத்திற்கும் ஒரு நெடுவரிசை இருக்கும். அந்த வரி அந்த வகையாக இருந்தால் 1, இல்லையெனில் 0 ஆகும். இதனால் linear regression-ல் நான்கு коэффициентுகள் இருப்பார்கள், ஒவ்வொரு மாதியன் விதத்திற்கும் "தொடங்கு விலை" அல்லது "மேலதிக விலை" என பொறுப்பாக இருக்கும்.
* எளிமையான **எண் குறியீடு அளித்தல்** இயற்கை விருப்பங்களை பட்டியலிடும் அட்டவணையைக் உருவாக்கி, அதற்குப் பின்னர் அந்த அட்டவணையில் பெயரைக் குறியீட்டு எண்ணாக மாற்றும். இது ரெக்ரஷனுக்கு சிறந்தது அல்ல, ஏனெனில் ரெக்ரஷன் எதிர்கொள்ளும் நேரடிக் குறிப்பான எண் மதிப்பை எடுத்துக்கொண்டு அதற்கேற்ப பலி அளிக்கும். எங்கள் வழக்கில், குறியீட்டு எண்ணும் விலையுடனான தொடர்பு தெளிவாக நேர்க் கோட்டை அல்லாமல் இருக்கும், கூடவே குறியீட்டுக்கள் நிச்சயமான முறையில் வரிசைப்படுத்த இருந்தாலும்.
* **ஒன்-ஹாட் எண்கிறது (One-hot encoding)**, `Variety` பத்தியை 4 வேறு பத்திகளாக மாற்றும், ஒவ்வொன்றும் ஒரு வகைக்கானது. ஒவ்வொரு வரிசை விசோட்ட வகைக்கானதாக இருந்தால் பத்தி `1`, இல்லையெனில் `0` உள்ளது. இதனால் ஒரே நேர்க் ரெக்ரஷனில் நான்கு கூட்டுறுக்கள் இருக்கும், ஒவ்வொரு பூசணிக்காய் வகைக்கும் தனித்தனியான "ஆரம்ப விலை" (அல்லது "மேலும் விலை") பொறுப்பேற்கும்.
எப்படி வகையை one-hot encode செய்வது என்று கீழே காணலாம்:
கீழ்காணும் குறியீடு வகையை ஒன்-ஹாட் ஆக்குவதற்கான உதாரணமாகும்:
```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
one-hot encoded variety ஐ உள்ளீடு கொண்டு linear regression பயிற்சி பெற `X` மற்றும் `y` தரவை சரியாக தயார் செய்யவேண்டும்:
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` மற்றும் `y` தரவை சரியாக ஆரம்பிப்பதே போதும்:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
மீதியானக் குறியிடல் மேலே பயன்படுத்திய Linear Regression பயிற்சிக்குத் தன்னோடே அதே மாதிரியானது. முயற்சி செய்தால், சராசரி சதுர பிழை சுமார் அதே அளவில் இருக்கும், ஆனால் coefficient of determination அதிக வேகம் (~77%) பெறப்படும். மேலும் நுட்பமான கணிப்புகள் பெற, பல categorical பண்புகளை மேலும் எண்ணிக்கையான பண்புகளுடன் (`Month` அல்லது `DayOfYear` போன்ற) சேர்த்து, `join` உபயோகித்து ஒன்றாக கூட்டலாம்:
மீதமுள்ள குறியீடு மேலே பயன்படுத்திய லினியர் ரெக்ரஷன் பயிற்சியைப் போன்றது. நீங்கள் இதை முயற்சித்தால், சராசரி சதுர வேறுபாடு சுமார் அதேபோல் இருக்கும், ஆனால் நாமே மிக்க உயர்ந்த நிர்ணயக்கூறுகளை (~77%) பெறுவோம். கூடுதல் துல்லியமான கணிப்புகளைச் செய்ய, மேலும் வகை அம்சங்களையும், எண் அம்சங்களும் (காரணமாக `Month` அல்லது `DayOfYear`) கருதலாம். பெரிய அம்ச தொகுப்பு பெற `join` பயன்படுத்தலாம்:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -318,12 +344,12 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
```
இங்கு மேலும் `City` மற்றும் `Package` வகையும் சேர்த்து, MSE 2.84 (10%), determination 0.94 கிடைத்துள்ளது!
## அனைத்தையும் ஒருங்கிணைத்தல்
இங்கு நாமே `City` மற்றும் `Package` வகையும் சேர்க்கின்றோம், இதனால் RMSE 2.84 (10.5%) மற்றும் நிர்ணயக்கூறு 0.94 பெறுகிறோம்!
சிறந்த மாதிரியை உருவாக்க, மேலே கொடுக்கப்பட்ட இணைந்த (one-hot encoded categorical + numeric) தரவை Polynomial Regression உடன் பயன்படுத்தலாம். இங்கே முழுமையான குறியீடு உள்ளது:
## அனைத்தையும் ஒன்று சேர்ந்தாக்குதல்
சிறந்த மாதிரியை உருவாக்க, நமக்கு மேலே கூறிய ஒன்-ஹாட் குறியீடு செய்யப்பட்ட வகை + எண் அம்சங்கள் எனத் தொடர்ந்து பாலினோமியல் ரெக்ரஷன் பயன்படுத்த முடியும். கீழ்க்கண்ட முழுமையான குறியீடு உங்களுக்கு உதவும்:
```python
# பயிற்சி தரவுகளை அமைக்கவும்
@ -333,54 +359,54 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# பயிற்சி மற்றும் சோதனை பாகங்களை பிரிக்கவும்
# பயிற்சி-சோதனை பிரிவை உருவாக்கவும்
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# குழாய்க்குழியை அமைத்து பயிற்சி செய்யவும்
# குழாய்கோட்டைப் அமைத்து பயிற்சி அளிக்கவும்
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# சோதனை தரவுகளுக்கான முன்னறிவிப்பை செய்யவும்
# சோதனை தரவுக்கான முடிவுகளை கணிக்கவும்
pred = pipeline.predict(X_test)
# MSE மற்றும் தீர்மானத்தை கணக்கிடவும்
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# RMSE மற்றும் தீர்மானக்கூறு கணக்கிடவும்
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
இது சுமார் 97% determination коэффициентுடன் மற்றும் MSE=2.23 (~8% பிழை) தர வேண்டும்.
| 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 |
இது சுமார் 97% உயர் நிர்ணயக்கூறு மற்றும் RMSE=2.23 (~8% கணிப்பு பிழை) தர வேண்டும்.
| மாதிரி | RMSE | நிர்ணயக்கூறு |
|-------|-----|---------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
| அனைத்து அம்சங்கள் Linear | 2.84 (10.5%) | 0.94 |
| அனைத்து அம்சங்கள் Polynomial | 2.23 (8.25%) | 0.97 |
🏆 நன்றாக செய்தீர்கள்! நீண்ட பாடத்தில் நான்கு Regression மாதிரிகள் உருவாக்கித் தேர்வு தரத்தை 97% வரை மேம்படுத்தினீர்கள். Regression இறுதி பகுதியில் நீங்கள் Logistic Regression பற்றி கற்றுக் கொண்டு வகைகளை தீர்மானிப்பீர்கள்.
🏆 மிகச்சிறப்பு! நீங்கள் ஒரே பாடத்தில் நான்கு ரெக்ரஷன் மாதிரிகளை உருவாக்கி, மாதிரி தரத்தை 97% ஆக மேம்படுத்தியுள்ளீர்கள். ரெக்ரஷன் இறுதி பிரிவில், வாரிப் பிரிவுகளை நிர்ணயிக்கும் லாஜிஸ்டிக் ரெக்ரஷன் பற்றி கற்பீர்கள்.
---
## 🚀சவால்
இந்த நோட்புக்கில் பல மாறிலிகளை சோதித்து, பொறுத்து மாதிரி நுட்பத்திற்கு எப்படி ஏற்படுகிறது என்று காண்க.
இந்த நோட்புக்கில் பல்வேறு மாறிலாளர்களை சோதித்து, தொடர்பு நிலை மாதிரி துல்லியத்துடன் எப்படி பொருந்துகிறது என்று பாருங்கள்.
## [பாட முடிந்த பிறகு விடைத் தேர்வு](https://ff-quizzes.netlify.app/en/ml/)
## [தொடர்பு பரீட்சை](https://ff-quizzes.netlify.app/en/ml/)
## பார்வை & சுயபடிப்பு
## விமர்சனம் & சுயபாடம்
இந்த பாடத்தில் Linear Regression பற்றி கற்றோம். மற்ற முக்கியமான Regression வகைகளும் உள்ளன. Stepwise, Ridge, Lasso மற்றும் Elasticnet தொழில்நுட்பங்களைப் பற்றிக் கற்றுக்கொள்ளுங்கள். இன்னும் அதிகமாக கற்க விரும்புவோருக்கு [Stanford Statistical Learning பாடநெறி](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) சாத்தியமாகும்.
இந்த பாடத்தில் நாமே லினியர் ரெக்ரஷன் பற்றி கற்றுக்கொண்டோம். ரெக்ரஷனின் மற்ற முக்கிய வகைகள் உள்ளன. Stepwise, Ridge, Lasso மற்றும் Elasticnet முறைகளைப் படியுங்கள். மேலும் தெரிந்துகொள்ள நல்ல பாடநெறி [ஸ்டான்போர்டு புள்ளியியல் கற்றல் பாடநெறி](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) கும்.
## பணியாளர் வேலை
## பணியியல்
[Model உருவாக்குக](assignment.md)
[ஒரு மாதிரியை உருவாக்கவும்](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**எச்சரிக்கை**:
இந்த ஆவணம் AI மொழிபெயர்ப்பு சேவை [Co-op Translator](https://github.com/Azure/co-op-translator) மூலம் மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் சரியான தன்மையை உறுதிப்படுத்த முயலுகிறோம், எனினும் தானியங்கி மொழிபெயர்ப்புகளில் தவறுகள் அல்லது பிழைகள் இருக்கக்கூடும் என்பதைக் கவனத்தில் கொள்ளவும். அசல் ஆவணம் அதன் சொந்த மொழியில் அதிகாரப்பூர்வ மூலமாகக் கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பை பயன்படுத்துவதால் ஏற்படும் தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பாக மாறமாட்டோம்.
**பணிமொழி**:
இந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற செயற்கை நுண்ணறிவு மொழிபெயர்ப்புச் சேவையை பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சித்தாலும், தன்னிச்சையான மொழிபெயர்ப்புகளில் தவறுகள் அல்லது துல்லியமற்ற செய்திகள் இருக்கலாம் என்பதை கவனத்தில் கொள்ளவும். துவக்கம் மொழியில் உள்ள அசல் ஆவணம் அதிகாரப்பூர்வ வளமாக கருதப்பட வேண்டும். முக்கியமான தகவலுக்காக, தொழில்முறை மனித மொழிபெயர்ப்பாளரை பரிந்துரை செய்கின்றோம். இந்த மொழிபெயர்ப்பின் பயன்படுத்தலிலிருந்து ஏற்படும் எந்த ஒரு தவறான புரிதலும் அல்லது தவறான விளக்கங்களுக்கும் நாங்கள் பொறுப்பு ஏற்கவில்லை.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## பம்ப்கின் விலை நிர்ணயத்திற்கு நேரியல் மற்றும் பாலினோமியல் ரிக்ரஷன் - பாடம் 3\n",
"## பூசணிக்காய் விலை நிர்ணயத்திற்கு கோட்லைன் மற்றும் பன்முறை ரிக்ரஷன் - பாடம் 3\n",
"\n",
"தேவையான நூலகங்கள் மற்றும் தரவுத்தொகுப்பை ஏற்றவும். தரவுகளை கீழே உள்ள subset ஆக மாற்றவும்:\n",
"தேவையான நூலகங்களையும் தரவுத்தொகுப்பையும் ஏற்றவும். தரவுகளை பின்வரும் அம்சங்களின் உட்பிரிவாக கொண்டிருக்கும் ஒரு தரவுத்தட்டமாக மாற்றவும்:\n",
"\n",
"- புஷல் மூலம் விலை நிர்ணயிக்கப்பட்ட பம்ப்கின்களை மட்டும் பெறவும்\n",
"- பஸ்செல் மூலம் விலை நிர்ணயிக்கப்பட்ட பூசணிக்காய்களை மட்டுமே எடுக்கவும்\n",
"- தேதியை மாதமாக மாற்றவும்\n",
"- உயர் மற்றும் குறைந்த விலைகளின் சராசரியாக விலையை கணக்கிடவும்\n",
"- புஷல் அளவுக்கு ஏற்ப விலையை மாற்றவும்\n"
"- அதிக மற்றும் குறைந்த விலைகளின் சராசரியாக விலையை கணக்கிடவும்\n",
"- விலையை பஸ்செல் அளவுக்கு பொருந்துமாறு மாற்றவும்\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ஒரு சிதறல் வரைபடம் நமக்கு ஆகஸ்ட் முதல் டிசம்பர் வரை மாத தரவுகள் மட்டுமே உள்ளன என்பதை நினைவூட்டுகிறது. நேரியல் முறையில் முடிவுகளை வரையறுக்க மேலும் தரவுகள் தேவைப்படலாம்.\n"
"ஒரு சிதறல் வரைபடம் எங்களுக்கு ஆகஸ்ட் முதல் திசம்பர் வரை மாதத் தகவல்களே உள்ளன என்பதை நினைவூட்டுகிறது. கோடுரு வடிவில் முடிவுகள் எடுக்க, நாம் கூடுதல் தரவுகள் தேவைப்படும் என நினைக்கலாம்.\n"
]
},
{
@ -448,7 +448,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"இங்கே தொடர்பு உள்ளதா என்று பார்ப்போம்:\n"
"ஒரு தொடர்பு இருக்கிறதா என்று பார்க்கலாம்:\n"
]
},
{
@ -474,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"மிகவும் குறைந்த தொடர்பு இருப்பது போல தெரிகிறது, ஆனால் மற்றொரு முக்கியமான தொடர்பு உள்ளது - ஏனெனில் மேலே உள்ள வரைபடத்தில் விலை புள்ளிகள் பல தனித்த தனிப்பட்ட குழுக்களைக் கொண்டுள்ளன. பம்ப்கின் வகைகளை காட்டும் ஒரு வரைபடத்தை உருவாக்குவோம்:\n"
"பொதுவாக தொடர்பு மிகவும் குறைவாகத் தெரிகிறது, ஆனால் மேலே உள்ள படத்தில் விலை புள்ளிகளுக்கு பல தனித்துவமான குழுக்கள் உள்ளதால், வேறு ஒரு முக்கியமான தொடர்பு இருக்கிறது. பல்வேறு பூசணி வகைகளை காட்டும் ஒரு படத்தை உருவாக்கலாம்:\n"
]
},
{
@ -538,7 +538,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"இப்போது, ஒரு வகை - **பை வகை** - மீது மட்டும் கவனம் செலுத்துவோம்.\n"
"பொதுவாக, நாம் தற்போது ஒரே வகையே கவனிப்போம் - **பை வகை**.\n"
]
},
{
@ -586,9 +586,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### நேரியல் முறைமைகள்\n",
"### கோட்டுரை சரி பதிவு\n",
"\n",
"நாம் Scikit Learn-ஐ பயன்படுத்தி நேரியல் முறைமைகள் மாதிரியை பயிற்சி செய்யப் போகிறோம்:\n"
"நாம் Scikit Learn ஐ பயன்படுத்தி கோட்டுரை சரி பதிவு மாதிரியை பயிற்றுவிப்போம்:\n"
]
},
{
@ -666,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"கோட்டின் சரிவை நேரியல் பின்வாங்கல் குணகங்கள் மூலம் தீர்மானிக்கலாம்:\n"
"கோட்டின் சாய்வு கோட்டுருவாக்க காரணிகளிலிருந்து கணக்கிடப்படலாம்:\n"
]
},
{
@ -693,7 +693,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"நாம் பயிற்சி பெற்ற மாதிரியை விலை கணிக்க பயன்படுத்தலாம்:\n"
"நாம் பயிற்சி பெற்ற மாடலைப் பயன்படுத்தி விலையை முன்னறிக்கை செய்யலாம்:\n"
]
},
{
@ -722,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### பாலினோமியல் ரிக்ரஷன்\n",
"### செர் வரிசை பின்வாசல்\n",
"\n",
"சில நேரங்களில் அம்சங்கள் மற்றும் முடிவுகளுக்கிடையேயான தொடர்பு இயல்பாகவே நேர்மறையானது அல்ல. உதாரணமாக, கும்முட்டி விலை குளிர்காலத்தில் (மாதங்கள்=1,2) அதிகமாக இருக்கலாம், பின்னர் கோடை காலத்தில் (மாதங்கள்=5-7) குறைந்து, பின்னர் மீண்டும் அதிகரிக்கலாம். நேர்மறை ரிக்ரஷன் இந்த தொடர்பை துல்லியமாக கண்டறிய முடியாது.\n",
"சில சமயம் அம்சங்களுக்கும் முடிவுகளுக்கும் இடையிலான தொடர்பு இயல்பாகவே நேரியல் அல்ல. உதாரணமாக, புகட்டுப் பழ விலை குளிர்காலத்தில் (மாதங்கள்=1,2) அதிகமாக இருக்கலாம், பின்னர் கோடையில் (மாதங்கள்=5-7) தாழ்ந்து, மீண்டும் உயர்தலை அடையலாம். நேரியல் பின்வாசல் இந்த தொடர்பை துல்லியமாகக் கண்டுபிடிக்க முடியாது.\n",
"\n",
"இந்தச் சூழலில், கூடுதல் அம்சங்களைச் சேர்க்கலாம் என்று நாம் கருதலாம். எளிய வழி என்னவென்றால், உள்ளீட்டு அம்சங்களில் இருந்து பாலினோமியல்களைப் பயன்படுத்துவது, இது **பாலினோமியல் ரிக்ரஷன்** எனப்படும். Scikit Learn-இல், நாங்கள் பைப்லைன்களைப் பயன்படுத்தி பாலினோமியல் அம்சங்களை தானாக முன்கூட்டியே கணக்கிடலாம்:\n"
"இந்த நிலைமையில், கூடுதல் அம்சங்களைச் சேர்ப்பதை நாம் பரிசீலிக்கலாம். எளிய வழி என்பது உள்ளீட்டு அம்சங்களிலிருந்து செர் வரிசைகளைப் பயன்படுத்துவது, இதனால் **செர் வரிசை பின்வாசல்** உருவாகும். Scikit Learn இல், நாம் இணையக் கூறுகளைப் பயன்படுத்தி செர் வரிசை அம்சங்களை தானாக முன்னிலை கணக்கிடலாம்: \n"
]
},
{
@ -781,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### வகைகளின் குறியாக்கம்\n",
"### குறியாக்க வகைகள்\n",
"\n",
"சிறந்த உலகில், ஒரே மாதிரியான மாடலைப் பயன்படுத்தி வெவ்வேறு பூசணிக்காய் வகைகளுக்கான விலைகளை கணிக்க முடியும் என்று நாங்கள் விரும்புகிறோம். வகையை கணக்கில் எடுத்துக்கொள்ள, முதலில் அதை எண் வடிவமாக மாற்ற வேண்டும், அல்லது **குறியாக்கம் செய்ய வேண்டும்**. இதைச் செய்ய பல வழிகள் உள்ளன:\n",
"சரியான உலகத்தில், நாம் ஒரே மாதிரி பயன்படுத்தி வேறுபட்ட பூசணிக்காய்களின் விலைகளை கணிக்க இயல வேண்டும். வகை காரணமாக கணிக்க, முதலில் அதை எண்களாக மாற்ற வேண்டும் அல்லது **குறியாக்க** செய்ய வேண்டும். இதற்கான பல வழிகள் உள்ளன:\n",
"\n",
"* எளிய எண் குறியாக்கம், இது வெவ்வேறு வகைகளின் ஒரு அட்டவணையை உருவாக்கும், பின்னர் அந்த அட்டவணையில் உள்ள குறியீட்டின் அடிப்படையில் வகையின் பெயரை மாற்றும். இது நேரியல் மடக்குக்கான சிறந்த யோசனை அல்ல, ஏனெனில் நேரியல் மடக்கு குறியீட்டின் எண் மதிப்பை கணக்கில் எடுத்துக்கொள்கிறது, மேலும் அந்த எண் மதிப்பு விலையுடன் எண் ரீதியாக தொடர்புடையதாக இருக்க வாய்ப்பு குறைவு.\n",
"* ஒன்-ஹாட் குறியாக்கம், இது `Variety` பத்தியை 4 வெவ்வேறு பத்திகளால் மாற்றும், ஒவ்வொரு வகைக்கும் ஒன்று, அதில் குறிப்பிட்ட வரிசை கொடுக்கப்பட்ட வகையைச் சேர்ந்தது என்றால் 1 இருக்கும், இல்லையெனில் 0 இருக்கும்.\n",
"* எளிய எண் குறியாக்கம், இது வெவ்வேறு வகைகளின் அட்டவணையை உருவாக்கி, அந்த அட்டவணையில் உள்ள பட்டியலில் இருந்து வகை பெயரை ஒரு குறியீட்டில் மாற்றும். ஆனால், இது நேர்காணல் செல்லுபடியாகாது, ஏனெனில் நேர்காணல் இந்நumerical குறியீட்டின் மதிப்பை பொருந்தும், மேலும் அந்த மதிப்பு விலை உடன் தொடர்பு இல்லாததாக இருக்கலாம்.\n",
"* ஒன்-ஹோட் குறியாக்கம், இது `Variety` நெடுவரிசையை 4 வெவ்வேறு நெடுவரிசைகளாக மாற்றும், ஒவ்வொன்றும் ஒரு வகைக்காக, அந்த வரிசை கொடுக்கப்பட்ட வகைக்கு சேர்ந்தது என்றால் 1, இல்லையெனில் 0 இருக்கும்.\n",
"\n",
"கீழே உள்ள குறியீடு ஒரு வகையை ஒன்-ஹாட் குறியாக்கம் செய்ய எப்படி முடியும் என்பதை காட்டுகிறது:\n"
"கீழே உள்ள குறியீடு, வகையை ஒன்-ஹோட் குறியாக்கம் செய்யும் முறையை காட்டுகிறது:\n"
]
},
{
@ -944,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### வகைகளில் நேரியல் முறை\n",
"### வகை மீது நேரியல் ரிகிரஷன்\n",
"\n",
"இப்போது மேலே உள்ள அதே குறியீட்டை பயன்படுத்துவோம், ஆனால் `DayOfYear`-க்கு பதிலாக, நமது ஒரே-ஹாட்-கோடிட்ட வகையை உள்ளீடாக பயன்படுத்துவோம்:\n"
"மேலேயுள்ள அதே குறியீட்டை நாம் இப்போது பயன்படுத்தப் போகிறோம், ஆனால் `DayOfYear`-ஐ பதிலாக நமது ஒன்-ஹாட்-என்கோடிட் வகையை உள்ளீடாக பயன்படுத்துவோம்:\n"
]
},
{
@ -994,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"நாம் இதே முறையில் பிற அம்சங்களைப் பயன்படுத்த முயற்சிக்கலாம், மேலும் அவற்றை `Month` அல்லது `DayOfYear` போன்ற எண் அம்சங்களுடன் இணைக்கலாம்:\n"
"நாம் அதே முறையில் மற்ற அம்சங்களையும் பயன்படுத்தி, அவற்றை `Month` அல்லது `DayOfYear` என்ற எண்கணித அம்சங்களுடன் இணைக்க முயற்சி செய்யலாம்:\n"
]
},
{
@ -1025,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### பாலினோமியல் ரிக்ரஷன்\n",
"### பவர் சரிபிரச்சாரம்\n",
"\n",
"பாலினோமியல் ரிக்ரஷன் ஒரு-ஹாட்-என்கோடு செய்யப்பட்ட வகைமைய அம்சங்களுடன் பயன்படுத்தப்படலாம். பாலினோமியல் ரிக்ரஷனை பயிற்சி செய்யும் குறியீடு மேலே பார்த்ததுபோலவே இருக்கும்.\n"
"பவர் சரிபிரச்சாரம் ஒரே ஹாட் கடக்கப்பட்ட வகைப்பாட்டு அம்சங்களுடன் கூட பயன்படுத்தலாம். பவர் சரிபிரச்சாரத்தை பயிற்சி செய்யும் குறியீடு மேலே பார்த்ததாகவே இருக்கும்.\n"
]
},
{
@ -1074,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**குறிப்பு**: \nஇந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையைப் பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சிக்கிறோம், ஆனால் தானியக்க மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறான தகவல்கள் இருக்கக்கூடும் என்பதை தயவுசெய்து கவனத்தில் கொள்ளுங்கள். அதன் தாய்மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பல்ல.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**தனிப்பட்ட விளக்கம்**: \nஇந்த ஆவணம் AI மொழிபெயர்ப்பு சேவை [Co-op Translator](https://github.com/Azure/co-op-translator) மூலம் மொழி பெயர்க்கப்பட்டுள்ளது. நிச்சயத்துக்காக நாம் முயற்சி செய்கிறோம் என்றாலும், தானாக செயல்படும் மொழிபெயர்ப்புகளில் பிழைகள் அல்லது துல்லியமின்மைகள் இருக்க வாய்ப்பு உள்ளது. பெற்றோ மொழியில் உள்ள அசல் ஆவணம் அதிகாரபூர்வமான ஆதாரமாகக் கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பை பரிந்துரைக்கிறோம். இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்பட் எந்தவொரு தவறான புரிதல்களுக்கும் அல்லது தவறான விளக்கல்களுக்கும் நாம் பொறுப்பேற்கவில்லை.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1104,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-10-11T12:20:42+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ta"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

Loading…
Cancel
Save