From 3faee595d10415275fd004ff1b323b2df44edf85 Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Fri, 19 Dec 2025 18:07:58 +0000 Subject: [PATCH] chore(i18n): sync translations with latest source changes (chunk 6/10, 100 files) --- ...97c69f2b868d82fa4e754cc923b185d4f7d.ml.png | Bin 0 -> 18205 bytes ...97c69f2b868d82fa4e754cc923b185d4f7d.te.png | Bin 0 -> 18422 bytes ...a4bcd1ce06217e7e72325d2406ef2180795.kn.png | Bin 0 -> 66583 bytes ...a4bcd1ce06217e7e72325d2406ef2180795.ml.png | Bin 0 -> 66583 bytes ...a4bcd1ce06217e7e72325d2406ef2180795.te.png | Bin 0 -> 66583 bytes ...0c1c064f0d8f2fe3304d3bcc0198f7dc139.kn.png | Bin 0 -> 131787 bytes ...0c1c064f0d8f2fe3304d3bcc0198f7dc139.ml.png | Bin 0 -> 135308 bytes ...0c1c064f0d8f2fe3304d3bcc0198f7dc139.te.png | Bin 0 -> 130762 bytes ...1801ebd496f242525381225992ece6c369d.kn.png | Bin 0 -> 14725 bytes ...1801ebd496f242525381225992ece6c369d.ml.png | Bin 0 -> 14725 bytes ...1801ebd496f242525381225992ece6c369d.te.png | Bin 0 -> 14725 bytes .../kn/1-Introduction/1-intro-to-ML/README.md | 161 ++ .../1-intro-to-ML/assignment.md | 25 + .../1-Introduction/2-history-of-ML/README.md | 167 +++ .../2-history-of-ML/assignment.md | 27 + .../kn/1-Introduction/3-fairness/README.md | 172 +++ .../1-Introduction/3-fairness/assignment.md | 27 + .../4-techniques-of-ML/README.md | 134 ++ .../4-techniques-of-ML/assignment.md | 27 + translations/kn/1-Introduction/README.md | 38 + .../kn/2-Regression/1-Tools/README.md | 240 +++ .../kn/2-Regression/1-Tools/assignment.md | 29 + .../kn/2-Regression/1-Tools/notebook.ipynb | 0 .../1-Tools/solution/Julia/README.md | 17 + .../1-Tools/solution/R/lesson_1-R.ipynb | 452 ++++++ .../1-Tools/solution/notebook.ipynb | 677 +++++++++ translations/kn/2-Regression/2-Data/README.md | 228 +++ .../kn/2-Regression/2-Data/assignment.md | 25 + .../kn/2-Regression/2-Data/notebook.ipynb | 46 + .../2-Data/solution/Julia/README.md | 17 + .../2-Data/solution/R/lesson_2-R.ipynb | 673 +++++++++ .../2-Data/solution/notebook.ipynb | 439 ++++++ .../kn/2-Regression/3-Linear/README.md | 383 +++++ .../kn/2-Regression/3-Linear/assignment.md | 27 + .../kn/2-Regression/3-Linear/notebook.ipynb | 128 ++ .../3-Linear/solution/Julia/README.md | 17 + .../3-Linear/solution/R/lesson_3-R.ipynb | 1086 ++++++++++++++ .../3-Linear/solution/notebook.ipynb | 1117 ++++++++++++++ .../kn/2-Regression/4-Logistic/README.md | 409 ++++++ .../kn/2-Regression/4-Logistic/assignment.md | 27 + .../kn/2-Regression/4-Logistic/notebook.ipynb | 269 ++++ .../4-Logistic/solution/Julia/README.md | 17 + .../4-Logistic/solution/R/lesson_4-R.ipynb | 686 +++++++++ .../4-Logistic/solution/notebook.ipynb | 1261 ++++++++++++++++ translations/kn/2-Regression/README.md | 56 + translations/kn/3-Web-App/1-Web-App/README.md | 361 +++++ .../kn/3-Web-App/1-Web-App/assignment.md | 27 + .../kn/3-Web-App/1-Web-App/notebook.ipynb | 0 .../1-Web-App/solution/notebook.ipynb | 269 ++++ translations/kn/3-Web-App/README.md | 37 + .../4-Classification/1-Introduction/README.md | 315 ++++ .../1-Introduction/assignment.md | 27 + .../1-Introduction/notebook.ipynb | 41 + .../1-Introduction/solution/Julia/README.md | 17 + .../solution/R/lesson_10-R.ipynb | 731 +++++++++ .../1-Introduction/solution/notebook.ipynb | 677 +++++++++ .../2-Classifiers-1/README.md | 257 ++++ .../2-Classifiers-1/assignment.md | 25 + .../2-Classifiers-1/notebook.ipynb | 41 + .../2-Classifiers-1/solution/Julia/README.md | 17 + .../solution/R/lesson_11-R.ipynb | 1302 +++++++++++++++++ .../2-Classifiers-1/solution/notebook.ipynb | 281 ++++ .../3-Classifiers-2/README.md | 251 ++++ .../3-Classifiers-2/assignment.md | 27 + .../3-Classifiers-2/notebook.ipynb | 165 +++ .../3-Classifiers-2/solution/Julia/README.md | 17 + .../solution/R/lesson_12-R.ipynb | 654 +++++++++ .../3-Classifiers-2/solution/notebook.ipynb | 304 ++++ .../kn/4-Classification/4-Applied/README.md | 331 +++++ .../4-Classification/4-Applied/assignment.md | 27 + .../4-Classification/4-Applied/notebook.ipynb | 41 + .../4-Applied/solution/notebook.ipynb | 292 ++++ translations/kn/4-Classification/README.md | 43 + .../kn/5-Clustering/1-Visualize/README.md | 349 +++++ .../kn/5-Clustering/1-Visualize/assignment.md | 27 + .../5-Clustering/1-Visualize/notebook.ipynb | 52 + .../1-Visualize/solution/Julia/README.md | 17 + .../1-Visualize/solution/R/lesson_14-R.ipynb | 493 +++++++ .../1-Visualize/solution/notebook.ipynb | 831 +++++++++++ .../kn/5-Clustering/2-K-Means/README.md | 263 ++++ .../kn/5-Clustering/2-K-Means/assignment.md | 26 + .../kn/5-Clustering/2-K-Means/notebook.ipynb | 233 +++ .../2-K-Means/solution/Julia/README.md | 17 + .../2-K-Means/solution/R/lesson_15-R.ipynb | 642 ++++++++ .../2-K-Means/solution/notebook.ipynb | 554 +++++++ .../2-K-Means/solution/tester.ipynb | 345 +++++ translations/kn/5-Clustering/README.md | 44 + .../kn/6-NLP/1-Introduction-to-NLP/README.md | 181 +++ .../6-NLP/1-Introduction-to-NLP/assignment.md | 27 + translations/kn/6-NLP/2-Tasks/README.md | 230 +++ translations/kn/6-NLP/2-Tasks/assignment.md | 27 + .../6-NLP/3-Translation-Sentiment/README.md | 202 +++ .../3-Translation-Sentiment/assignment.md | 27 + .../solution/Julia/README.md | 17 + .../solution/R/README.md | 17 + .../solution/notebook.ipynb | 100 ++ .../kn/6-NLP/4-Hotel-Reviews-1/README.md | 419 ++++++ .../kn/6-NLP/4-Hotel-Reviews-1/assignment.md | 21 + .../kn/6-NLP/4-Hotel-Reviews-1/notebook.ipynb | 0 .../solution/Julia/README.md | 17 + 100 files changed, 20859 insertions(+) create mode 100644 translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ml.png create mode 100644 translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.te.png create mode 100644 translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.kn.png create mode 100644 translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ml.png create mode 100644 translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.te.png create mode 100644 translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.kn.png create mode 100644 translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ml.png create mode 100644 translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.te.png create mode 100644 translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.kn.png create mode 100644 translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ml.png create mode 100644 translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.te.png create mode 100644 translations/kn/1-Introduction/1-intro-to-ML/README.md create mode 100644 translations/kn/1-Introduction/1-intro-to-ML/assignment.md create mode 100644 translations/kn/1-Introduction/2-history-of-ML/README.md create mode 100644 translations/kn/1-Introduction/2-history-of-ML/assignment.md create mode 100644 translations/kn/1-Introduction/3-fairness/README.md create mode 100644 translations/kn/1-Introduction/3-fairness/assignment.md create mode 100644 translations/kn/1-Introduction/4-techniques-of-ML/README.md create mode 100644 translations/kn/1-Introduction/4-techniques-of-ML/assignment.md create mode 100644 translations/kn/1-Introduction/README.md create mode 100644 translations/kn/2-Regression/1-Tools/README.md create mode 100644 translations/kn/2-Regression/1-Tools/assignment.md create mode 100644 translations/kn/2-Regression/1-Tools/notebook.ipynb create mode 100644 translations/kn/2-Regression/1-Tools/solution/Julia/README.md create mode 100644 translations/kn/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb create mode 100644 translations/kn/2-Regression/1-Tools/solution/notebook.ipynb create mode 100644 translations/kn/2-Regression/2-Data/README.md create mode 100644 translations/kn/2-Regression/2-Data/assignment.md create mode 100644 translations/kn/2-Regression/2-Data/notebook.ipynb create mode 100644 translations/kn/2-Regression/2-Data/solution/Julia/README.md create mode 100644 translations/kn/2-Regression/2-Data/solution/R/lesson_2-R.ipynb create mode 100644 translations/kn/2-Regression/2-Data/solution/notebook.ipynb create mode 100644 translations/kn/2-Regression/3-Linear/README.md create mode 100644 translations/kn/2-Regression/3-Linear/assignment.md create mode 100644 translations/kn/2-Regression/3-Linear/notebook.ipynb create mode 100644 translations/kn/2-Regression/3-Linear/solution/Julia/README.md create mode 100644 translations/kn/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb create mode 100644 translations/kn/2-Regression/3-Linear/solution/notebook.ipynb create mode 100644 translations/kn/2-Regression/4-Logistic/README.md create mode 100644 translations/kn/2-Regression/4-Logistic/assignment.md create mode 100644 translations/kn/2-Regression/4-Logistic/notebook.ipynb create mode 100644 translations/kn/2-Regression/4-Logistic/solution/Julia/README.md create mode 100644 translations/kn/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb create mode 100644 translations/kn/2-Regression/4-Logistic/solution/notebook.ipynb create mode 100644 translations/kn/2-Regression/README.md create mode 100644 translations/kn/3-Web-App/1-Web-App/README.md create mode 100644 translations/kn/3-Web-App/1-Web-App/assignment.md create mode 100644 translations/kn/3-Web-App/1-Web-App/notebook.ipynb create mode 100644 translations/kn/3-Web-App/1-Web-App/solution/notebook.ipynb create mode 100644 translations/kn/3-Web-App/README.md create mode 100644 translations/kn/4-Classification/1-Introduction/README.md create mode 100644 translations/kn/4-Classification/1-Introduction/assignment.md create mode 100644 translations/kn/4-Classification/1-Introduction/notebook.ipynb create mode 100644 translations/kn/4-Classification/1-Introduction/solution/Julia/README.md create mode 100644 translations/kn/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb create mode 100644 translations/kn/4-Classification/1-Introduction/solution/notebook.ipynb create mode 100644 translations/kn/4-Classification/2-Classifiers-1/README.md create mode 100644 translations/kn/4-Classification/2-Classifiers-1/assignment.md create mode 100644 translations/kn/4-Classification/2-Classifiers-1/notebook.ipynb create mode 100644 translations/kn/4-Classification/2-Classifiers-1/solution/Julia/README.md create mode 100644 translations/kn/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb create mode 100644 translations/kn/4-Classification/2-Classifiers-1/solution/notebook.ipynb create mode 100644 translations/kn/4-Classification/3-Classifiers-2/README.md create mode 100644 translations/kn/4-Classification/3-Classifiers-2/assignment.md create mode 100644 translations/kn/4-Classification/3-Classifiers-2/notebook.ipynb create mode 100644 translations/kn/4-Classification/3-Classifiers-2/solution/Julia/README.md create mode 100644 translations/kn/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb create mode 100644 translations/kn/4-Classification/3-Classifiers-2/solution/notebook.ipynb create mode 100644 translations/kn/4-Classification/4-Applied/README.md create mode 100644 translations/kn/4-Classification/4-Applied/assignment.md create mode 100644 translations/kn/4-Classification/4-Applied/notebook.ipynb create mode 100644 translations/kn/4-Classification/4-Applied/solution/notebook.ipynb create mode 100644 translations/kn/4-Classification/README.md create mode 100644 translations/kn/5-Clustering/1-Visualize/README.md create mode 100644 translations/kn/5-Clustering/1-Visualize/assignment.md create mode 100644 translations/kn/5-Clustering/1-Visualize/notebook.ipynb create mode 100644 translations/kn/5-Clustering/1-Visualize/solution/Julia/README.md create mode 100644 translations/kn/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb create mode 100644 translations/kn/5-Clustering/1-Visualize/solution/notebook.ipynb create mode 100644 translations/kn/5-Clustering/2-K-Means/README.md create mode 100644 translations/kn/5-Clustering/2-K-Means/assignment.md create mode 100644 translations/kn/5-Clustering/2-K-Means/notebook.ipynb create mode 100644 translations/kn/5-Clustering/2-K-Means/solution/Julia/README.md create mode 100644 translations/kn/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb create mode 100644 translations/kn/5-Clustering/2-K-Means/solution/notebook.ipynb create mode 100644 translations/kn/5-Clustering/2-K-Means/solution/tester.ipynb create mode 100644 translations/kn/5-Clustering/README.md create mode 100644 translations/kn/6-NLP/1-Introduction-to-NLP/README.md create mode 100644 translations/kn/6-NLP/1-Introduction-to-NLP/assignment.md create mode 100644 translations/kn/6-NLP/2-Tasks/README.md create mode 100644 translations/kn/6-NLP/2-Tasks/assignment.md create mode 100644 translations/kn/6-NLP/3-Translation-Sentiment/README.md create mode 100644 translations/kn/6-NLP/3-Translation-Sentiment/assignment.md create mode 100644 translations/kn/6-NLP/3-Translation-Sentiment/solution/Julia/README.md create mode 100644 translations/kn/6-NLP/3-Translation-Sentiment/solution/R/README.md create mode 100644 translations/kn/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb create mode 100644 translations/kn/6-NLP/4-Hotel-Reviews-1/README.md create mode 100644 translations/kn/6-NLP/4-Hotel-Reviews-1/assignment.md create mode 100644 translations/kn/6-NLP/4-Hotel-Reviews-1/notebook.ipynb create mode 100644 translations/kn/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md diff --git a/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ml.png b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ml.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd8c15e1553872603322f407eee945ba4205180 GIT binary patch literal 18205 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 literal 0 HcmV?d00001 diff --git a/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.te.png b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.te.png new file mode 100644 index 0000000000000000000000000000000000000000..db014e6e73014936114c66a0269cc5bfc2a41bb7 GIT binary patch literal 18422 zcma&Obx_pr8#cO2cXxM4f9dW}NsTA zKMyl7!_I!5ed@03y6%m8siBOGL4g5*K(L>yC}=|

ZKuG!*bklx49R1ftyiTtQaX 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 A%>V!Z literal 0 HcmV?d00001 diff --git a/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.kn.png b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.kn.png new file mode 100644 index 0000000000000000000000000000000000000000..e4db5db46bbf64a3ac2ad325b27d17aa65e540e4 GIT binary patch literal 66583 zcmW(+V|XM@7mYK)CKKCsvN1MxCbq4OZQHi(O*Xc<8{4*>jlaC#kDlkLuCDH`>QndJ zbMKu91v!at@VM|`U|`>*Bt@0Lz#u69I{+|WXUr#s#KFM9z@$WlRNS-A-`$ewWjvQ7 z-n+xc>DNA7^{+NMo;IE~(>bx@GWrndg<5fds9={$TEKl&axta-$d0OoTnu$mx3v7& z*wl`&st{*@qZnZX47s2`@wh*BG|_mL$7a^qyNxynEB|{!#=^p7=H=hhP`HhV%> z+((|XlR+Bq+Hd_k9vUi5ta5h_#g)N^tp^k;6IQyTz_}2=MwQk`GD=cWexEkDMr%)d|&= zZg9m)C7OuwZj8k3rE|qvwyZU-T}&Qz5ZyiHdY;l$F3{GfAsEQwZTMBKh3}=Sb;u@m z9VP~oU+Lq|{cN&m((=9zA}Us@nYCu)>0$ZolEO!$f}1c)N=QKAzlo4%W?{J*Jv%Ce zPBQJ2YUpW#2sdNGO`;1}l#AW?)ajx6Qy*w~u-o3|EAYbDq%GU*8TMRvQT?(0j(Hij z5n^p>c(P!-!P@F9?;Ka}U%fPZI#lF!E0+j`VrXq`J;1T}dg+NU=6O}|)0`wDBZFj= z@@XNjOCRr9fA&X&ncv2U9UCtG56@)BHW2=Z)#RS1jdM>b6U4JoqbJJGmNh7$-ZrNr zHTw9orUly;_0H~>f6qqq?_UcRBMxcBFvb5$F9e*nU|Xbb+(58;3T%1tFz@@>v`8O$ z;hH7y_cE6(O@SLDe&kf6W;OJ5H_{n%8N&QY@ce`u12Z8WWL7nFeooKI%IbaTl&5{; zb@zC8b#&3B#h^7o8Do}Y)*w|hqj95NwVxFT2U41VO|*b|MlI$MV><&V#rMwkD7ZA}ZH z`sr)d%F4><@F5sUuR)m6mmB@3IkHb)mC{uUMxP(=(b3V)aLo{(;Q?w zXwH9!GdwcFJMslw@uI%jS=6YgsP%T2s1gQ7O0=Y;^$ssL85{Rzx!)?qigwm*Im7_K zK>XKFH3dKf!ir_sphir!&H4G(XN`H7z6Av;SjhhyL^TVx)$d{F#*G|-<9~kTwCZ;2 z`3u%c^q9Ygi{Akd)lJwa(JbkguA>}f9@;qdrwQjy4jr;J3#5nxO+I76v99=Np(G)~ z0cm=k5&s=`M^kpS28jq1PnZ3lXX?a=SlBofESzO3l}J|jLg@yw{i7Cvl2K{;xy3+P z#fm|VDyRT5M6^Ol96UGlC~0(>kU*mvNc>8;N;n~GvP34X4Fo~2At?95aU9wdX^E!h z%}I+cxK^(l4LgZs`NSrz7^kC27H;k~BiMSa7kyi@3%d``r`V#`->~ZALB2UBoU|((U^C@*7LoknfU7l6C;%pDvO+S<6kKFbn8l)$60!0^ZWYer6v?wneeUYTBP zLu2FM7qlB18sff>^JepTBr+qmc|9>cU2c}V`-@Gm;wRUk%TN>w2M~j(Y_k{ucAc+} zB29{eO0+2e1QbK;(kRJh>+68J})t?VM!tL8O^K#}6+P|Sr{)Bl46|T+%mIbyM4S*TTsv}sv2HLKN zRu(e)>2QRUE9)c@FDm6=pIHZgq47P_sr8)2rs~yWvDB$`uprZy!?xwO;%Kf9D z{!Eas4gXGW&*8-cv$}Gmy>fTCblQt*kCnb>=y8}~o}QgutX8F1%UQlK3w^R!qaAm9 z#}^a}R=~``(YIbBd&vbIPOn%XNFt4u!VIY6=+z2BnVZq+dSA`LYeDmmAdL)xP((+8 z0S}nK!VF^3jfxs`Lr;7ccx~xjuu|95(J(PF3GRi-A&8w=8^ucbCC2zpAY5_*P*p#7 zSNn%dLq0hZzIH~ROn;R=`YL+VR$tBVH@7%+ZL(01C&IioOmTiDU%D)&5e=Rkw|I)( zi^7IJr`$yo@35VaHe%QA;OZw(Cu`8@BeGg|#9y=jet@b-d@4ljIYfpdGNPh~79;-uBzesi3ImPs+KAb;ukTr*Mu zg!}8_W#3Npc}~`>XE_0sIr~HOpCs7EZ9YdlQBj;Um{l59JQu}2zv+6&o+0YiVR9r+ z_+~W;!4NOpb2W~bDJ7W-6RZ{gbf+;eO?8Yq3b7?n&BHGoI~j?u7xZ6w^$2>r~$(2yo498qpHfqREDLBwhTF z^|Zx{;CI|3S{Fr)(;kN?=w5aSr-va~PFgSNGjlIQz*s<;sAQ#*Gr`Fq$-dxZYtdcQ z?#AokpfwhSM2Njo$raILkZ4~px~!xLeF7X{$Y{u52vxGOlxZz|tp@tz;o@l4YaI$C znSi34Zz3#BN%|dJ3=I`mrnQhj#9;Q3RB8($nqqtvIeN&5dJV$q0{8P{@~?^wi;V<* zfCfav+X}Ot2z>wxRHD!1^5h-!Yv;s^fhaSe0M3G(q1*RL7G6_8&3DT=H!QJ-N#lD% z2)6Y{_=z`_fI6u#IrwkNPA)$S~*<$W*} zD-=r#Vuqt#&mNnd-WkFiOfW)%7B=nRER^qm^J+cWNY8#wRkJ`Xl9EC#D%mx)I=_21 zkJaZq$-3duHQJttQ)rYNobk&&nGNHL@W!@zJTW>qnb$v*Yti0JE>yks>VNz-K$LjA zI@(R4%bHE+b0kda+*w(11Jlsrn~XVolFSw{L9N>-Z4Vb=7k9xWqYzBPQUsf^9!V8Y zkN2)hkfKiHm)8-_&Tvz)5=2{YmFUGG;0|q~$adu&I+$X8$fo2`(0P1-kY+Lk`5PT1 z_`~w%Ww!|f!MaSoY88k={};`3*$2P)PV?_=KQNqPCfMy~3(v^pE1Bd`OIg&;?Qb3g z*XGf~yfn~jYV3})W0O%i6~l-0odh6eBDTRXVd8V+S^w8i&}8XYVjdY!X}LF~3Cb$t z;SrJ_M8~ALV~oxRFNbGO$3&A%>h}E2JF9$IAXNRXm-Y1F@YB)Dh(a=QY@WvD6y)Nh z9B)8xVbGJ0xfJ=882=i zY}4=dob|!x-45L?MOn`55hQ$#xlrX2Y_avuw8=5Ux+ZkXxcdv+h@;acl_3Hs>0L9$ zZwk6wSYX5_JB$oy(?BWq@5ATjABL{Pc#XzTgXdxqquXw?nu;Ln>!;mSjGlHRkZKMj=Ws zMzgjnO1mZJ+$aJ*pe!@ zUK&)B%-YVFYJ&DphQE-)Jdi;L#*y)~`|bS3!N&Uk$bS(S3nS3?{vOfQ~h5o+G5`@9@kLZaK-p_O`RT$9}lEvfRnS>Z&tnP$Cn`4Q^; zeq{J)UbXj;i_hI??W+B-#`*H$nWve%Yr0UFf6fpspwgq(UFX@SsZUfvO@YQj5cA99 zhn>NKW20+d`lJRgL*hk~E?YY^|3zRIdenNkn%_5U-~cTdKe>TkxPJq{ABMBYZBdLP0pQ_c?cFkF zrBbqVD-O4Q#=IjszKuEWBJCO)S~XRJWAwx5U_lAgXCjLN=Z;xM1$THnbI#_Rvm3v# z6<9`pL_PoQK`M)s{2sGh++g5_DccTWJ`o$kd|c-nycIls0X>aoeT<@g;loS!iiv5q z+WW`V-MfU{5gi~}z#}=f%z1O_*N5G@IOUtGPbuq7E$-O@+AGi2SkG35-Yvn{OV!Y+ z$S)0@cB-=7@qaHi&b20I96g=HHDW?(RQ9fen%z=Od%JN)r zyJSSrdQosb{d!*!q+~KuyQkA9U%FRYvNJYrAD*tXx&c}(P)ZWMC4>nr`b0w5VBPs= zJqBE?Um-}J+BN9$BHI>eAFplCt^AGHobpg!d~+L+-#oflU>${AV-b|u5frueE^f&1 z$Zs!k%7%5eNV0Z&35#L-v0+xIcRl)oIYBu;7Qx!Bia6F2INa#?M1XIC%HShDLP1QOsy)8G3e+F?GCeH8%Tlp1Y_n_GP4&=+Ot9vlE-bFx&^e#tCLK);`QAR}8o@i;Z6p43Y-~IuS z^|S5~^afm1k<>Z;)#50UVFg&EAFI{`aGG>6oJw0B_H`63*zoPb{lz+|X>O3~fXe5j z*P`3mg&9%zB1(}3P(Jr}LU|KdN%%vnXs>u3@^iW(V-|c9_@utDw)uH3 z%d5Me8SE3^=>_yMLJx#;*0kABejDda22|ibrP6MB`NYmzBeYNnXCrM>q{O-wqnr;( zh0k#KUVDTRg5$!6k(soo!&C4U@ZeH9TRF{AnshoB=;*Y=b;^;TLhw%JczvSPEH<6L zxHm156%p@kcYC7iu0ob>+=yJegF&dCE?$3lW+D6Sp%z9qe9v#m0%MV@Y`g$C>I;C! znTInADkpS7115Ny1*X(IO!~;N5cjwkP)$IBzuX;G|M0WNvmO}i`Ag2Uq2k6>-!t8~ zOWG}pp-gfZ|8e?8ogr~^xz2Lim1vQrR+qP&%u7iTXRf~8n_W|EmJQws`#OoqE}7LF z$$-@y#5c6_A{3k(CJbK1Y&8=?tJiwxoP-?L0fAN%d~1y+9Aw?lF?#4w4n>bSnUD@) zC2Y%=Yd8o`&&8!Kij+Jzp6{zu`&UhknMn!}p4I@Pi|+Uh+tP?Tj%o-j0wopoKtjJm z=s`NC)g-}Wnmmcmo|TdXt?`_C*DX1BBM=-DM2Z! zpaokKvnSD6hF3HV+;QjK8OLkMKTyb8X@RxakWbQuvxsWWAWwkU9jQ0xGziEHDnfB= zOw2%lIX+wybB`G#E)axs{)HG}Dl5)1WgL}12vH(R!-huf_MC<|o4KX9jh)$tNQ)`p z;pGZV%3PaXMmMUFUcyRLoMi`goZxz&0G;&KYM9Pn8u9ryIERL6fZM7a*t$Kzor?t1 z%GiHo%TRZe!|lu`3d2&7ge`j37+6Fv7RGYgM3JlO4`vg>5|sU`bc}2xKSR+CIcqT; zO7qe3NTk&(2#i(|Wqm`@UhGnvbK@?Zq!XIY<(Y8EjtQ6sL5|b;MqwGZ+IWs0abvvP zAj907D3VK0!a6j6;xcX94Q^Cbal(0JT)!T2;P;Hs#Eu^Bze2iN?l0xdh&BcPX99|J zuAz9Kt9XvWrSV)v|8@7~9-ZPF3O{G!rk`fB>6FiMpr$!m;1~>+ahJ+Lt_0bX>36G{ zk_38+E`c&adk6`%k$GgSU4RBmf&DUJ*L%yBV(BjR5ddcq;hO zf_f}zj>52~S4!nsuV!cr00txG^e~jss^yI6jhtE>9ei-54jjFJmuYH)eorK?o~TxP zNgGQ~6eLSd<=}=Lk4s$ow2}g%IF<&zZ+bJqM19wb!x@fI^8JT~B(uDF0jePHP2iZP z&MWsa{|U-PnHoyF zMXPn|7RBTY=3SHDg9+vSC?sk=)J;EW2g%EmEuoWgDu;dFJVS9I8}ZK(;?Y#|4j#bo zPi?oHU3TPbwq0tI@}fCnATXw%jXXo&E4-`6Si3h-3=2~P3(NPTK8p7I1%pG#ck(v7 z`fb&8&Jzj?=XaW6+?B1P=yT(j9K{SwA)s&s| z$%Aj|XANK`t05O9iAHWW9e)aExiId-Bx=j8sQu+*+Z557KV1NSjqJ( zLXVela6K%pmg#)wjt~SBWg#s~ww`O(2Bb-cVQgD7;gDZZ qde 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 literal 0 HcmV?d00001 diff --git a/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ml.png b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ml.png new file mode 100644 index 0000000000000000000000000000000000000000..e4db5db46bbf64a3ac2ad325b27d17aa65e540e4 GIT binary patch literal 66583 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 qde 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 literal 0 HcmV?d00001 diff --git a/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.te.png b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.te.png new file mode 100644 index 0000000000000000000000000000000000000000..e4db5db46bbf64a3ac2ad325b27d17aa65e540e4 GIT binary patch literal 66583 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 qde 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 literal 0 HcmV?d00001 diff --git a/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.kn.png b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.kn.png new file mode 100644 index 0000000000000000000000000000000000000000..2d6f3eaf3883538e1c75fef72c2a9a8eb04af8bc GIT binary patch literal 131787 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

`lw^a=`qVF$s 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 #TQF5TJd5teH`PL2$dgUo^HP4uTK-W15q* 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 Vbo5?EJOyLsmhGEkH|{?1zW^uwVOanG literal 0 HcmV?d00001 diff --git a/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ml.png b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ml.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c861111094160df427bd8d4948f111361891f3 GIT binary patch literal 135308 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

u!GvQ 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

RJ&kwjg|1XVZ|Ff_DXJ5S!Q~wRN&%5phwZ=+= T@qPvJofQ+O{SZBV&M*H9^0E%q literal 0 HcmV?d00001 diff --git a/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.kn.png b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.kn.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f831a762a4c2cfdc49a0857fa901992a7cb917 GIT binary patch literal 14725 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 XIv2gFqJYh(#8G;oCSNRP=J&q +# ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ + +## [ಪೂರ್ವ-ಲೇಕ್ಚರ್ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ - ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ - ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ") + +> 🎥 ಈ ಪಾಠವನ್ನು ಕೆಲಸಮಾಡುವ ಸಣ್ಣ ವೀಡಿಯೊಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ಆರಂಭಿಕರಿಗಾಗಿ ಶ್ರೇಷ್ಟ ಯಂತ್ರ ಅಧ್ಯಯನದ ಈ ಕೋರ್ಸ್‌ಗೆ ಸ್ವಾಗತ! ನೀವು ಈ ವಿಷಯದಲ್ಲಿ ಸಂಪೂರ್ಣ ಹೊಸವರಾಗಿದ್ದೀರಾ ಅಥವಾ ಯಂತ್ರ ಅಧ್ಯಯನದ ಅನುಭವ ಹೊಂದಿರುವವರಾಗಿದ್ದೀರಾ, ನಾವು ನಿಮ್ಮನ್ನು ಸೇರಿಕೊಳ್ಳಲು ಸಂತೋಷಪಡುತ್ತೇವೆ! ನಿಮ್ಮ ಯಂತ್ರ ಅಧ್ಯಯನ ಅಧ್ಯಯನಕ್ಕೆ ಸ್ನೇಹಪೂರ್ಣ ಪ್ರಾರಂಭಿಕ ಸ್ಥಳವನ್ನು ಸೃಷ್ಟಿಸಲು ನಾವು ಬಯಸುತ್ತೇವೆ ಮತ್ತು ನಿಮ್ಮ [ಪ್ರತಿಕ್ರಿಯೆ](https://github.com/microsoft/ML-For-Beginners/discussions) ಅನ್ನು ಮೌಲ್ಯಮಾಪನ, ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಲು ಮತ್ತು ಸೇರಿಸಲು ನಾವು ಇಚ್ಛಿಸುತ್ತೇವೆ. + +[![ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೊ: MIT ನ ಜಾನ್ ಗುಟ್ಟಾಗ್ ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಪರಿಚಯಿಸುತ್ತಾರೆ + +--- +## ಯಂತ್ರ ಅಧ್ಯಯನದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುವುದು + +ಈ ಪಠ್ಯಕ್ರಮವನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಸ್ಥಳೀಯವಾಗಿ ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ಚಾಲನೆ ಮಾಡಲು ಸಿದ್ಧಪಡಿಸಬೇಕು. + +- **ಈ ವೀಡಿಯೊಗಳೊಂದಿಗೆ ನಿಮ್ಮ ಯಂತ್ರವನ್ನು ಸಂರಚಿಸಿ**. ನಿಮ್ಮ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ [Python ಅನ್ನು ಹೇಗೆ ಸ್ಥಾಪಿಸುವುದು](https://youtu.be/CXZYvNRIAKM) ಮತ್ತು ಅಭಿವೃದ್ಧಿಗಾಗಿ [ಟೆಕ್ಸ್ಟ್ ಎಡಿಟರ್ ಅನ್ನು ಹೇಗೆ ಸೆಟ್‌ಅಪ್ ಮಾಡುವುದು](https://youtu.be/EU8eayHWoZg) ಎಂಬುದನ್ನು ತಿಳಿಯಲು ಕೆಳಗಿನ ಲಿಂಕ್‌ಗಳನ್ನು ಬಳಸಿ. +- **Python ಕಲಿಯಿರಿ**. ಈ ಕೋರ್ಸ್‌ನಲ್ಲಿ ನಾವು ಬಳಸುವ, ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳಿಗೆ ಉಪಯುಕ್ತವಾದ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆ [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) ಬಗ್ಗೆ ಮೂಲಭೂತ ತಿಳಿವಳಿಕೆ ಹೊಂದಿರುವುದು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. +- **Node.js ಮತ್ತು JavaScript ಕಲಿಯಿರಿ**. ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ ನಾವು ಈ ಕೋರ್ಸ್‌ನಲ್ಲಿ ಕೆಲವು ಬಾರಿ JavaScript ಅನ್ನು ಬಳಸುತ್ತೇವೆ, ಆದ್ದರಿಂದ ನೀವು [node](https://nodejs.org) ಮತ್ತು [npm](https://www.npmjs.com/) ಅನ್ನು ಸ್ಥಾಪಿಸಿರಬೇಕು, ಜೊತೆಗೆ Python ಮತ್ತು JavaScript ಅಭಿವೃದ್ಧಿಗಾಗಿ [Visual Studio Code](https://code.visualstudio.com/) ಲಭ್ಯವಿರಬೇಕು. +- **GitHub ಖಾತೆಯನ್ನು ರಚಿಸಿ**. ನೀವು ಇಲ್ಲಿ [GitHub](https://github.com) ನಲ್ಲಿ ನಮ್ಮನ್ನು ಕಂಡಿದ್ದೀರಿ, ಆದ್ದರಿಂದ ನೀವು ಈಗಾಗಲೇ ಖಾತೆ ಹೊಂದಿರಬಹುದು, ಇಲ್ಲದಿದ್ದರೆ ಒಂದು ಖಾತೆ ರಚಿಸಿ ಮತ್ತು ಈ ಪಠ್ಯಕ್ರಮವನ್ನು ನಿಮ್ಮದೇ ಉಪಯೋಗಕ್ಕಾಗಿ ಫೋರ್ಕ್ ಮಾಡಿ. (ನಮಗೆ ಸ್ಟಾರ್ ನೀಡಲು ಮುಕ್ತವಾಗಿರಿ 😊) +- **Scikit-learn ಅನ್ನು ಅನ್ವೇಷಿಸಿ**. ಈ ಪಾಠಗಳಲ್ಲಿ ನಾವು ಉಲ್ಲೇಖಿಸುವ ML ಗ್ರಂಥಾಲಯಗಳ ಸಮೂಹವಾದ [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) ಅನ್ನು ಪರಿಚಯಿಸಿ. + +--- +## ಯಂತ್ರ ಅಧ್ಯಯನ ಎಂದರೆ ಏನು? + +'ಯಂತ್ರ ಅಧ್ಯಯನ' ಎಂಬ ಪದವು ಇಂದಿನ ದಿನದ ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಮತ್ತು ಹೆಚ್ಚಾಗಿ ಬಳಸುವ ಪದಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. ನೀವು ತಂತ್ರಜ್ಞಾನದಲ್ಲಿ ಸ್ವಲ್ಪ ಪರಿಚಯವಿದ್ದರೆ, ನೀವು ಕನಿಷ್ಠ ಒಂದು ಬಾರಿ ಈ ಪದವನ್ನು ಕೇಳಿರಬಹುದು, ನೀವು ಯಾವ ಕ್ಷೇತ್ರದಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತೀರೋ ಅದಕ್ಕೆ ಸಂಬಂಧವಿಲ್ಲದೆ. ಆದರೆ ಯಂತ್ರ ಅಧ್ಯಯನದ ಕಾರ್ಯವಿಧಾನ ಬಹುತೇಕ ಜನರಿಗೆ ರಹಸ್ಯವಾಗಿದೆ. ಯಂತ್ರ ಅಧ್ಯಯನ ಆರಂಭಿಕರಿಗೆ, ವಿಷಯವು ಕೆಲವೊಮ್ಮೆ ಭಾರೀ ಅನಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, ಯಂತ್ರ ಅಧ್ಯಯನವೇನು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳ ಮೂಲಕ ಹಂತ ಹಂತವಾಗಿ ಕಲಿಯುವುದು ಮುಖ್ಯ. + +--- +## ಹೈಪ್ ವಕ್ರ + +![ml hype curve](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.kn.png) + +> ಗೂಗಲ್ ಟ್ರೆಂಡ್ಸ್ 'ಯಂತ್ರ ಅಧ್ಯಯನ' ಪದದ ಇತ್ತೀಚಿನ 'ಹೈಪ್ ವಕ್ರ' ಅನ್ನು ತೋರಿಸುತ್ತದೆ + +--- +## ಒಂದು ರಹಸ್ಯಮಯ ಬ್ರಹ್ಮಾಂಡ + +ನಾವು ರಹಸ್ಯಗಳಿಂದ ತುಂಬಿದ ಒಂದು ಬ್ರಹ್ಮಾಂಡದಲ್ಲಿ ವಾಸಿಸುತ್ತೇವೆ. ಸ್ಟೀಫನ್ ಹಾಕಿಂಗ್, ಆಲ್ಬರ್ಟ್ ಐನ್ಸ್ಟೈನ್ ಮತ್ತು ಇನ್ನಷ್ಟು ಮಹಾನ್ ವಿಜ್ಞಾನಿಗಳು ನಮ್ಮ ಸುತ್ತಲೂ ಇರುವ ಜಗತ್ತಿನ ರಹಸ್ಯಗಳನ್ನು ಅನಾವರಣಗೊಳಿಸುವ ಅರ್ಥಪೂರ್ಣ ಮಾಹಿತಿಯನ್ನು ಹುಡುಕಲು ತಮ್ಮ ಜೀವನವನ್ನು ಅರ್ಪಿಸಿದ್ದಾರೆ. ಇದು ಮಾನವ ಕಲಿಕೆಯ ಸ್ಥಿತಿ: ಮಾನವ ಮಗು ಹೊಸ ವಿಷಯಗಳನ್ನು ಕಲಿಯುತ್ತದೆ ಮತ್ತು ವರ್ಷದಿಂದ ವರ್ಷಕ್ಕೆ ತನ್ನ ಜಗತ್ತಿನ ರಚನೆಯನ್ನು ಅನಾವರಣಗೊಳಿಸುತ್ತದೆ, ಅವರು ವಯಸ್ಕರಾಗುವಂತೆ. + +--- +## ಮಗುವಿನ ಮೆದುಳು + +ಮಗುವಿನ ಮೆದುಳು ಮತ್ತು ಇಂದ್ರಿಯಗಳು ತನ್ನ ಸುತ್ತಲೂ ಇರುವ ವಾಸ್ತವಗಳನ್ನು ಗ್ರಹಿಸಿ, ಜೀವನದ ಗುಪ್ತ ಮಾದರಿಗಳನ್ನು ಕ್ರಮೇಣ ಕಲಿಯುತ್ತವೆ, ಇದು ಮಗುವಿಗೆ ಕಲಿತ ಮಾದರಿಗಳನ್ನು ಗುರುತಿಸಲು ತಾರ್ಕಿಕ ನಿಯಮಗಳನ್ನು ರೂಪಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಮಾನವ ಮೆದುಳಿನ ಕಲಿಕೆಯ ಪ್ರಕ್ರಿಯೆ ಮಾನವರನ್ನು ಈ ಜಗತ್ತಿನ ಅತ್ಯಂತ ಸುಕ್ಷ್ಮ ಜೀವಿಯಾಗಿ ಮಾಡುತ್ತದೆ. ಗುಪ್ತ ಮಾದರಿಗಳನ್ನು ಅನ್ವೇಷಿಸಿ ನಿರಂತರವಾಗಿ ಕಲಿಯುವುದು ಮತ್ತು ಆ ಮಾದರಿಗಳ ಮೇಲೆ ನವೀನತೆ ಮಾಡುವುದು ನಮ್ಮ ಜೀವನಕಾಲದಲ್ಲಿ ನಮ್ಮನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಈ ಕಲಿಕೆಯ ಸಾಮರ್ಥ್ಯ ಮತ್ತು ಅಭಿವೃದ್ಧಿ ಸಾಮರ್ಥ್ಯವನ್ನು [ಮೆದುಳು ಪ್ಲಾಸ್ಟಿಸಿಟಿ](https://www.simplypsychology.org/brain-plasticity.html) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಮೇಲ್ಮೈಯಲ್ಲಿ, ನಾವು ಮಾನವ ಮೆದುಳಿನ ಕಲಿಕೆಯ ಪ್ರಕ್ರಿಯೆ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನದ ತತ್ವಗಳ ನಡುವೆ ಕೆಲವು ಪ್ರೇರಣಾತ್ಮಕ ಸಾದೃಶ್ಯಗಳನ್ನು ಬಿಡಬಹುದು. + +--- +## ಮಾನವ ಮೆದುಳು + +[ಮಾನವ ಮೆದುಳು](https://www.livescience.com/29365-human-brain.html) ವಾಸ್ತವ ಜಗತ್ತಿನಿಂದ ವಸ್ತುಗಳನ್ನು ಗ್ರಹಿಸಿ, ಗ್ರಹಿಸಿದ ಮಾಹಿತಿಯನ್ನು ಪ್ರಕ್ರಿಯೆ ಮಾಡಿ, ತಾರ್ಕಿಕ ನಿರ್ಧಾರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಪರಿಸ್ಥಿತಿಗಳ ಆಧಾರದ ಮೇಲೆ ಕೆಲವು ಕ್ರಿಯೆಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದನ್ನು ನಾವು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ವರ್ತಿಸುವುದಾಗಿ ಕರೆಯುತ್ತೇವೆ. ನಾವು ಯಂತ್ರಕ್ಕೆ ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ವರ್ತಿಸುವ ಪ್ರಕ್ರಿಯೆಯ ನಕಲು ಪ್ರೋಗ್ರಾಮ್ ಮಾಡಿದಾಗ, ಅದನ್ನು ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ (AI) ಎಂದು ಕರೆಯುತ್ತಾರೆ. + +--- +## ಕೆಲವು ಪದಗಳು + +ಪದಗಳು ಗೊಂದಲ ಉಂಟುಮಾಡಬಹುದು, ಆದರೆ ಯಂತ್ರ ಅಧ್ಯಯನ (ML) ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆಯ ಪ್ರಮುಖ ಉಪವರ್ಗವಾಗಿದೆ. **ML ವಿಶೇಷ ಆಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಗ್ರಹಿಸಿದ ಡೇಟಾದಿಂದ ಅರ್ಥಪೂರ್ಣ ಮಾಹಿತಿಯನ್ನು ಅನಾವರಣಗೊಳಿಸುವುದು ಮತ್ತು ತಾರ್ಕಿಕ ನಿರ್ಧಾರ ಪ್ರಕ್ರಿಯೆಯನ್ನು ದೃಢೀಕರಿಸಲು ಗುಪ್ತ ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದರಲ್ಲಿ ತೊಡಗಿಸಿಕೊಂಡಿದೆ**. + +--- +## AI, ML, ಡೀಪ್ ಲರ್ನಿಂಗ್ + +![AI, ML, deep learning, data science](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.kn.png) + +> AI, ML, ಡೀಪ್ ಲರ್ನಿಂಗ್ ಮತ್ತು ಡೇಟಾ ಸೈನ್ಸ್ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ತೋರಿಸುವ ಚಿತ್ರ. [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್, [ಈ ಚಿತ್ರ](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) ಪ್ರೇರಿತ + +--- +## ಆವೃತ್ತಿ ಮಾಡಬೇಕಾದ ತತ್ವಗಳು + +ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ, ನಾವು ಆರಂಭಿಕರು ತಿಳಿದುಕೊಳ್ಳಬೇಕಾದ ಯಂತ್ರ ಅಧ್ಯಯನದ ಮೂಲ ತತ್ವಗಳನ್ನು ಮಾತ್ರ ಆವರಿಸುವೆವು. ನಾವು 'ಶ್ರೇಷ್ಟ ಯಂತ್ರ ಅಧ್ಯಯನ' ಎಂದು ಕರೆಯುವ Scikit-learn ಅನ್ನು ಮುಖ್ಯವಾಗಿ ಬಳಸಿಕೊಂಡು ಮೂಲಭೂತಗಳನ್ನು ಕಲಿಸುವ ಉತ್ತಮ ಗ್ರಂಥಾಲಯವನ್ನು ಬಳಸುತ್ತೇವೆ. ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ ಅಥವಾ ಡೀಪ್ ಲರ್ನಿಂಗ್‌ನ ವ್ಯಾಪಕ ತತ್ವಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು, ಯಂತ್ರ ಅಧ್ಯಯನದ ಬಲವಾದ ಮೂಲಭೂತ ಜ್ಞಾನ ಅಗತ್ಯವಿದೆ, ಅದನ್ನು ನಾವು ಇಲ್ಲಿ ನೀಡಲು ಇಚ್ಛಿಸುತ್ತೇವೆ. + +--- +## ಈ ಕೋರ್ಸ್‌ನಲ್ಲಿ ನೀವು ಕಲಿಯುವಿರಿ: + +- ಯಂತ್ರ ಅಧ್ಯಯನದ ಮೂಲ ತತ್ವಗಳು +- ML ಇತಿಹಾಸ +- ML ಮತ್ತು ನ್ಯಾಯತಂತ್ರ +- ರಿಗ್ರೆಶನ್ ML ತಂತ್ರಗಳು +- ವರ್ಗೀಕರಣ ML ತಂತ್ರಗಳು +- ಕ್ಲಸ್ಟರಿಂಗ್ ML ತಂತ್ರಗಳು +- ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ ML ತಂತ್ರಗಳು +- ಕಾಲ ಸರಣಿ ಭವಿಷ್ಯವಾಣಿ ML ತಂತ್ರಗಳು +- ಬಲವರ್ಧಿತ ಕಲಿಕೆ +- ML ನ ನೈಜ ಜಗತ್ತಿನ ಅನ್ವಯಿಕೆಗಳು + +--- +## ನಾವು ಆವರಿಸುವುದಿಲ್ಲ + +- ಡೀಪ್ ಲರ್ನಿಂಗ್ +- ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು +- AI + +ಉತ್ತಮ ಕಲಿಕೆಯ ಅನುಭವಕ್ಕಾಗಿ, ನಾವು ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳ ಸಂಕೀರ್ಣತೆಗಳನ್ನು, 'ಡೀಪ್ ಲರ್ನಿಂಗ್' - ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಬಳಸಿ ಬಹುಮಟ್ಟದ ಮಾದರಿ ನಿರ್ಮಾಣ - ಮತ್ತು AI ಅನ್ನು ಬೇರೆ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ ಚರ್ಚಿಸುವುದರಿಂದ ತಪ್ಪಿಸುವೆವು. ಈ ದೊಡ್ಡ ಕ್ಷೇತ್ರದ ಆಂಗ್ಲಭಾಗವನ್ನು ಗಮನಿಸುವ ಡೇಟಾ ಸೈನ್ಸ್ ಪಠ್ಯಕ್ರಮವನ್ನು ಮುಂದಿನ ದಿನಗಳಲ್ಲಿ ನೀಡಲಿದ್ದೇವೆ. + +--- +## ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಯಾಕೆ ಅಧ್ಯಯನ ಮಾಡಬೇಕು? + +ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ವ್ಯವಸ್ಥೆಗಳ ದೃಷ್ಟಿಕೋನದಿಂದ, ಡೇಟಾದಿಂದ ಗುಪ್ತ ಮಾದರಿಗಳನ್ನು ಕಲಿಯುವ ಸ್ವಯಂಚಾಲಿತ ವ್ಯವಸ್ಥೆಗಳ ಸೃಷ್ಟಿಯಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ, ಇದು ಬುದ್ಧಿವಂತ ನಿರ್ಧಾರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. + +ಈ ಪ್ರೇರಣೆ ಮಾನವ ಮೆದುಳು ಹೊರಗಿನ ಜಗತ್ತಿನಿಂದ ಗ್ರಹಿಸುವ ಡೇಟಾದ ಆಧಾರದ ಮೇಲೆ ಕೆಲವು ವಿಷಯಗಳನ್ನು ಕಲಿಯುವ ರೀತಿಯಿಂದ ಸಡಿಲವಾಗಿ ಪ್ರೇರಿತವಾಗಿದೆ. + +✅ ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ, ಒಂದು ವ್ಯವಹಾರವು ಯಂತ್ರ ಅಧ್ಯಯನ ತಂತ್ರಗಳನ್ನು ಬಳಸಲು ಯಾಕೆ ಪ್ರಯತ್ನಿಸಬಹುದು, ಹಾರ್ಡ್-ಕೋಡ್ ಮಾಡಿದ ನಿಯಮಾಧಾರಿತ ಎಂಜಿನ್ ಸೃಷ್ಟಿಸುವ ಬದಲು. + +--- +## ಯಂತ್ರ ಅಧ್ಯಯನದ ಅನ್ವಯಿಕೆಗಳು + +ಯಂತ್ರ ಅಧ್ಯಯನದ ಅನ್ವಯಿಕೆಗಳು ಈಗ ಎಲ್ಲೆಡೆ ಇದ್ದು, ನಮ್ಮ ಸಮಾಜಗಳಲ್ಲಿ ಹರಡುತ್ತಿರುವ ಡೇಟಾ ಹಾಗೆಯೇ ಎಲ್ಲೆಡೆ ಇದ್ದು, ನಮ್ಮ ಸ್ಮಾರ್ಟ್ ಫೋನ್‌ಗಳು, ಸಂಪರ್ಕಿತ ಸಾಧನಗಳು ಮತ್ತು ಇತರ ವ್ಯವಸ್ಥೆಗಳ ಮೂಲಕ ಉತ್ಪಾದಿತವಾಗಿವೆ. ಅತ್ಯಾಧುನಿಕ ಯಂತ್ರ ಅಧ್ಯಯನ ಆಲ್ಗಾರಿದಮ್‌ಗಳ ಅಪಾರ ಸಾಮರ್ಥ್ಯವನ್ನು ಪರಿಗಣಿಸಿ, ಸಂಶೋಧಕರು ಬಹುಮಟ್ಟದ ಮತ್ತು ಬಹುಶಾಖಾ ನೈಜ ಜೀವನದ ಸಮಸ್ಯೆಗಳನ್ನು ಉತ್ತಮ ಫಲಿತಾಂಶಗಳೊಂದಿಗೆ ಪರಿಹರಿಸಲು ಅವರ ಸಾಮರ್ಥ್ಯವನ್ನು ಅನ್ವೇಷಿಸುತ್ತಿದ್ದಾರೆ. + +--- +## ಅನ್ವಯಿಸಿದ ML ಉದಾಹರಣೆಗಳು + +**ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಹಲವಾರು ರೀತಿಯಲ್ಲಿ ಬಳಸಬಹುದು**: + +- ರೋಗಿಯ ವೈದ್ಯಕೀಯ ಇತಿಹಾಸ ಅಥವಾ ವರದಿಗಳಿಂದ ರೋಗ ಸಂಭವನೀಯತೆಯನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು. +- ಹವಾಮಾನ ಡೇಟಾವನ್ನು ಉಪಯೋಗಿಸಿ ಹವಾಮಾನ ಘಟನೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು. +- ಪಠ್ಯದ ಭಾವನೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು. +- ಪ್ರಚಾರವನ್ನು ತಡೆಯಲು ನಕಲಿ ಸುದ್ದಿಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು. + +ಹಣಕಾಸು, ಆರ್ಥಿಕಶಾಸ್ತ್ರ, ಭೂವಿಜ್ಞಾನ, ಬಾಹ್ಯಾಕಾಶ ಅನ್ವೇಷಣೆ, ಜೈವ ವೈದ್ಯಕೀಯ ಎಂಜಿನಿಯರಿಂಗ್, ಜ್ಞಾನಶಾಸ್ತ್ರ ಮತ್ತು ಮಾನವಶಾಸ್ತ್ರ ಕ್ಷೇತ್ರಗಳಲ್ಲಿಯೂ ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ತಮ್ಮ ಕ್ಷೇತ್ರದ ಕಠಿಣ, ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಭಾರೀ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಅಳವಡಿಸಿಕೊಂಡಿವೆ. + +--- +## ಸಮಾರೋಪ + +ಯಂತ್ರ ಅಧ್ಯಯನವು ನೈಜ ಜಗತ್ತಿನ ಅಥವಾ ಉತ್ಪಾದಿತ ಡೇಟಾದಿಂದ ಅರ್ಥಪೂರ್ಣ ಒಳನೋಟಗಳನ್ನು ಕಂಡುಹಿಡಿದು ಮಾದರಿಗಳನ್ನು ಅನ್ವೇಷಿಸುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸುತ್ತದೆ. ಇದು ವ್ಯವಹಾರ, ಆರೋಗ್ಯ ಮತ್ತು ಹಣಕಾಸು ಅನ್ವಯಿಕೆಗಳಲ್ಲಿ ಅತ್ಯಂತ ಮೌಲ್ಯಯುತವಾಗಿದೆ ಎಂದು ತೋರಿಸಿದೆ. + +ಭವಿಷ್ಯದಲ್ಲಿ, ಯಂತ್ರ ಅಧ್ಯಯನದ ಮೂಲಭೂತಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಯಾವುದೇ ಕ್ಷೇತ್ರದ ಜನರಿಗೆ ಅಗತ್ಯವಾಗಲಿದೆ, ಅದರ ವ್ಯಾಪಕ ಸ್ವೀಕಾರದಿಂದ. + +--- +# 🚀 ಸವಾಲು + +ಕಾಗದದ ಮೇಲೆ ಅಥವಾ [Excalidraw](https://excalidraw.com/) ಎಂಬ ಆನ್ಲೈನ್ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಿ, AI, ML, ಡೀಪ್ ಲರ್ನಿಂಗ್ ಮತ್ತು ಡೇಟಾ ಸೈನ್ಸ್ ನಡುವಿನ ವ್ಯತ್ಯಾಸಗಳ ನಿಮ್ಮ ಅರ್ಥವನ್ನು ಚಿತ್ರಿಸಿ. ಈ ತಂತ್ರಜ್ಞಾನಗಳು ಪರಿಹರಿಸಲು ಉತ್ತಮವಾದ ಸಮಸ್ಯೆಗಳ ಕೆಲವು ಕಲ್ಪನೆಗಳನ್ನು ಸೇರಿಸಿ. + +# [ಪೋಸ್ಟ್-ಲೇಕ್ಚರ್ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +--- +# ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಮೇಘದಲ್ಲಿ ML ಆಲ್ಗಾರಿದಮ್‌ಗಳೊಂದಿಗೆ ನೀವು ಹೇಗೆ ಕೆಲಸ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ತಿಳಿಯಲು, ಈ [ಅಧ್ಯಯನ ಮಾರ್ಗವನ್ನು](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) ಅನುಸರಿಸಿ. + +ML ಮೂಲಭೂತಗಳ ಬಗ್ಗೆ [ಅಧ್ಯಯನ ಮಾರ್ಗವನ್ನು](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) ತೆಗೆದುಕೊಳ್ಳಿ. + +--- +# ನಿಯೋಜನೆ + +[ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಚಾಲನೆ ಮಾಡಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/1-intro-to-ML/assignment.md b/translations/kn/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 000000000..280414794 --- /dev/null +++ b/translations/kn/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,25 @@ + +# ಎದ್ದು ಚಾಲನೆ ಮಾಡಿಕೊಳ್ಳಿ + +## ಸೂಚನೆಗಳು + +ಈ ಅಗ್ರೇಡ್ ಮಾಡದ ಕಾರ್ಯದಲ್ಲಿ, ನೀವು ಪೈಥಾನ್‌ನಲ್ಲಿ ನಿಪುಣರಾಗಬೇಕು ಮತ್ತು ನಿಮ್ಮ ಪರಿಸರವನ್ನು ಚಾಲನೆಗೆ ತಂದು ನೋಟ್‌ಬುಕ್‌ಗಳನ್ನು ಚಾಲನೆ ಮಾಡಬಹುದಾಗಿರಬೇಕು. + +ಈ [Python Learning Path](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ, ನಂತರ ಈ ಪರಿಚಯಾತ್ಮಕ ವೀಡಿಯೊಗಳನ್ನು ನೋಡಿ ನಿಮ್ಮ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಸಿದ್ಧಪಡಿಸಿ: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/2-history-of-ML/README.md b/translations/kn/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 000000000..cc1a0df81 --- /dev/null +++ b/translations/kn/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,167 @@ + +# ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತಿಹಾಸ + +![ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತಿಹಾಸದ ಸಾರಾಂಶವನ್ನು ಸ್ಕೆಚ್‌ನೋಟ್‌ನಲ್ಲಿ](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.kn.png) +> ಸ್ಕೆಚ್‌ನೋಟ್: [ಟೊಮೊಮಿ ಇಮುರಾ](https://www.twitter.com/girlie_mac) + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ - ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತಿಹಾಸ](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ - ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತಿಹಾಸ") + +> 🎥 ಈ ಪಾಠವನ್ನು ವಿವರಿಸುವ ಚಿಕ್ಕ ವೀಡಿಯೊಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ಈ ಪಾಠದಲ್ಲಿ, ನಾವು ಯಂತ್ರ ಅಧ್ಯಯನ ಮತ್ತು ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆಯ ಇತಿಹಾಸದ ಪ್ರಮುಖ ಮೈಲಿಗಲ್ಲುಗಳನ್ನು ಪರಿಶೀಲಿಸುವೆವು. + +ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ (AI) ಕ್ಷೇತ್ರದ ಇತಿಹಾಸವು ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತಿಹಾಸದೊಂದಿಗೆ絡ಗೊಂಡಿದೆ, ಏಕೆಂದರೆ ML ಅನ್ನು ಆಧರಿಸುವ ಅಲ್ಗಾರಿದಮ್ಗಳು ಮತ್ತು ಗಣನಾತ್ಮಕ ಪ್ರಗತಿಗಳು AI ಅಭಿವೃದ್ಧಿಗೆ ಸಹಾಯ ಮಾಡಿವೆ. ಈ ಕ್ಷೇತ್ರಗಳು 1950ರ ದಶಕದಲ್ಲಿ ಪ್ರತ್ಯೇಕ ವಿಚಾರಣಾ ಕ್ಷೇತ್ರಗಳಾಗಿ ರೂಪುಗೊಂಡರೂ, ಪ್ರಮುಖ [ಅಲ್ಗಾರಿದಮಿಕ್, ಸಾಂಖ್ಯಿಕ, ಗಣಿತೀಯ, ಗಣನಾತ್ಮಕ ಮತ್ತು ತಾಂತ್ರಿಕ ಆವಿಷ್ಕಾರಗಳು](https://wikipedia.org/wiki/Timeline_of_machine_learning) ಈ ಕಾಲಘಟ್ಟಕ್ಕಿಂತ ಮುಂಚಿತವಾಗಿಯೂ ಮತ್ತು ಅಡ್ಡವಾಗಿ ನಡೆದಿವೆ. ವಾಸ್ತವವಾಗಿ, ಜನರು ಈ ಪ್ರಶ್ನೆಗಳ ಬಗ್ಗೆ [ನೂರು ವರ್ಷಗಳಿಂದ](https://wikipedia.org/wiki/History_of_artificial_intelligence) ಯೋಚಿಸುತ್ತಿದ್ದಾರೆ: ಈ ಲೇಖನವು 'ಚಿಂತಿಸುವ ಯಂತ್ರ' ಎಂಬ ಕಲ್ಪನೆಯ ಇತಿಹಾಸಾತ್ಮಕ ಬೌದ್ಧಿಕ ಆಧಾರಗಳನ್ನು ಚರ್ಚಿಸುತ್ತದೆ. + +--- +## ಪ್ರಮುಖ ಆವಿಷ್ಕಾರಗಳು + +- 1763, 1812 [ಬೇಯ್ಸ್ ಸಿದ್ಧಾಂತ](https://wikipedia.org/wiki/Bayes%27_theorem) ಮತ್ತು ಅದರ ಪೂರ್ವಜರು. ಈ ಸಿದ್ಧಾಂತ ಮತ್ತು ಅದರ ಅನ್ವಯಗಳು ನಿರ್ಣಯಕ್ಕೆ ಆಧಾರವಾಗಿದ್ದು, ಹಿಂದಿನ ಜ್ಞಾನ ಆಧಾರದ ಮೇಲೆ ಘಟನೆ ಸಂಭವಿಸುವ ಸಾಧ್ಯತೆಯನ್ನು ವಿವರಿಸುತ್ತದೆ. +- 1805 [ಕನಿಷ್ಠ ಚದರ ಸಿದ್ಧಾಂತ](https://wikipedia.org/wiki/Least_squares) ಫ್ರೆಂಚ್ ಗಣಿತಜ್ಞ ಅಡ್ರಿಯನ್-ಮೇರಿ ಲೆಜೆಂಡ್ರ್ ರವರಿಂದ. ಈ ಸಿದ್ಧಾಂತವನ್ನು ನೀವು ನಮ್ಮ ರಿಗ್ರೆಷನ್ ಘಟಕದಲ್ಲಿ ಕಲಿಯುತ್ತೀರಿ, ಇದು ಡೇಟಾ ಹೊಂದಾಣಿಕೆಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. +- 1913 [ಮಾರ್ಕೋವ್ ಸರಪಳಿ](https://wikipedia.org/wiki/Markov_chain), ರಷ್ಯನ್ ಗಣಿತಜ್ಞ ಆಂಡ್ರೇ ಮಾರ್ಕೋವ್ ಅವರ ಹೆಸರಿನಲ್ಲಿ, ಹಿಂದಿನ ಸ್ಥಿತಿಯ ಆಧಾರದ ಮೇಲೆ ಸಂಭವನೀಯ ಘಟನೆಗಳ ಸರಣಿಯನ್ನು ವಿವರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. +- 1957 [ಪರ್ಸೆಪ್ಟ್ರಾನ್](https://wikipedia.org/wiki/Perceptron) ಅಮೆರಿಕನ್ ಮನೋವೈಜ್ಞಾನಿಕ ಫ್ರಾಂಕ್ ರೋಸೆನ್‌ಬ್ಲಾಟ್ ರವರಿಂದ ಆವಿಷ್ಕೃತ ಲೀನಿಯರ್ ವರ್ಗೀಕರಣದ ಒಂದು ಪ್ರಕಾರ, ಇದು ಡೀಪ್ ಲರ್ನಿಂಗ್‌ನಲ್ಲಿ ಪ್ರಗತಿಗೆ ಆಧಾರವಾಗಿದೆ. + +--- + +- 1967 [ನಿಕಟಮ ಸನ್ನಿಹಿತ](https://wikipedia.org/wiki/Nearest_neighbor) ಮೂಲತಃ ಮಾರ್ಗಗಳನ್ನು ನಕ್ಷೆ ಮಾಡಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಅಲ್ಗಾರಿದಮ್. ML ಸನ್ನಿವೇಶದಲ್ಲಿ ಇದು ಮಾದರಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಬಳಸಲಾಗುತ್ತದೆ. +- 1970 [ಬ್ಯಾಕ್‌ಪ್ರೊಪಾಗೇಶನ್](https://wikipedia.org/wiki/Backpropagation) [ಫೀಡ್‌ಫಾರ್ವರ್ಡ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು](https://wikipedia.org/wiki/Feedforward_neural_network) ತರಬೇತಿಗೆ ಬಳಸಲಾಗುತ್ತದೆ. +- 1982 [ರಿಕರೆಂಟ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು](https://wikipedia.org/wiki/Recurrent_neural_network) ಫೀಡ್‌ಫಾರ್ವರ್ಡ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಂದ ಉತ್ಪನ್ನವಾದ ಕೃತಕ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು, ಅವು ಕಾಲಾತೀತ ಗ್ರಾಫ್‌ಗಳನ್ನು ರಚಿಸುತ್ತವೆ. + +✅ ಸ್ವಲ್ಪ ಸಂಶೋಧನೆ ಮಾಡಿ. ML ಮತ್ತು AI ಇತಿಹಾಸದಲ್ಲಿ ಇನ್ನೇನು ಪ್ರಮುಖ ದಿನಾಂಕಗಳು ಗಮನಾರ್ಹವಾಗಿವೆ? + +--- +## 1950: ಚಿಂತಿಸುವ ಯಂತ್ರಗಳು + +ಅಲನ್ ಟ್ಯೂರಿಂಗ್, 2019 ರಲ್ಲಿ [ಸಾರ್ವಜನಿಕರಿಂದ](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 20ನೇ ಶತಮಾನದ ಅತ್ಯುತ್ತಮ ವಿಜ್ಞಾನಿಯಾಗಿ ಮತದಾನಗೊಂಡ ಅತ್ಯಂತ ಅದ್ಭುತ ವ್ಯಕ್ತಿ, 'ಚಿಂತಿಸುವ ಯಂತ್ರ' ಎಂಬ ಕಲ್ಪನೆಗೆ ಆಧಾರವನ್ನು ನೀಡಿದವರಾಗಿ ಗುರುತಿಸಲ್ಪಟ್ಟಿದ್ದಾರೆ. ಅವರು ಈ ಕಲ್ಪನೆಯ ಪ್ರಾಯೋಗಿಕ ಸಾಕ್ಷ್ಯಕ್ಕಾಗಿ ತೀವ್ರವಾಗಿ ಯೋಚಿಸಿ, [ಟ್ಯೂರಿಂಗ್ ಪರೀಕ್ಷೆ](https://www.bbc.com/news/technology-18475646) ರಚಿಸಿದರು, ಇದನ್ನು ನೀವು ನಮ್ಮ NLP ಪಾಠಗಳಲ್ಲಿ ಅನ್ವೇಷಿಸುವಿರಿ. + +--- +## 1956: ಡಾರ್ಟ್‌ಮೌತ್ ಬೇಸಿಗೆ ಸಂಶೋಧನಾ ಯೋಜನೆ + +"ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ ಕ್ಷೇತ್ರದ ಪ್ರಮುಖ ಘಟನೆ ಆಗಿದ್ದ ಡಾರ್ಟ್‌ಮೌತ್ ಬೇಸಿಗೆ ಸಂಶೋಧನಾ ಯೋಜನೆ," ಇಲ್ಲಿ 'ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ' ಪದವನ್ನು ರೂಪಿಸಲಾಯಿತು ([ಮೂಲ](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> ಕಲಿಕೆಯ ಪ್ರತಿಯೊಂದು ಅಂಶ ಅಥವಾ ಬುದ್ಧಿಮತ್ತೆಯ ಯಾವುದೇ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಯಂತ್ರವು ನಕಲಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ ನಿಖರವಾಗಿ ವರ್ಣಿಸಬಹುದು. + +--- + +ಮುಖ್ಯ ಸಂಶೋಧಕ, ಗಣಿತ ಪ್ರಾಧ್ಯಾಪಕ ಜಾನ್ ಮ್ಯಾಕಾರ್ಥಿ, "ಕಲಿಕೆಯ ಪ್ರತಿಯೊಂದು ಅಂಶ ಅಥವಾ ಬುದ್ಧಿಮತ್ತೆಯ ಯಾವುದೇ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಯಂತ್ರವು ನಕಲಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ ನಿಖರವಾಗಿ ವರ್ಣಿಸಬಹುದು" ಎಂಬ ಊಹಾಪೋಹದ ಆಧಾರದ ಮೇಲೆ ಮುಂದುವರೆಯಲು ಆಶಿಸಿದರು. ಭಾಗವಹಿಸಿದವರಲ್ಲಿ ಮತ್ತೊಬ್ಬ ಪ್ರಸಿದ್ಧ ವ್ಯಕ್ತಿ ಮಾರ್ವಿನ್ ಮಿನ್ಸ್ಕಿ ಇದ್ದರು. + +ಈ ಕಾರ್ಯಾಗಾರವು "ಪ್ರತೀಕಾತ್ಮಕ ವಿಧಾನಗಳ ಏರಿಕೆ, ನಿರ್ದಿಷ್ಟ ಕ್ಷೇತ್ರಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕೃತ ವ್ಯವಸ್ಥೆಗಳು (ಆರಂಭಿಕ ತಜ್ಞ ವ್ಯವಸ್ಥೆಗಳು), ಮತ್ತು ನಿರೂಪಣಾತ್ಮಕ ವ್ಯವಸ್ಥೆಗಳು ವಿರುದ್ಧ ಅನುಪಾತಾತ್ಮಕ ವ್ಯವಸ್ಥೆಗಳು" ಸೇರಿದಂತೆ ಹಲವು ಚರ್ಚೆಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿ ಉತ್ತೇಜನ ನೀಡಿದಂತೆ ಗುರುತಿಸಲಾಗಿದೆ ([ಮೂಲ](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "ಸುವರ್ಣ ಯುಗ" + +1950ರ ದಶಕದಿಂದ 1970ರ ಮಧ್ಯದವರೆಗೆ, AI ಅನೇಕ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಬಹುದು ಎಂಬ ಭರವಸೆ ಉತ್ಕೃಷ್ಟವಾಗಿತ್ತು. 1967 ರಲ್ಲಿ ಮಾರ್ವಿನ್ ಮಿನ್ಸ್ಕಿ ನಂಬಿಕೆಯಿಂದ ಹೇಳಿದಂತೆ, "ಒಂದು ತಲೆಮಾರಿಗೆ ಒಳಗಾಗಿ ... 'ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ' ಸೃಷ್ಟಿಸುವ ಸಮಸ್ಯೆ ಬಹುಮಟ್ಟಿಗೆ ಪರಿಹಾರವಾಗುತ್ತದೆ." (ಮಿನ್ಸ್ಕಿ, ಮಾರ್ವಿನ್ (1967), ಗಣನೆ: ಸೀಮಿತ ಮತ್ತು ಅನಂತ ಯಂತ್ರಗಳು, ಎಂಗಲ್‌ವುಡ್ ಕ್ಲಿಫ್ಸ್, N.J.: ಪ್ರೆಂಟಿಸ್-ಹಾಲ್) + +ಸ್ವಾಭಾವಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ ಸಂಶೋಧನೆ ಬೆಳವಣಿಗೆ ಕಂಡಿತು, ಹುಡುಕಾಟವನ್ನು ಸುಧಾರಿಸಿ ಶಕ್ತಿಶಾಲಿ ಮಾಡಲಾಯಿತು, ಮತ್ತು 'ಮೈಕ್ರೋ-ವಿಶ್ವಗಳು' ಎಂಬ ಕಲ್ಪನೆ ಹುಟ್ಟಿತು, ಇಲ್ಲಿ ಸರಳ ಕಾರ್ಯಗಳನ್ನು ಸರಳ ಭಾಷಾ ಸೂಚನೆಗಳ ಮೂಲಕ ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿತ್ತು. + +--- + +ಸರ್ಕಾರಿ ಸಂಸ್ಥೆಗಳ ಮೂಲಕ ಸಂಶೋಧನೆಗೆ ಉತ್ತಮ ಹಣಕಾಸು ದೊರಕಿತು, ಗಣನೆ ಮತ್ತು ಅಲ್ಗಾರಿದಮ್ಗಳಲ್ಲಿ ಪ್ರಗತಿ ಕಂಡುಬಂದಿತು, ಮತ್ತು ಬುದ್ಧಿವಂತ ಯಂತ್ರಗಳ ಪ್ರೋಟೋಟೈಪ್ಗಳು ನಿರ್ಮಿಸಲ್ಪಟ್ಟವು. ಕೆಲವು ಯಂತ್ರಗಳು: + +* [ಶೇಕಿ ರೋಬೋಟ್](https://wikipedia.org/wiki/Shakey_the_robot), ಯಾರು 'ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ' ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿತ್ತು. + + ![ಶೇಕಿ, ಬುದ್ಧಿವಂತ ರೋಬೋಟ್](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.kn.jpg) + > 1972 ರಲ್ಲಿ ಶೇಕಿ + +--- + +* ಎಲಿಜಾ, ಆರಂಭಿಕ 'ಚಾಟ್‌ಬಾಟ್', ಜನರೊಂದಿಗೆ ಸಂಭಾಷಣೆ ನಡೆಸಲು ಮತ್ತು ಪ್ರಾಥಮಿಕ 'ಥೆರಪಿಸ್ಟ್' ಆಗ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಸಾಧ್ಯವಿತ್ತು. NLP ಪಾಠಗಳಲ್ಲಿ ನೀವು ಎಲಿಜಾ ಬಗ್ಗೆ ಹೆಚ್ಚು ತಿಳಿಯುತ್ತೀರಿ. + + ![ಎಲಿಜಾ, ಒಂದು ಬಾಟ್](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.kn.png) + > ಎಲಿಜಾ, ಒಂದು ಚಾಟ್‌ಬಾಟ್‌ನ ಆವೃತ್ತಿ + +--- + +* "ಬ್ಲಾಕ್ಸ್ ವರ್ಲ್ಡ್" ಎಂಬ ಮೈಕ್ರೋ-ವಿಶ್ವದಲ್ಲಿ ಬ್ಲಾಕ್ಗಳನ್ನು ಸರಿದೂಗಿಸಿ ವಿಂಗಡಿಸಲಾಗುತ್ತಿತ್ತು, ಮತ್ತು ಯಂತ್ರಗಳಿಗೆ ನಿರ್ಧಾರಗಳನ್ನು ಕಲಿಸುವ ಪ್ರಯೋಗಗಳನ್ನು ಪರೀಕ್ಷಿಸಲಾಗುತ್ತಿತ್ತು. [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ಮುಂತಾದ ಗ್ರಂಥಾಲಯಗಳೊಂದಿಗೆ ನಿರ್ಮಿತ ಪ್ರಗತಿಗಳು ಭಾಷಾ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮುಂದುವರಿಸಲು ಸಹಾಯ ಮಾಡಿತು. + + [![SHRDLU ಜೊತೆಗೆ ಬ್ಲಾಕ್ಸ್ ವರ್ಲ್ಡ್](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "SHRDLU ಜೊತೆಗೆ ಬ್ಲಾಕ್ಸ್ ವರ್ಲ್ಡ್") + + > 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೊ: SHRDLU ಜೊತೆಗೆ ಬ್ಲಾಕ್ಸ್ ವರ್ಲ್ಡ್ + +--- +## 1974 - 1980: "AI ಚಳಿಗಾಲ" + +1970ರ ಮಧ್ಯದಲ್ಲಿ, 'ಬುದ್ಧಿವಂತ ಯಂತ್ರಗಳನ್ನು' ನಿರ್ಮಿಸುವ ಸಂಕೀರ್ಣತೆ ಕಡಿಮೆ ಅಂದಾಜಿತವಾಗಿದ್ದು, ಲಭ್ಯವಿರುವ ಗಣನ ಶಕ್ತಿಯೊಂದಿಗೆ ಅದರ ಭರವಸೆ ಹೆಚ್ಚಾಗಿ ಹೇಳಲ್ಪಟ್ಟಿತು ಎಂಬುದು ಸ್ಪಷ್ಟವಾಯಿತು. ಹಣಕಾಸು ಕಡಿಮೆಯಾಯಿತು ಮತ್ತು ಕ್ಷೇತ್ರದ ಮೇಲೆ ನಂಬಿಕೆ ಕುಗ್ಗಿತು. ನಂಬಿಕೆಗೆ ಪರಿಣಾಮ ಬೀರುವ ಕೆಲವು ಸಮಸ್ಯೆಗಳು: + +--- +- **ಮಿತಿಗಳು**. ಗಣನ ಶಕ್ತಿ ತುಂಬಾ ಸೀಮಿತವಾಗಿತ್ತು. +- **ಸಂಯೋಜನಾತ್ಮಕ ಸ್ಫೋಟ**. ಗಣಕಗಳಿಗೆ ಹೆಚ್ಚು ಕೇಳಿದಂತೆ ತರಬೇತಿಗೆ ಬೇಕಾದ ಪರಿಮಾಣಗಳು ಗಣನೀಯವಾಗಿ ಹೆಚ್ಚಾಗುತ್ತಿದ್ದು, ಗಣನ ಶಕ್ತಿ ಮತ್ತು ಸಾಮರ್ಥ್ಯದ ಸಮಕಾಲೀನ ಬೆಳವಣಿಗೆ ಇಲ್ಲದೆ ಇತ್ತು. +- **ಡೇಟಾ ಕೊರತೆ**. ಪರೀಕ್ಷೆ, ಅಭಿವೃದ್ಧಿ ಮತ್ತು ಅಲ್ಗಾರಿದಮ್ಗಳ ಸುಧಾರಣೆಗೆ ಡೇಟಾ ಕೊರತೆ ಅಡ್ಡಿಪಡಿಸಿತು. +- **ನಾವು ಸರಿಯಾದ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳುತ್ತಿದ್ದೇವೇ?**. ಕೇಳಲಾಗುತ್ತಿದ್ದ ಪ್ರಶ್ನೆಗಳೇ ಪ್ರಶ್ನೆಗೆ ಒಳಗಾದವು. ಸಂಶೋಧಕರು ತಮ್ಮ ವಿಧಾನಗಳ ಬಗ್ಗೆ ಟೀಕೆಗಳನ್ನು ಎದುರಿಸಿದರು: + - ಟ್ಯೂರಿಂಗ್ ಪರೀಕ್ಷೆಗಳನ್ನು 'ಚೈನೀಸ್ ರೂಮ್ ಸಿದ್ಧಾಂತ' ಮುಂತಾದ ಕಲ್ಪನೆಗಳ ಮೂಲಕ ಪ್ರಶ್ನಿಸಲಾಯಿತು, ಇದು "ಡಿಜಿಟಲ್ ಕಂಪ್ಯೂಟರ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಂತೆ ತೋರುತ್ತದೆ ಆದರೆ ನಿಜವಾದ ಅರ್ಥಮಾಡಿಕೊಳಲು ಸಾಧ್ಯವಿಲ್ಲ" ಎಂದು ಹೇಳುತ್ತದೆ ([ಮೂಲ](https://plato.stanford.edu/entries/chinese-room/)). + - "ಥೆರಪಿಸ್ಟ್" ಎಲಿಜಾ ಮುಂತಾದ ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆಗಳನ್ನು ಸಮಾಜಕ್ಕೆ ಪರಿಚಯಿಸುವ ನೈತಿಕತೆ ಪ್ರಶ್ನಿಸಲಾಯಿತು. + +--- + +ಅದೇ ಸಮಯದಲ್ಲಿ, ವಿವಿಧ AI ಚಿಂತನೆ ಶಾಲೆಗಳು ರೂಪುಗೊಂಡವು. ["ಸ್ಕ್ರಫಿ" ಮತ್ತು "ನೀಟ್ AI"](https://wikipedia.org/wiki/Neats_and_scruffies) ಅಭ್ಯಾಸಗಳ ನಡುವೆ ವಿಭಜನೆ ಸ್ಥಾಪಿತವಾಯಿತು. _ಸ್ಕ್ರಫಿ_ ಪ್ರಯೋಗಾಲಯಗಳು ಗಂಟೆಗಳ ಕಾಲ ಪ್ರೋಗ್ರಾಮ್‌ಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ ಬೇಕಾದ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆದವು. _ನೀಟ್_ ಪ್ರಯೋಗಾಲಯಗಳು "ತರ್ಕ ಮತ್ತು ಅಧಿಕೃತ ಸಮಸ್ಯೆ ಪರಿಹಾರ" ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಿದವು. ಎಲಿಜಾ ಮತ್ತು SHRDLU ಪ್ರಸಿದ್ಧ _ಸ್ಕ್ರಫಿ_ ವ್ಯವಸ್ಥೆಗಳಾಗಿದ್ದವು. 1980ರ ದಶಕದಲ್ಲಿ, ML ವ್ಯವಸ್ಥೆಗಳನ್ನು ಪುನರಾವರ್ತಿಸಬಹುದಾದಂತೆ ಮಾಡಲು ಬೇಡಿಕೆ ಬಂದಾಗ, _ನೀಟ್_ ವಿಧಾನವು ಮುಂಚೂಣಿಗೆ ಬಂತು ಏಕೆಂದರೆ ಅದರ ಫಲಿತಾಂಶಗಳು ಹೆಚ್ಚು ವಿವರಿಸಬಹುದಾಗಿವೆ. + +--- +## 1980ರ ದಶಕ ತಜ್ಞ ವ್ಯವಸ್ಥೆಗಳು + +ಕ್ಷೇತ್ರ ಬೆಳೆಯುತ್ತಾ, ಅದರ ವ್ಯವಹಾರಕ್ಕೆ ಲಾಭ ಸ್ಪಷ್ಟವಾಗುತ್ತಾ, 1980ರ ದಶಕದಲ್ಲಿ 'ತಜ್ಞ ವ್ಯವಸ್ಥೆಗಳ' ವ್ಯಾಪಾರವೂ ಹೆಚ್ಚಿತು. "ತಜ್ಞ ವ್ಯವಸ್ಥೆಗಳು ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ (AI) ಸಾಫ್ಟ್‌ವೇರ್‌ನ ಮೊದಲ ಯಶಸ್ವಿ ರೂಪಗಳಲ್ಲಿ ಒಂದಾಗಿವೆ." ([ಮೂಲ](https://wikipedia.org/wiki/Expert_system)). + +ಈ ರೀತಿಯ ವ್ಯವಸ್ಥೆ ಭಾಗಶಃ ನಿಯಮ ಇಂಜಿನ್ ಮತ್ತು ನಿಯಮ ವ್ಯವಸ್ಥೆಯನ್ನು ಉಪಯೋಗಿಸಿ ಹೊಸ ತತ್ವಗಳನ್ನು ನಿರ್ಣಯಿಸುವ ನಿರ್ಣಯ ಇಂಜಿನ್‌ನಿಂದ ಕೂಡಿದೆ. + +ಈ ಕಾಲದಲ್ಲಿ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಹೆಚ್ಚುವರಿ ಗಮನ ನೀಡಲಾಯಿತು. + +--- +## 1987 - 1993: AI 'ಚಿಲ್' + +ವಿಶೇಷ ತಜ್ಞ ವ್ಯವಸ್ಥೆಗಳ ಹಾರ್ಡ್‌ವೇರ್ ವ್ಯಾಪಾರವು ತುಂಬಾ ವಿಶೇಷೀಕೃತವಾಗುವ ಪರಿಣಾಮ ಉಂಟುಮಾಡಿತು. ವೈಯಕ್ತಿಕ ಕಂಪ್ಯೂಟರ್‌ಗಳ ಏರಿಕೆ ಈ ದೊಡ್ಡ, ವಿಶೇಷೀಕೃತ, ಕೇಂದ್ರಿತ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಸ್ಪರ್ಧೆ ನೀಡಿತು. ಗಣನದ ಪ್ರಜಾಪ್ರಭುತ್ವ ಆರಂಭವಾಯಿತು ಮತ್ತು ಇದು ದೊಡ್ಡ ಡೇಟಾ ಸ್ಫೋಟಕ್ಕೆ ದಾರಿ ಮಾಡಿಕೊಟ್ಟಿತು. + +--- +## 1993 - 2011 + +ಈ ಕಾಲಘಟ್ಟದಲ್ಲಿ ML ಮತ್ತು AI ಹೊಸ ಯುಗವನ್ನು ಕಂಡವು, ಮೊದಲಿನ ಡೇಟಾ ಮತ್ತು ಗಣನ ಶಕ್ತಿಯ ಕೊರತೆಗಳಿಂದ ಉಂಟಾದ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಸಾಧ್ಯವಾಯಿತು. ಡೇಟಾ ಪ್ರಮಾಣವು ವೇಗವಾಗಿ ಹೆಚ್ಚಿತು ಮತ್ತು ಹೆಚ್ಚು ಲಭ್ಯವಾಯಿತು, ವಿಶೇಷವಾಗಿ 2007 ರ ಸ್ಮಾರ್ಟ್‌ಫೋನ್ ಆಗಮನದೊಂದಿಗೆ. ಗಣನ ಶಕ್ತಿ ಗಣನೀಯವಾಗಿ ವೃದ್ಧಿಸಿತು ಮತ್ತು ಅಲ್ಗಾರಿದಮ್ಗಳು ಸಹ ಬೆಳವಣಿಗೆ ಕಂಡವು. ಕ್ಷೇತ್ರವು ವಯಸ್ಕತೆಯನ್ನು ಪಡೆದುಕೊಂಡಿತು ಮತ್ತು ಮುಂಚಿನ ಮುಕ್ತ ಚಟುವಟಿಕೆಗಳು ನಿಜವಾದ ಶಿಸ್ತಿನ ರೂಪದಲ್ಲಿ ರೂಪುಗೊಂಡವು. + +--- +## ಈಗ + +ಇಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ಮತ್ತು AI ನಮ್ಮ ಜೀವನದ ಬಹುತೇಕ ಭಾಗಗಳನ್ನು ಸ್ಪರ್ಶಿಸುತ್ತವೆ. ಈ ಯುಗವು ಈ ಅಲ್ಗಾರಿದಮ್ಗಳ ಮಾನವ ಜೀವನದ ಮೇಲೆ ಇರುವ ಅಪಾಯಗಳು ಮತ್ತು ಸಾಧ್ಯತೆಗಳನ್ನು ಜಾಗರೂಕತೆಯಿಂದ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕಾಗಿದೆ. ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ ಬ್ರಾಡ್ ಸ್ಮಿತ್ ಹೇಳಿರುವಂತೆ, "ಮಾಹಿತಿ ತಂತ್ರಜ್ಞಾನವು ಗೌಪ್ಯತೆ ಮತ್ತು ಅಭಿವ್ಯಕ್ತಿಯ ಸ್ವಾತಂತ್ರ್ಯಗಳಂತಹ ಮೂಲಭೂತ ಮಾನವ ಹಕ್ಕುಗಳ ರಕ್ಷಣೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ವಿಷಯಗಳನ್ನು ಎತ್ತಿಹಿಡಿಯುತ್ತದೆ. ಈ ಉತ್ಪನ್ನಗಳನ್ನು ಸೃಷ್ಟಿಸುವ ತಂತ್ರಜ್ಞಾನ ಕಂಪನಿಗಳ ಹೊಣೆಗಾರಿಕೆ ಹೆಚ್ಚಿಸುತ್ತದೆ. ನಮ್ಮ ದೃಷ್ಟಿಯಲ್ಲಿ, ಇದು ಯೋಚನಾಶೀಲ ಸರ್ಕಾರ ನಿಯಂತ್ರಣ ಮತ್ತು ಸ್ವೀಕಾರ್ಯ ಬಳಕೆಗಳ ಸುತ್ತಲೂ ನಿಯಮಗಳ ಅಭಿವೃದ್ಧಿಯನ್ನು ಕರೆದೊಯ್ಯುತ್ತದೆ" ([ಮೂಲ](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +ಭವಿಷ್ಯದಲ್ಲಿ ಏನು ಸಂಭವಿಸುವುದು ನೋಡಬೇಕಾಗುತ್ತದೆ, ಆದರೆ ಈ ಕಂಪ್ಯೂಟರ್ ವ್ಯವಸ್ಥೆಗಳು ಮತ್ತು ಅವು ಚಾಲನೆ ಮಾಡುವ ಸಾಫ್ಟ್‌ವೇರ್ ಮತ್ತು ಅಲ್ಗಾರಿದಮ್ಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ. ಈ ಪಠ್ಯಕ್ರಮವು ನಿಮಗೆ ಉತ್ತಮ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ ಎಂದು ನಾವು ಆಶಿಸುತ್ತೇವೆ, ನೀವು ಸ್ವತಃ ನಿರ್ಧರಿಸಬಹುದು. + +[![ಡೀಪ್ ಲರ್ನಿಂಗ್ ಇತಿಹಾಸ](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "ಡೀಪ್ ಲರ್ನಿಂಗ್ ಇತಿಹಾಸ") +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೊ: ಯಾನ್ ಲೆಕನ್ ಈ ಉಪನ್ಯಾಸದಲ್ಲಿ ಡೀಪ್ ಲರ್ನಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಚರ್ಚಿಸುತ್ತಾರೆ + +--- +## 🚀ಸವಾಲು + +ಈ ಇತಿಹಾಸಾತ್ಮಕ ಕ್ಷಣಗಳಲ್ಲಿ ಒಂದನ್ನು ಆಳವಾಗಿ ಅಧ್ಯಯನ ಮಾಡಿ ಮತ್ತು ಅದರ ಹಿಂದೆ ಇರುವ ಜನರನ್ನು ತಿಳಿದುಕೊಳ್ಳಿ. ಅದ್ಭುತ ವ್ಯಕ್ತಿತ್ವಗಳಿವೆ, ಮತ್ತು ಯಾವುದೇ ವೈಜ್ಞಾನಿಕ ಆವಿಷ್ಕಾರವು ಸಾಂಸ್ಕೃತಿಕ ಖಾಲಿಯಲ್ಲಿ ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿಲ್ಲ. ನೀವು ಏನು ಕಂಡುಹಿಡಿಯುತ್ತೀರಿ? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +--- +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಇಲ್ಲಿ ವೀಕ್ಷಿಸಲು ಮತ್ತು ಕೇಳಲು ಐಟಂಗಳು ಇವೆ: + +[ಈ ಪಾಡ್‌ಕಾಸ್ಟ್‌ನಲ್ಲಿ ಎಮಿ ಬಾಯ್ಡ್ AI ಅಭಿವೃದ್ಧಿಯನ್ನು ಚರ್ಚಿಸುತ್ತಾರೆ](http://runasradio.com/Shows/Show/739) + +[![ಎಮಿ ಬಾಯ್ಡ್ ಅವರ AI ಇತಿಹಾಸ](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "ಎಮಿ ಬಾಯ್ಡ್ ಅವರ AI ಇತಿಹಾಸ") + +--- + +## ನಿಯೋಜನೆ + +[ಟೈಮ್‌ಲೈನ್ ರಚಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/2-history-of-ML/assignment.md b/translations/kn/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 000000000..21988d996 --- /dev/null +++ b/translations/kn/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,27 @@ + +# ಟೈಮ್‌ಲೈನ್ ರಚಿಸಿ + +## ಸೂಚನೆಗಳು + +[ಈ ರೆಪೊ](https://github.com/Digital-Humanities-Toolkit/timeline-builder) ಬಳಸಿ, ಅಲ್ಗೋರಿದಮ್‌ಗಳು, ಗಣಿತ, ಸಂಖ್ಯಾಶಾಸ್ತ್ರ, AI, ಅಥವಾ ML ಇತಿಹಾಸದ ಕೆಲವು ಅಂಶಗಳ ಟೈಮ್‌ಲೈನ್ ರಚಿಸಿ, ಅಥವಾ ಇವುಗಳ ಸಂಯೋಜನೆ. ನೀವು ಒಬ್ಬ ವ್ಯಕ್ತಿ, ಒಂದು ಕಲ್ಪನೆ, ಅಥವಾ ದೀರ್ಘಕಾಲದ ಚಿಂತನೆಯ ಮೇಲೆ ಗಮನಹರಿಸಬಹುದು. ಬಹುಮಾಧ್ಯಮ ಅಂಶಗಳನ್ನು ಸೇರಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | +| | GitHub ಪುಟವಾಗಿ ನಿಯೋಜಿಸಲಾದ ಟೈಮ್‌ಲೈನ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಕೋಡ್ ಅಪೂರ್ಣವಾಗಿದೆ ಮತ್ತು ನಿಯೋಜಿಸಲ್ಪಟ್ಟಿಲ್ಲ | ಟೈಮ್‌ಲೈನ್ ಅಪೂರ್ಣವಾಗಿದೆ, ಚೆನ್ನಾಗಿ ಸಂಶೋಧಿಸಲ್ಪಟ್ಟಿಲ್ಲ ಮತ್ತು ನಿಯೋಜಿಸಲ್ಪಟ್ಟಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/3-fairness/README.md b/translations/kn/1-Introduction/3-fairness/README.md new file mode 100644 index 000000000..64a410834 --- /dev/null +++ b/translations/kn/1-Introduction/3-fairness/README.md @@ -0,0 +1,172 @@ + +# ಜವಾಬ್ದಾರಿಯುತ AI ಜೊತೆಗೆ ಯಂತ್ರ ಅಧ್ಯಯನ ಪರಿಹಾರಗಳನ್ನು ನಿರ್ಮಿಸುವುದು + +![ಯಂತ್ರ ಅಧ್ಯಯನದಲ್ಲಿ ಜವಾಬ್ದಾರಿಯುತ AI ಸಂಕ್ಷಿಪ್ತ ಟಿಪ್ಪಣಿ](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.kn.png) +> ಟೊಮೊಮಿ ಇಮುರಾ ಅವರಿಂದ ಸ್ಕೆಚ್‌ನೋಟ್ [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ಪರಿಚಯ + +ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ, ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನವು ನಮ್ಮ ದೈನಂದಿನ ಜೀವನವನ್ನು ಹೇಗೆ ಪ್ರಭಾವಿಸುತ್ತಿದೆ ಮತ್ತು ಮಾಡುತ್ತಿದೆ ಎಂಬುದನ್ನು ಅನ್ವೇಷಿಸಲು ಪ್ರಾರಂಭಿಸುವಿರಿ. ಈಗಾಗಲೇ, ವ್ಯವಸ್ಥೆಗಳು ಮತ್ತು ಮಾದರಿಗಳು ದೈನಂದಿನ ನಿರ್ಧಾರ-ಮಾಡುವ ಕಾರ್ಯಗಳಲ್ಲಿ ಭಾಗವಹಿಸುತ್ತಿವೆ, ಉದಾಹರಣೆಗೆ ಆರೋಗ್ಯ ನಿರ್ಣಯಗಳು, ಸಾಲ ಅನುಮೋದನೆಗಳು ಅಥವಾ ಮೋಸ ಪತ್ತೆ. ಆದ್ದರಿಂದ, ಈ ಮಾದರಿಗಳು ವಿಶ್ವಾಸಾರ್ಹ ಫಲಿತಾಂಶಗಳನ್ನು ಒದಗಿಸಲು ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದು ಮುಖ್ಯ. ಯಾವುದೇ ಸಾಫ್ಟ್‌ವೇರ್ ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ, AI ವ್ಯವಸ್ಥೆಗಳು ನಿರೀಕ್ಷೆಗಳನ್ನು ತಪ್ಪಿಸಬಹುದು ಅಥವಾ ಇಚ್ಛಿತವಲ್ಲದ ಫಲಿತಾಂಶವನ್ನು ನೀಡಬಹುದು. ಅದಕ್ಕಾಗಿ AI ಮಾದರಿಯ ವರ್ತನೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ವಿವರಿಸುವುದು ಅತ್ಯಾವಶ್ಯಕ. + +ನೀವು ಈ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲು ಬಳಸುತ್ತಿರುವ ಡೇಟಾ ಕೆಲವು ಜನಾಂಗ, ಲಿಂಗ, ರಾಜಕೀಯ ದೃಷ್ಟಿಕೋನ, ಧರ್ಮ ಅಥವಾ ಅಸಮಾನ ಪ್ರಮಾಣದಲ್ಲಿ ಪ್ರತಿನಿಧಿಸುವಂತಹ ಜನಸಂಖ್ಯಾ ಗುಂಪುಗಳನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ ಏನಾಗಬಹುದು ಎಂದು ಕಲ್ಪಿಸಿ ನೋಡಿ. ಮಾದರಿಯ ಫಲಿತಾಂಶವು ಕೆಲವು ಜನಾಂಗವನ್ನು ಪ್ರೋತ್ಸಾಹಿಸುವಂತೆ ವ್ಯಾಖ್ಯಾನಿಸಿದರೆ ಏನಾಗುತ್ತದೆ? ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಪರಿಣಾಮವೇನು? ಜೊತೆಗೆ, ಮಾದರಿಯು ಹಾನಿಕರ ಫಲಿತಾಂಶ ನೀಡಿದರೆ ಮತ್ತು ಜನರಿಗೆ ಹಾನಿ ಉಂಟುಮಾಡಿದರೆ ಏನಾಗುತ್ತದೆ? AI ವ್ಯವಸ್ಥೆಯ ವರ್ತನೆಗೆ ಯಾರು ಹೊಣೆಗಾರರು? ಈ ಪ್ರಶ್ನೆಗಳನ್ನು ನಾವು ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ ಅನ್ವೇಷಿಸುವೆವು. + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು: + +- ಯಂತ್ರ ಅಧ್ಯಯನದಲ್ಲಿ ನ್ಯಾಯತೆಯ ಮಹತ್ವ ಮತ್ತು ನ್ಯಾಯತೆಯ ಸಂಬಂಧಿತ ಹಾನಿಗಳ ಬಗ್ಗೆ ಜಾಗೃತಿ ಹೆಚ್ಚಿಸುವಿರಿ. +- ವಿಶ್ವಾಸಾರ್ಹತೆ ಮತ್ತು ಸುರಕ್ಷತೆ ಖಚಿತಪಡಿಸಲು ಅಸಾಮಾನ್ಯ ಮತ್ತು ವಿಚಿತ್ರ ಸಂದರ್ಭಗಳನ್ನು ಅನ್ವೇಷಿಸುವ ಅಭ್ಯಾಸಕ್ಕೆ ಪರಿಚಿತರಾಗುವಿರಿ. +- ಎಲ್ಲರಿಗೂ ಸಬಲಗೊಳಿಸುವ ಸಮಾವೇಶಿ ವ್ಯವಸ್ಥೆಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುವ ಅಗತ್ಯವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿರಿ. +- ಡೇಟಾ ಮತ್ತು ಜನರ ಗೌಪ್ಯತೆ ಮತ್ತು ಭದ್ರತೆಯನ್ನು ರಕ್ಷಿಸುವ ಮಹತ್ವವನ್ನು ಅನ್ವೇಷಿಸುವಿರಿ. +- AI ಮಾದರಿಗಳ ವರ್ತನೆಯನ್ನು ವಿವರಿಸಲು ಗ್ಲಾಸ್ ಬಾಕ್ಸ್ ವಿಧಾನದ ಮಹತ್ವವನ್ನು ನೋಡಿಕೊಳ್ಳುವಿರಿ. +- AI ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ವಿಶ್ವಾಸ ನಿರ್ಮಿಸಲು ಹೊಣೆಗಾರಿಕೆ ಅಗತ್ಯವಿರುವುದನ್ನು ಮನಗಂಡುಕೊಳ್ಳುವಿರಿ. + +## ಪೂರ್ವಾಪೇಕ್ಷಿತ + +ಪೂರ್ವಾಪೇಕ್ಷಿತವಾಗಿ, ದಯವಿಟ್ಟು "ಜವಾಬ್ದಾರಿಯುತ AI ತತ್ವಗಳು" ಕಲಿಕೆ ಮಾರ್ಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ ಮತ್ತು ಕೆಳಗಿನ ವಿಷಯದ ವಿಡಿಯೋವನ್ನು ವೀಕ್ಷಿಸಿ: + +ಜವಾಬ್ದಾರಿಯುತ AI ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಈ [ಕಲಿಕೆ ಮಾರ್ಗ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) ಅನುಸರಿಸಿ + +[![Microsoft's Approach to Responsible AI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವಿಡಿಯೋ: Microsoft's Approach to Responsible AI + +## ನ್ಯಾಯತೆ + +AI ವ್ಯವಸ್ಥೆಗಳು ಎಲ್ಲರಿಗೂ ನ್ಯಾಯವಾಗಿ ವರ್ತಿಸಬೇಕು ಮತ್ತು ಸಮಾನ ಗುಂಪಿನ ಜನರನ್ನು ವಿಭಿನ್ನ ರೀತಿಯಲ್ಲಿ ಪ್ರಭಾವಿತಗೊಳಿಸಬಾರದು. ಉದಾಹರಣೆಗೆ, AI ವ್ಯವಸ್ಥೆಗಳು ವೈದ್ಯಕೀಯ ಚಿಕಿತ್ಸೆ, ಸಾಲ ಅರ್ಜಿಗಳು ಅಥವಾ ಉದ್ಯೋಗದ ಮಾರ್ಗದರ್ಶನ ನೀಡುವಾಗ, ಸಮಾನ ಲಕ್ಷಣಗಳು, ಆರ್ಥಿಕ ಪರಿಸ್ಥಿತಿಗಳು ಅಥವಾ ವೃತ್ತಿಪರ ಅರ್ಹತೆಗಳಿರುವ ಎಲ್ಲರಿಗೂ ಸಮಾನ ಶಿಫಾರಸುಗಳನ್ನು ನೀಡಬೇಕು. ನಾವು ಪ್ರತಿಯೊಬ್ಬರೂ ನಮ್ಮ ನಿರ್ಧಾರಗಳು ಮತ್ತು ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರಭಾವಿಸುವ ವಂಶಪಾರಂಪರಿಕ ಪೂರ್ವಗ್ರಹಗಳನ್ನು ಹೊಂದುತ್ತೇವೆ. ಈ ಪೂರ್ವಗ್ರಹಗಳು AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ತರಬೇತುಗೊಳಿಸಲು ಬಳಸುವ ಡೇಟಾದಲ್ಲಿ ಸ್ಪಷ್ಟವಾಗಿರಬಹುದು. ಕೆಲವೊಮ್ಮೆ ಈ ಪ್ರಭಾವವು ಅನೈಚ್ಛಿಕವಾಗಿ ಸಂಭವಿಸಬಹುದು. ಡೇಟಾದಲ್ಲಿ ಪೂರ್ವಗ್ರಹವನ್ನು ಪರಿಚಯಿಸುವಾಗ ಜಾಗೃತಿಯಿಂದ ತಿಳಿದುಕೊಳ್ಳುವುದು ಕಷ್ಟ. + +**“ನ್ಯಾಯತೆಯ ಕೊರತೆ”** ಎಂದರೆ ಜನಾಂಗ, ಲಿಂಗ, ವಯಸ್ಸು ಅಥವಾ ಅಂಗವಿಕಲತೆ ಸ್ಥಿತಿಯಂತೆ ವ್ಯಾಖ್ಯಾನಿಸಲ್ಪಟ್ಟ ಗುಂಪಿನ ಮೇಲೆ ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮಗಳು ಅಥವಾ “ಹಾನಿಗಳು”. ಮುಖ್ಯ ನ್ಯಾಯತೆಯ ಸಂಬಂಧಿತ ಹಾನಿಗಳನ್ನು ಹೀಗೆ ವರ್ಗೀಕರಿಸಬಹುದು: + +- **ಹಂಚಿಕೆ**, ಉದಾಹರಣೆಗೆ ಲಿಂಗ ಅಥವಾ ಜಾತಿ ಒಂದನ್ನು ಮತ್ತೊಂದಕ್ಕಿಂತ ಪ್ರೋತ್ಸಾಹಿಸುವುದು. +- **ಸೇವೆಯ ಗುಣಮಟ್ಟ**. ನೀವು ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಂದರ್ಭಕ್ಕಾಗಿ ಡೇಟಾವನ್ನು ತರಬೇತುಗೊಳಿಸಿದರೆ ಆದರೆ ವಾಸ್ತವಿಕತೆ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿದ್ದರೆ, ಅದು ದೌರ್ಬಲ್ಯಪೂರ್ಣ ಸೇವೆಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಕಪ್ಪು ಚರ್ಮದ ಜನರನ್ನು ಗುರುತಿಸಲು ಸಾಧ್ಯವಾಗದ ಕೈ ಸಾಬೂನು ಡಿಸ್ಪೆನ್ಸರ್. [ಉಲ್ಲೇಖ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **ಅವಮಾನ**. ಅನ್ಯಾಯವಾಗಿ ಯಾರನ್ನಾದರೂ ಅಥವಾ ಯಾವುದನ್ನಾದರೂ ಟೀಕಿಸುವುದು ಮತ್ತು ಲೇಬಲ್ ಮಾಡುವುದು. ಉದಾಹರಣೆಗೆ, ಚಿತ್ರ ಲೇಬಲಿಂಗ್ ತಂತ್ರಜ್ಞಾನ ಕಪ್ಪು ಚರ್ಮದ ಜನರನ್ನು ಗೋರಿಲ್ಲಾಗಳಾಗಿ ತಪ್ಪಾಗಿ ಗುರುತಿಸಿತು. +- **ಅತಿವ್ಯಕ್ತ ಅಥವಾ ಅಲ್ಪಪ್ರತಿನಿಧಿತ್ವ**. ಒಂದು ನಿರ್ದಿಷ್ಟ ಗುಂಪು ನಿರ್ದಿಷ್ಟ ವೃತ್ತಿಯಲ್ಲಿ ಕಾಣಿಸದಿರುವುದು ಮತ್ತು ಯಾವುದೇ ಸೇವೆ ಅಥವಾ ಕಾರ್ಯವು ಅದನ್ನು ಮುಂದುವರಿಸುವುದು ಹಾನಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. +- **ಸ್ಟೀರಿಯೋಟೈಪಿಂಗ್**. ಒಂದು ಗುಂಪನ್ನು ಪೂರ್ವನಿರ್ಧರಿತ ಗುಣಲಕ್ಷಣಗಳೊಂದಿಗೆ ಸಂಪರ್ಕಿಸುವುದು. ಉದಾಹರಣೆಗೆ, ಇಂಗ್ಲಿಷ್ ಮತ್ತು ಟರ್ಕಿಷ್ ಭಾಷಾಂತರ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಲಿಂಗಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಸ್ಟೀರಿಯೋಟೈಪಿಕಲ್ ಪದಗಳ ಕಾರಣದಿಂದ ತಪ್ಪುಗಳು ಸಂಭವಿಸಬಹುದು. + +![ಟರ್ಕಿಷ್‌ಗೆ ಭಾಷಾಂತರ](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.kn.png) +> ಟರ್ಕಿಷ್‌ಗೆ ಭಾಷಾಂತರ + +![ಇಂಗ್ಲಿಷ್‌ಗೆ ಹಿಂದಿರುಗಿ ಭಾಷಾಂತರ](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.kn.png) +> ಇಂಗ್ಲಿಷ್‌ಗೆ ಹಿಂದಿರುಗಿ ಭಾಷಾಂತರ + +AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುವಾಗ ಮತ್ತು ಪರೀಕ್ಷಿಸುವಾಗ, AI ನ್ಯಾಯತೆಯುತವಾಗಿರಬೇಕು ಮತ್ತು ಪೂರ್ವಗ್ರಹಿತ ಅಥವಾ ಭೇದಭಾವಿ ನಿರ್ಧಾರಗಳನ್ನು ಮಾಡಲು ಪ್ರೋಗ್ರಾಮ್ ಮಾಡಬಾರದು, ಏಕೆಂದರೆ ಮಾನವರು ಕೂಡ ಇಂತಹ ನಿರ್ಧಾರಗಳನ್ನು ಮಾಡಬಾರದು. AI ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನದಲ್ಲಿ ನ್ಯಾಯತೆಯನ್ನು ಖಚಿತಪಡಿಸುವುದು ಸಂಕೀರ್ಣ ಸಾಮಾಜಿಕ-ತಾಂತ್ರಿಕ ಸವಾಲಾಗಿದೆ. + +### ವಿಶ್ವಾಸಾರ್ಹತೆ ಮತ್ತು ಸುರಕ್ಷತೆ + +ವಿಶ್ವಾಸ ನಿರ್ಮಿಸಲು, AI ವ್ಯವಸ್ಥೆಗಳು ಸಾಮಾನ್ಯ ಮತ್ತು ಅಪ್ರತೀಕ್ಷಿತ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ವಿಶ್ವಾಸಾರ್ಹ, ಸುರಕ್ಷಿತ ಮತ್ತು ಸತತವಾಗಿರಬೇಕು. AI ವ್ಯವಸ್ಥೆಗಳು ವಿಭಿನ್ನ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಹೇಗೆ ವರ್ತಿಸುವುದೆಂದು ತಿಳಿದುಕೊಳ್ಳುವುದು ಮುಖ್ಯ, ವಿಶೇಷವಾಗಿ ಅವು ಅಸಾಮಾನ್ಯವಾಗಿದ್ದಾಗ. AI ಪರಿಹಾರಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ, AI ಪರಿಹಾರಗಳು ಎದುರಿಸುವ ವಿವಿಧ ಪರಿಸ್ಥಿತಿಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದರ ಮೇಲೆ ಸಾಕಷ್ಟು ಗಮನ ನೀಡಬೇಕು. ಉದಾಹರಣೆಗೆ, ಸ್ವಯಂಚಾಲಿತ ಕಾರು ಜನರ ಸುರಕ್ಷತೆಯನ್ನು ಮೊದಲ ಆದ್ಯತೆಯಾಗಿ ಇರಿಸಿಕೊಳ್ಳಬೇಕು. ಆದ್ದರಿಂದ, ಕಾರು ಚಾಲನೆಗೆ ಶಕ್ತಿಯನ್ನು ನೀಡುವ AI ಎಲ್ಲಾ ಸಾಧ್ಯ ಪರಿಸ್ಥಿತಿಗಳನ್ನು ಪರಿಗಣಿಸಬೇಕು, ಉದಾಹರಣೆಗೆ ರಾತ್ರಿ, ಮಳೆ, ಹಿಮಪಾತ, ಮಕ್ಕಳ ರಸ್ತೆ ದಾಟುವುದು, ಪಶುಗಳು, ರಸ್ತೆ ನಿರ್ಮಾಣಗಳು ಇತ್ಯಾದಿ. AI ವ್ಯವಸ್ಥೆ ವಿವಿಧ ಪರಿಸ್ಥಿತಿಗಳನ್ನು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ಮತ್ತು ಸುರಕ್ಷಿತವಾಗಿ ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದು ಡೇಟಾ ವಿಜ್ಞಾನಿ ಅಥವಾ AI ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರು ವಿನ್ಯಾಸ ಅಥವಾ ಪರೀಕ್ಷೆಯ ಸಮಯದಲ್ಲಿ ಎಷ್ಟು ಮುಂಚಿತವಾಗಿ ಪರಿಗಣಿಸಿದ್ದಾರೆ ಎಂಬುದನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ. + +> [🎥 ವಿಡಿಯೋಗಾಗಿ ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### ಸಮಾವೇಶ + +AI ವ್ಯವಸ್ಥೆಗಳು ಎಲ್ಲರನ್ನೂ ತೊಡಗಿಸಿಕೊಳ್ಳಲು ಮತ್ತು ಸಬಲಗೊಳಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಬೇಕು. AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುವಾಗ ಮತ್ತು ಜಾರಿಗೆ ತರುವಾಗ, ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ಮತ್ತು AI ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರು ಅನೈಚ್ಛಿಕವಾಗಿ ಜನರನ್ನು ಹೊರಗೊಳ್ಳುವಂತೆ ಮಾಡುವ ಸಾಧ್ಯತೆಯಿರುವ ಅಡ್ಡಿ-ಬಾಧೆಗಳನ್ನು ಗುರುತಿಸಿ ಪರಿಹರಿಸುತ್ತಾರೆ. ಉದಾಹರಣೆಗೆ, ಜಗತ್ತಿನಲ್ಲಿ 1 ಬಿಲಿಯನ್ ಅಂಗವಿಕಲರು ಇದ್ದಾರೆ. AI ಪ್ರಗತಿಯೊಂದಿಗೆ, ಅವರು ತಮ್ಮ ದೈನಂದಿನ ಜೀವನದಲ್ಲಿ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ ಮತ್ತು ಅವಕಾಶಗಳಿಗೆ ಸುಲಭವಾಗಿ ಪ್ರವೇಶಿಸಬಹುದು. ಅಡ್ಡಿ-ಬಾಧೆಗಳನ್ನು ಪರಿಹರಿಸುವ ಮೂಲಕ, ಎಲ್ಲರಿಗೂ ಲಾಭದಾಯಕ ಉತ್ತಮ ಅನುಭವಗಳೊಂದಿಗೆ AI ಉತ್ಪನ್ನಗಳನ್ನು ಆವಿಷ್ಕರಿಸಲು ಮತ್ತು ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ಅವಕಾಶ ಸೃಷ್ಟಿಯಾಗುತ್ತದೆ. + +> [🎥 AI ನಲ್ಲಿ ಸಮಾವೇಶಕ್ಕಾಗಿ ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### ಭದ್ರತೆ ಮತ್ತು ಗೌಪ್ಯತೆ + +AI ವ್ಯವಸ್ಥೆಗಳು ಸುರಕ್ಷಿತವಾಗಿರಬೇಕು ಮತ್ತು ಜನರ ಗೌಪ್ಯತೆಯನ್ನು ಗೌರವಿಸಬೇಕು. ಜನರು ತಮ್ಮ ಗೌಪ್ಯತೆ, ಮಾಹಿತಿ ಅಥವಾ ಜೀವನವನ್ನು ಅಪಾಯಕ್ಕೆ ಹಾಕುವ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ಕಡಿಮೆ ವಿಶ್ವಾಸ ಹೊಂದಿರುತ್ತಾರೆ. ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ತರಬೇತುಗೊಳಿಸುವಾಗ, ಉತ್ತಮ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡಲು ನಾವು ಡೇಟಾವನ್ನು ಅವಲಂಬಿಸುತ್ತೇವೆ. ಇದರಲ್ಲಿ, ಡೇಟಾದ ಮೂಲ ಮತ್ತು ಅಖಂಡತೆಯನ್ನು ಪರಿಗಣಿಸಬೇಕು. ಉದಾಹರಣೆಗೆ, ಡೇಟಾ ಬಳಕೆದಾರರಿಂದ ಸಲ್ಲಿಸಲ್ಪಟ್ಟದೋ ಅಥವಾ ಸಾರ್ವಜನಿಕವಾಗಿ ಲಭ್ಯವಿದೆಯೋ? ನಂತರ, ಡೇಟಾ ಜೊತೆಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ರಹಸ್ಯ ಮಾಹಿತಿಯನ್ನು ರಕ್ಷಿಸುವ ಮತ್ತು ದಾಳಿಗಳನ್ನು ತಡೆಯುವ AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ಅತ್ಯಂತ ಮುಖ್ಯ. AI ಹೆಚ್ಚು ವ್ಯಾಪಕವಾಗುತ್ತಿರುವಂತೆ, ಗೌಪ್ಯತೆ ಮತ್ತು ಪ್ರಮುಖ ವೈಯಕ್ತಿಕ ಮತ್ತು ವ್ಯವಹಾರ ಮಾಹಿತಿಯನ್ನು ರಕ್ಷಿಸುವುದು ಹೆಚ್ಚು ಪ್ರಮುಖ ಮತ್ತು ಸಂಕೀರ್ಣವಾಗುತ್ತಿದೆ. AI ಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಗೌಪ್ಯತೆ ಮತ್ತು ಡೇಟಾ ಭದ್ರತೆ ಸಮಸ್ಯೆಗಳಿಗೆ ವಿಶೇಷ ಗಮನ ನೀಡಬೇಕು ಏಕೆಂದರೆ AI ವ್ಯವಸ್ಥೆಗಳು ಜನರ ಬಗ್ಗೆ ನಿಖರ ಮತ್ತು ತಿಳಿದ ನಿರ್ಧಾರಗಳನ್ನು ಮಾಡಲು ಡೇಟಾ ಪ್ರವೇಶ ಅಗತ್ಯವಿದೆ. + +> [🎥 AI ನಲ್ಲಿ ಭದ್ರತೆಗಾಗಿ ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- ಉದ್ಯಮವಾಗಿ ನಾವು GDPR (ಸಾಮಾನ್ಯ ಡೇಟಾ ರಕ್ಷಣಾ ನಿಯಮಾವಳಿ) ಮುಂತಾದ ನಿಯಮಾವಳಿಗಳಿಂದ ಪ್ರೇರಿತವಾಗಿ ಗೌಪ್ಯತೆ ಮತ್ತು ಭದ್ರತೆಯಲ್ಲಿ ಮಹತ್ವದ ಪ್ರಗತಿಯನ್ನು ಸಾಧಿಸಿದ್ದೇವೆ. +- ಆದರೆ AI ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ, ವ್ಯವಸ್ಥೆಗಳನ್ನು ಹೆಚ್ಚು ವೈಯಕ್ತಿಕ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮಾಡಲು ಹೆಚ್ಚಿನ ವೈಯಕ್ತಿಕ ಡೇಟಾ ಅಗತ್ಯವಿರುವುದು ಮತ್ತು ಗೌಪ್ಯತೆ ನಡುವಿನ ಒತ್ತಡವನ್ನು ನಾವು ಒಪ್ಪಿಕೊಳ್ಳಬೇಕು. +- ಇಂಟರ್ನೆಟ್ ಮೂಲಕ ಸಂಪರ್ಕಿತ ಕಂಪ್ಯೂಟರ್‌ಗಳ ಹುಟ್ಟುವಿಕೆಯಿಂದಾಗಿ, AI ಗೆ ಸಂಬಂಧಿಸಿದ ಭದ್ರತಾ ಸಮಸ್ಯೆಗಳ ಸಂಖ್ಯೆ ಹೆಚ್ಚಾಗುತ್ತಿದೆ. +- ಅದೇ ಸಮಯದಲ್ಲಿ, ಭದ್ರತೆಯನ್ನು ಸುಧಾರಿಸಲು AI ಬಳಸಲಾಗುತ್ತಿದೆ. ಉದಾಹರಣೆಗೆ, ಇಂದಿನ ಬಹುತೇಕ ಆಧುನಿಕ ಆಂಟಿ-ವೈರಸ್ ಸ್ಕ್ಯಾನರ್‌ಗಳು AI ಹ್ಯೂರಿಸ್ಟಿಕ್ಸ್ ಮೂಲಕ ಚಾಲಿತವಾಗಿವೆ. +- ನಮ್ಮ ಡೇಟಾ ವಿಜ್ಞಾನ ಪ್ರಕ್ರಿಯೆಗಳು ಇತ್ತೀಚಿನ ಗೌಪ್ಯತೆ ಮತ್ತು ಭದ್ರತಾ ಅಭ್ಯಾಸಗಳೊಂದಿಗೆ ಸಮ್ಮಿಲನವಾಗಿರಬೇಕು. + +### ಪಾರದರ್ಶಕತೆ + +AI ವ್ಯವಸ್ಥೆಗಳು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದಾಗಿರಬೇಕು. ಪಾರದರ್ಶಕತೆಯ ಪ್ರಮುಖ ಭಾಗವೆಂದರೆ AI ವ್ಯವಸ್ಥೆಗಳ ಮತ್ತು ಅವುಗಳ ಘಟಕಗಳ ವರ್ತನೆಯನ್ನು ವಿವರಿಸುವುದು. AI ವ್ಯವಸ್ಥೆಗಳ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಸುಧಾರಿಸಲು, ಹಿತಧಾರಕರು ಅವು ಹೇಗೆ ಮತ್ತು ಏಕೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು, ಇದರಿಂದ ಅವರು ಕಾರ್ಯಕ್ಷಮತೆ ಸಮಸ್ಯೆಗಳು, ಸುರಕ್ಷತೆ ಮತ್ತು ಗೌಪ್ಯತೆ ಚಿಂತೆಗಳು, ಪೂರ್ವಗ್ರಹಗಳು, ಹೊರಗೊಳ್ಳುವ ಅಭ್ಯಾಸಗಳು ಅಥವಾ ಅನೈಚ್ಛಿತ ಫಲಿತಾಂಶಗಳನ್ನು ಗುರುತಿಸಬಹುದು. AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ಬಳಸುವವರು ಅವುಗಳನ್ನು ಯಾವಾಗ, ಏಕೆ ಮತ್ತು ಹೇಗೆ ಜಾರಿಗೆ ತರುತ್ತಾರೆ ಎಂಬುದರ ಬಗ್ಗೆ ಸತ್ಯನಿಷ್ಠರಾಗಿರಬೇಕು ಮತ್ತು ಬಳಸುವ ವ್ಯವಸ್ಥೆಗಳ ಮಿತಿಗಳನ್ನು ತಿಳಿಸಬೇಕು. ಉದಾಹರಣೆಗೆ, ಬ್ಯಾಂಕ್ ತನ್ನ ಗ್ರಾಹಕ ಸಾಲ ನಿರ್ಧಾರಗಳಿಗೆ AI ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸಿದರೆ, ಫಲಿತಾಂಶಗಳನ್ನು ಪರಿಶೀಲಿಸಿ ಯಾವ ಡೇಟಾ ವ್ಯವಸ್ಥೆಯ ಶಿಫಾರಸುಗಳನ್ನು ಪ್ರಭಾವಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ. ಸರ್ಕಾರಗಳು ಕೈಗಾರಿಕೆಗಳಲ್ಲಿ AI ನಿಯಂತ್ರಣ ಆರಂಭಿಸುತ್ತಿವೆ, ಆದ್ದರಿಂದ ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ಮತ್ತು ಸಂಸ್ಥೆಗಳು AI ವ್ಯವಸ್ಥೆ ನಿಯಮಾವಳಿ ಅಗತ್ಯಗಳನ್ನು ಪೂರೈಸುತ್ತದೆಯೇ ಎಂದು ವಿವರಿಸಬೇಕು, ವಿಶೇಷವಾಗಿ ಇಚ್ಛಿತವಲ್ಲದ ಫಲಿತಾಂಶ ಇದ್ದಾಗ. + +> [🎥 AI ನಲ್ಲಿ ಪಾರದರ್ಶಕತೆಗಾಗಿ ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- AI ವ್ಯವಸ್ಥೆಗಳು ತುಂಬಾ ಸಂಕೀರ್ಣವಾಗಿರುವುದರಿಂದ ಅವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ಹೇಗೆ ವ್ಯಾಖ್ಯಾನಿಸಬೇಕು ಎಂಬುದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಕಷ್ಟ. +- ಈ ಅರ್ಥಮಾಡಿಕೊಳ್ಳದಿಕೆ ಈ ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ವಹಿಸುವ, ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮತ್ತು ದಾಖಲೆ ಮಾಡಿಕೊಳ್ಳುವ ರೀತಿಯನ್ನು ಪ್ರಭಾವಿಸುತ್ತದೆ. +- ಇದಕ್ಕಿಂತ ಮುಖ್ಯವಾಗಿ, ಈ ವ್ಯವಸ್ಥೆಗಳು ಉತ್ಪಾದಿಸುವ ಫಲಿತಾಂಶಗಳನ್ನು ಆಧರಿಸಿ ತೆಗೆದುಕೊಳ್ಳುವ ನಿರ್ಧಾರಗಳನ್ನು ಪ್ರಭಾವಿಸುತ್ತದೆ. + +### ಹೊಣೆಗಾರಿಕೆ + +AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುವ ಮತ್ತು ಜಾರಿಗೆ ತರುವವರು ತಮ್ಮ ವ್ಯವಸ್ಥೆಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದಕ್ಕೆ ಹೊಣೆಗಾರರಾಗಿರಬೇಕು. ಮುಖ ಗುರುತಿಸುವಂತಹ ಸಂವೇದನಾಶೀಲ ತಂತ್ರಜ್ಞಾನಗಳೊಂದಿಗೆ ಹೊಣೆಗಾರಿಕೆ ಅಗತ್ಯ ವಿಶೇಷವಾಗಿ ಮುಖ್ಯ. ಇತ್ತೀಚೆಗೆ, ಮುಖ ಗುರುತಿಸುವ ತಂತ್ರಜ್ಞಾನಕ್ಕೆ ಹೆಚ್ಚುತ್ತಿರುವ ಬೇಡಿಕೆ ಇದೆ, ವಿಶೇಷವಾಗಿ ಕಾನೂನು ಅನುಷ್ಠಾನ ಸಂಸ್ಥೆಗಳಿಂದ, ಅವರು ಈ ತಂತ್ರಜ್ಞಾನವನ್ನು ಕಳೆದುಹೋಗಿದ ಮಕ್ಕಳನ್ನು ಹುಡುಕಲು ಉಪಯೋಗಿಸುತ್ತಾರೆ. ಆದರೆ, ಈ ತಂತ್ರಜ್ಞಾನಗಳನ್ನು ಸರ್ಕಾರವು ತಮ್ಮ ನಾಗರಿಕರ ಮೂಲಭೂತ ಸ್ವಾತಂತ್ರ್ಯಗಳನ್ನು ಅಪಾಯಕ್ಕೆ ಹಾಕಲು ಬಳಸಬಹುದು, ಉದಾಹರಣೆಗೆ ನಿರ್ದಿಷ್ಟ ವ್ಯಕ್ತಿಗಳ ನಿರಂತರ ನಿಗಾವಳಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಮೂಲಕ. ಆದ್ದರಿಂದ, ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ಮತ್ತು ಸಂಸ್ಥೆಗಳು ತಮ್ಮ AI ವ್ಯವಸ್ಥೆಯು ವ್ಯಕ್ತಿಗಳು ಅಥವಾ ಸಮಾಜದ ಮೇಲೆ ಹೇಗೆ ಪ್ರಭಾವ ಬೀರುತ್ತದೆ ಎಂಬುದಕ್ಕೆ ಜವಾಬ್ದಾರರಾಗಿರಬೇಕು. + +[![ಮುಖ್ಯ AI ಸಂಶೋಧಕ ಮುಖ ಗುರುತಿಸುವ ಮೂಲಕ ಸಾಮೂಹಿಕ ನಿಗಾವಳಿಯ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತಾರೆ](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.kn.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವಿಡಿಯೋ: ಮುಖ ಗುರುತಿಸುವ ಮೂಲಕ ಸಾಮೂಹಿಕ ನಿಗಾವಳಿಯ ಎಚ್ಚರಿಕೆಗಳು + +ಕೊನೆಗೆ, ನಮ್ಮ ತಲೆಮಾರಿಗೆ, AI ಅನ್ನು ಸಮಾಜಕ್ಕೆ ತರುವ ಮೊದಲ ತಲೆಮಾರಿಗೆ, ದೊಡ್ಡ ಪ್ರಶ್ನೆ ಏನೆಂದರೆ, ಕಂಪ್ಯೂಟರ್‌ಗಳು ಜನರಿಗೆ ಹೊಣೆಗಾರರಾಗಿರಲು ಹೇಗೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು ಮತ್ತು ಕಂಪ್ಯೂಟರ್‌ಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುವವರು ಎಲ್ಲರಿಗೂ ಹೊಣೆಗಾರರಾಗಿರಲು ಹೇಗೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು. + +## ಪರಿಣಾಮ ಮೌಲ್ಯಮಾಪನ + +ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವ ಮೊದಲು, AI ವ್ಯವಸ್ಥೆಯ ಉದ್ದೇಶವನ್ನು, ನಿರೀಕ್ಷಿತ ಬಳಕೆಯನ್ನು, ಎಲ್ಲಿ ಜಾರಿಗೆ ತರುವುದನ್ನು ಮತ್ತು ಯಾರು ವ್ಯವಸ್ಥೆಯೊಂದಿಗೆ ಸಂವಹನ ಮಾಡಲಿದ್ದಾರೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಪರಿಣಾಮ ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದು ಮುಖ್ಯ. ಇದು ವ್ಯವಸ್ಥೆಯನ್ನು ವಿಮರ್ಶಿಸುವವರು ಅಥವಾ ಪರೀಕ್ಷಕರು ಸಾಧ್ಯವಿರುವ ಅಪಾಯಗಳು ಮತ್ತು ನಿರೀಕ್ಷಿತ ಪರಿಣಾಮಗಳನ್ನು ಗುರುತಿಸುವಾಗ ಪರಿಗಣಿಸಬೇಕಾದ ಅಂಶಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. + +ಪರಿಣಾಮ ಮೌಲ್ಯಮಾಪನ ನಡೆಸುವಾಗ ಗಮನಿಸುವ ಕ್ಷೇತ್ರಗಳು: + +* **ವ್ಯಕ್ತಿಗಳ ಮೇಲೆ ಹಾನಿಕರ ಪರಿಣಾಮ**. ಯಾವುದೇ ನಿರ್ಬಂಧಗಳು ಅಥವಾ ಅಗತ್ಯಗಳು, ಬೆಂಬಲಿಸದ ಬಳಕೆ ಅಥವಾ ವ್ಯವಸ್ಥೆಯ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ತಡೆಯುವ ಯಾವುದೇ ತಿಳಿದ ಮಿತಿಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳುವುದು, ವ್ಯವಸ್ಥೆಯನ್ನು ವ್ಯಕ್ತಿಗಳಿಗೆ ಹಾನಿ ಉಂಟುಮಾಡುವ ರೀತಿಯಲ್ಲಿ ಬಳಸದಂತೆ ಖಚಿತಪಡಿಸಲು ಅಗತ್ಯ. +* **ಡೇಟಾ ಅಗತ್ಯಗಳು**. ವ್ಯವಸ್ಥೆ ಡೇಟಾವನ್ನು ಹೇಗೆ ಮತ್ತು ಎಲ್ಲಿ ಬಳಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ವಿಮರ್ಶಕರಿಗೆ GDPR ಅಥವಾ HIPPA ಡೇಟಾ ನಿಯಮಾವಳಿಗಳಂತಹ ಯಾವುದೇ ಡೇಟಾ ಅಗತ್ಯಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಜೊತೆಗೆ, ತರಬೇತಿಗೆ ಡೇಟಾದ ಮೂಲ ಅಥವಾ ಪ್ರಮಾಣ ಸಾಕಷ್ಟು ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ. +* **ಪರಿಣಾಮದ ಸಾರಾಂಶ**. ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸುವುದರಿಂದ ಸಂಭವಿಸಬಹುದಾದ ಹಾನಿಗಳ ಪಟ್ಟಿಯನ್ನು ಸಂಗ್ರಹಿಸಿ. ML ಜೀವನಚರ್ಯೆಯಲ್ಲಿ, ಗುರುತಿಸಲ್ಪಟ್ಟ ಸಮಸ್ಯೆಗಳು ಪರಿಹಾರಗೊಂಡಿವೆ ಅಥವಾ ಪರಿಹರಿಸಲ್ಪಟ್ಟಿವೆ ಎಂದು ಪರಿಶೀಲಿಸಿ. +* **ಪ್ರತೀ ಆರು ಮೂಲ ತತ್ವಗಳಿಗೆ ಅನ್ವಯಿಸುವ ಗುರಿಗಳು**. ಪ್ರತೀ ತತ್ವದಿಂದ ಗುರಿಗಳು ಪೂರೈಸಲ್ಪಟ್ಟಿವೆ ಅಥವಾ ಯಾವುದೇ ಗ್ಯಾಪ್‌ಗಳಿವೆ ಎಂದು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ. + +## ಜವಾಬ್ದಾರಿಯುತ AI ಜೊತೆಗೆ ಡಿಬಗ್ ಮಾಡುವುದು + +ಸಾಫ್ಟ್‌ವೇರ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಡಿಬಗ್ ಮಾಡುವಂತೆ, AI ವ್ಯವಸ್ಥೆಯನ್ನು ಡಿಬಗ್ ಮಾಡುವುದು ವ್ಯವಸ್ಥೆಯ ಸಮಸ್ಯೆಗಳನ್ನು ಗುರುತಿಸುವ ಮತ್ತು ಪರಿಹರಿಸುವ ಅಗತ್ಯ ಪ್ರಕ್ರಿಯೆ. ಮಾದರಿ ನಿರೀಕ್ಷೆಯಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದ ಅಥವಾ ಜವಾಬ್ದಾರಿಯುತವಾಗದಿರುವುದಕ್ಕೆ ಹಲವಾರು ಕಾರಣಗಳಿರಬಹುದು. ಬಹುತೇಕ ಸಾಂಪ್ರದಾಯಿಕ ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಮಾಪನಗಳು ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಮಾಣಾತ್ಮಕ ಸಮಗ್ರಗಳು, ಅವು ಜವಾಬ್ದಾರಿಯುತ AI ತತ್ವಗಳನ್ನು ಉಲ್ಲಂಘಿಸುವುದನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಸಾಕಾಗುವುದಿಲ್ಲ. ಜೊತೆಗೆ, ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿ ಒಂದು ಕಪ್ಪು ಬಾಕ್ಸ್ ಆಗಿದ್ದು, ಅದರ ಫಲಿತಾಂಶವನ್ನು ಏನು ಚಾಲನೆ ಮಾಡುತ್ತದೆ ಅಥವಾ ತಪ್ಪು ಮಾಡಿದಾಗ ವಿವರಿಸುವುದು ಕಷ್ಟ. ಈ ಕೋರ್ಸ್‌ನ ನಂತರದ ಭಾಗದಲ್ಲಿ, ನಾವು ಜವಾಬ್ದಾರಿಯುತ AI ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ಡಿಬಗ್ ಮಾಡುವುದನ್ನು ಕಲಿಯುತ್ತೇವೆ. ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ಮತ್ತು AI ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರಿಗೆ ಸಮಗ್ರ ಸಾಧನವನ್ನು ಒದಗಿಸುತ್ತದೆ: + +* **ದೋಷ ವಿಶ್ಲೇಷಣೆ**. ವ್ಯವಸ್ಥೆಯ ನ್ಯಾಯತೆ ಅಥವಾ ವಿಶ್ವಾಸಾರ್ಹತೆಯನ್ನು ಪ್ರಭಾವಿಸುವ ಮಾದರಿಯ ದೋಷ ವಿತರಣೆ ಗುರುತಿಸಲು. +* **ಮಾದರಿ ಅವಲೋಕನ**. ಡೇಟಾ ಗುಂಪುಗಳ ನಡುವೆ ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯಲ್ಲಿ ಅಸಮಾನತೆಗಳಿರುವ ಸ್ಥಳಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು. +* **ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ**. ಡೇಟಾ ವಿತರಣೆ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ನ್ಯಾಯತೆ, ಸಮಾವೇಶ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹತೆ ಸಮಸ್ಯೆಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದಾದ ಯಾವುದೇ ಪೂರ್ವಗ್ರಹವನ್ನು ಗುರುತಿಸಲು. +* **ಮಾದರಿ ವ್ಯಾಖ್ಯಾನಾತ್ಮಕತೆ**. ಮಾದರಿಯ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಏನು ಪ್ರಭಾವಿಸುತ್ತದೆ ಅಥವಾ ಪ್ರೇರೇಪಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು. ಇದು ಪಾರದರ್ಶಕತೆ ಮತ್ತು ಹೊಣೆಗಾರಿಕೆಗೆ ಮಹತ್ವಪೂರ್ಣವಾಗಿದೆ. + +## 🚀 ಸವಾಲು + +ಹಾನಿಗಳನ್ನು ಮೊದಲಿನಿಂದಲೇ ಪರಿಚಯಿಸುವುದನ್ನು ತಡೆಯಲು, ನಾವು: + +- ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ಕೆಲಸ ಮಾಡುವ ಜನರ ನಡುವೆ ವೈವಿಧ್ಯಮಯ ಹಿನ್ನೆಲೆ ಮತ್ತು ದೃಷ್ಟಿಕೋನಗಳನ್ನು ಹೊಂದಿರಬೇಕು +- ನಮ್ಮ ಸಮಾಜದ ವೈವಿಧ್ಯತೆಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವ ಡೇಟಾಸೆಟ್‌ಗಳಲ್ಲಿ ಹೂಡಿಕೆ ಮಾಡಬೇಕು +- ಯಂತ್ರ ಅಧ್ಯಯನ ಜೀವನಚರ್ಯೆಯಲ್ಲಿ ಜವಾಬ್ದಾರಿಯುತ AI ಕಂಡುಹಿಡಿಯಲು ಮತ್ತು ಸರಿಪಡಿಸಲು ಉತ್ತಮ ವಿಧಾನಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಬೇಕು + +ಮಾದರಿಯ ಅಸ್ಥಿರತೆ ಮಾದರಿ ನಿರ್ಮಾಣ ಮತ್ತು ಬಳಕೆಯಲ್ಲಿ ಸ್ಪಷ್ಟವಾಗಿರುವ ನೈಜ ಜೀವನದ ಸಂದರ್ಭಗಳನ್ನು ಯೋಚಿಸಿ. ಇನ್ನೇನು ಪರಿಗಣಿಸಬೇಕು? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನದಲ್ಲಿ ನ್ಯಾಯ ಮತ್ತು ಅನ್ಯಾಯದ ತತ್ವಗಳ ಕೆಲವು ಮೂಲಭೂತಗಳನ್ನು ಕಲಿತಿದ್ದೀರಿ. + +ಈ ವಿಷಯಗಳಲ್ಲಿ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ತಿಳಿಯಲು ಈ ಕಾರ್ಯಾಗಾರವನ್ನು ವೀಕ್ಷಿಸಿ: + +- ಜವಾಬ್ದಾರಿಯುತ AI ಗಾಗಿ ಪ್ರಯತ್ನ: Besmira Nushi, Mehrnoosh Sameki ಮತ್ತು Amit Sharma ಅವರಿಂದ ತತ್ವಗಳನ್ನು ಅಭ್ಯಾಸಕ್ಕೆ ತರುವಿಕೆ + +[![Responsible AI Toolbox: An open-source framework for building responsible AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋ ವೀಕ್ಷಿಸಲು: Besmira Nushi, Mehrnoosh Sameki, ಮತ್ತು Amit Sharma ಅವರಿಂದ ಜವಾಬ್ದಾರಿಯುತ AI ನಿರ್ಮಿಸಲು RAI Toolbox: ಒಂದು ಓಪನ್-ಸೋರ್ಸ್ ಫ್ರೇಮ್ವರ್ಕ್ + +ಇನ್ನೂ ಓದಿ: + +- ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ RAI ಸಂಪನ್ಮೂಲ ಕೇಂದ್ರ: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ FATE ಸಂಶೋಧನಾ ಗುಂಪು: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox) + +ನ್ಯಾಯತೆಯ ಖಚಿತತೆಗಾಗಿ Azure ಯಂತ್ರ ಅಧ್ಯಯನದ ಸಾಧನಗಳ ಬಗ್ಗೆ ಓದಿ: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## ನಿಯೋಜನೆ + +[RAI Toolbox ಅನ್ವೇಷಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/3-fairness/assignment.md b/translations/kn/1-Introduction/3-fairness/assignment.md new file mode 100644 index 000000000..50b483809 --- /dev/null +++ b/translations/kn/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,27 @@ + +# ಜವಾಬ್ದಾರಿಯುತ AI ಟೂಲ್‌ಬಾಕ್ಸ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿ + +## ಸೂಚನೆಗಳು + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು ಜವಾಬ್ದಾರಿಯುತ AI ಟೂಲ್‌ಬಾಕ್ಸ್ ಬಗ್ಗೆ ತಿಳಿದುಕೊಂಡಿದ್ದೀರಿ, ಇದು "ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳಿಗೆ AI ವ್ಯವಸ್ಥೆಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಮತ್ತು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡುವ ಓಪನ್-ಸೋರ್ಸ್, ಸಮುದಾಯ ಚಾಲಿತ ಯೋಜನೆ." ಈ ಕಾರ್ಯಕ್ಕಾಗಿ, RAI ಟೂಲ್‌ಬಾಕ್ಸ್‌ನ [ನೋಟ್ಬುಕ್‌ಗಳ](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) ಒಂದನ್ನು ಅನ್ವೇಷಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಕಂಡುಹಿಡಿತಗಳನ್ನು ಒಂದು ಪೇಪರ್ ಅಥವಾ ಪ್ರಸ್ತುತಿಯಲ್ಲಿ ವರದಿ ಮಾಡಿ. + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡ | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆ ಅಗತ್ಯವಿದೆ | +| -------- | --------- | -------- | ----------------- | +| | ಫೇರ್‌ಲರ್ನ್‌ನ ವ್ಯವಸ್ಥೆಗಳ ಬಗ್ಗೆ ಚರ್ಚಿಸುವ ಪೇಪರ್ ಅಥವಾ ಪವರ್‌ಪಾಯಿಂಟ್ ಪ್ರಸ್ತುತಿ, ಚಾಲನೆ ಮಾಡಿದ ನೋಟ್ಬುಕ್ ಮತ್ತು ಅದನ್ನು ಚಾಲನೆ ಮಾಡುವ ಮೂಲಕ ಪಡೆದ ನಿರ್ಣಯಗಳನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ನಿರ್ಣಯಗಳಿಲ್ಲದೆ ಪೇಪರ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಯಾವುದೇ ಪೇಪರ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/4-techniques-of-ML/README.md b/translations/kn/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 000000000..1005c0389 --- /dev/null +++ b/translations/kn/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,134 @@ + +# ಯಂತ್ರ ಅಧ್ಯಯನ ತಂತ್ರಗಳು + +ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವುದು, ಬಳಸುವುದು ಮತ್ತು ನಿರ್ವಹಿಸುವ ಪ್ರಕ್ರಿಯೆ ಮತ್ತು ಅವು ಬಳಸುವ ಡೇಟಾ ಅನೇಕ ಇತರ ಅಭಿವೃದ್ಧಿ ಕಾರ್ಯಪ್ರವಾಹಗಳಿಂದ ಬಹಳ ವಿಭಿನ್ನ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ. ಈ ಪಾಠದಲ್ಲಿ, ನಾವು ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸ್ಪಷ್ಟಪಡಿಸಿ, ನೀವು ತಿಳಿದುಕೊಳ್ಳಬೇಕಾದ ಪ್ರಮುಖ ತಂತ್ರಗಳನ್ನು ವಿವರಿಸುವೆವು. ನೀವು: + +- ಯಂತ್ರ ಅಧ್ಯಯನದ ಅಡಿಯಲ್ಲಿ ಇರುವ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಉನ್ನತ ಮಟ್ಟದಲ್ಲಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತೀರಿ. +- 'ಮಾದರಿಗಳು', 'ಭವಿಷ್ಯವಾಣಿ', ಮತ್ತು 'ತರಬೇತಿ ಡೇಟಾ' ಎಂಬ ಮೂಲಭೂತ ಸಂಪ್ರದಾಯಗಳನ್ನು ಅನ್ವೇಷಿಸುತ್ತೀರಿ. + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](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") + +> 🎥 ಈ ಪಾಠವನ್ನು ಕೆಲಸಮಾಡುವ ಸಣ್ಣ ವೀಡಿಯೊಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +## ಪರಿಚಯ + +ಉನ್ನತ ಮಟ್ಟದಲ್ಲಿ, ಯಂತ್ರ ಅಧ್ಯಯನ (ML) ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ರಚಿಸುವ ಕಲೆ ಹಲವಾರು ಹಂತಗಳಿಂದ ಕೂಡಿದೆ: + +1. **ಪ್ರಶ್ನೆಯನ್ನು ನಿರ್ಧರಿಸಿ**. ಬಹುತೇಕ ML ಪ್ರಕ್ರಿಯೆಗಳು ಸರಳ ಶರತಿನ ಪ್ರೋಗ್ರಾಮ್ ಅಥವಾ ನಿಯಮಾಧಾರಿತ ಎಂಜಿನ್ ಮೂಲಕ ಉತ್ತರಿಸದ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುವುದರಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತವೆ. ಈ ಪ್ರಶ್ನೆಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಡೇಟಾ ಸಂಗ್ರಹದ ಆಧಾರದ ಮೇಲೆ ಭವಿಷ್ಯವಾಣಿಗಳ ಸುತ್ತಲೂ ಇರುತ್ತವೆ. +2. **ಡೇಟಾ ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಸಿದ್ಧಪಡಿಸಿ**. ನಿಮ್ಮ ಪ್ರಶ್ನೆಗೆ ಉತ್ತರಿಸಲು, ನಿಮಗೆ ಡೇಟಾ ಬೇಕಾಗುತ್ತದೆ. ನಿಮ್ಮ ಡೇಟಾದ ಗುಣಮಟ್ಟ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಪ್ರಮಾಣವು ನಿಮ್ಮ ಪ್ರಾಥಮಿಕ ಪ್ರಶ್ನೆಗೆ ನೀವು ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಉತ್ತರಿಸಬಹುದು ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವುದು ಈ ಹಂತದ ಪ್ರಮುಖ ಅಂಶವಾಗಿದೆ. ಈ ಹಂತದಲ್ಲಿ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಗುಂಪುಗಳಾಗಿ ಡೇಟಾವನ್ನು ವಿಭಜಿಸುವುದೂ ಸೇರಿದೆ. +3. **ತರಬೇತಿ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡಿ**. ನಿಮ್ಮ ಪ್ರಶ್ನೆ ಮತ್ತು ಡೇಟಾದ ಸ್ವಭಾವದ ಆಧಾರದ ಮೇಲೆ, ನೀವು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಉತ್ತಮವಾಗಿ ಪ್ರತಿಬಿಂಬಿಸುವ ಮತ್ತು ಅದಕ್ಕೆ ಸರಿಯಾದ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡಲು ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಲು ಹೇಗೆ ತರಬೇತಿಮಾಡಬೇಕೆಂದು ಆಯ್ಕೆಮಾಡಬೇಕು. ಇದು ನಿಮ್ಮ ML ಪ್ರಕ್ರಿಯೆಯ ಭಾಗವಾಗಿದ್ದು, ವಿಶೇಷ ಪರಿಣತಿ ಮತ್ತು ಬಹುಶಃ ಸಾಕಷ್ಟು ಪ್ರಯೋಗಗಳನ್ನು ಅಗತ್ಯವಿರುತ್ತದೆ. +4. **ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ**. ನಿಮ್ಮ ತರಬೇತಿ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು, ನೀವು ವಿವಿಧ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬಳಸಿ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ ಡೇಟಾದಲ್ಲಿನ ಮಾದರಿಗಳನ್ನು ಗುರುತಿಸುವಂತೆ ಮಾಡುತ್ತೀರಿ. ಮಾದರಿ ಒಳಗಿನ ತೂಕಗಳನ್ನು ಬಳಸಬಹುದು, ಅವುಗಳನ್ನು ಹೊಂದಿಸಿ ಡೇಟಾದ ಕೆಲವು ಭಾಗಗಳನ್ನು ಪ್ರಾಧಾನ್ಯತೆ ನೀಡಲು ಉತ್ತಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು. +5. **ಮಾದರಿಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ**. ನೀವು ಸಂಗ್ರಹಿಸಿದ ಡೇಟಾದಿಂದ ಮೊದಲೇ ನೋಡದ ಡೇಟಾ (ನಿಮ್ಮ ಪರೀಕ್ಷಾ ಡೇಟಾ) ಬಳಸಿ ಮಾದರಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ ಎಂದು ನೋಡುತ್ತೀರಿ. +6. **ಪ್ಯಾರಾಮೀಟರ್ ಟ್ಯೂನಿಂಗ್**. ನಿಮ್ಮ ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯ ಆಧಾರದ ಮೇಲೆ, ನೀವು ವಿವಿಧ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳು ಅಥವಾ ಅಲ್ಗಾರಿದಮ್‌ಗಳ ವರ್ತನೆಯನ್ನು ನಿಯಂತ್ರಿಸುವ ಚರಗಳನ್ನು ಬಳಸಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮರುಕಳಿಸಬಹುದು. +7. **ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿ**. ಹೊಸ ಇನ್‌ಪುಟ್‌ಗಳನ್ನು ಬಳಸಿ ನಿಮ್ಮ ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ಪರೀಕ್ಷಿಸಿ. + +## ಯಾವ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಬೇಕು + +ಕಂಪ್ಯೂಟರ್‌ಗಳು ಡೇಟಾದಲ್ಲಿನ ಗುಪ್ತ ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವಲ್ಲಿ ವಿಶೇಷವಾಗಿ ನಿಪುಣರಾಗಿವೆ. ಈ ಉಪಯೋಗವು ನಿರ್ದಿಷ್ಟ ಕ್ಷೇತ್ರದ ಬಗ್ಗೆ ಪ್ರಶ್ನೆಗಳಿರುವ ಸಂಶೋಧಕರಿಗೆ ಬಹಳ ಸಹಾಯಕವಾಗಿದೆ, ಅವುಗಳನ್ನು ಸರಳ ನಿಯಮಾಧಾರಿತ ಎಂಜಿನ್ ರಚಿಸುವ ಮೂಲಕ ಸುಲಭವಾಗಿ ಉತ್ತರಿಸಲಾಗುವುದಿಲ್ಲ. ಉದಾಹರಣೆಗೆ, ಒಂದು ಅಕ್ಟ್ಯೂರಿಯಲ್ ಕಾರ್ಯದಲ್ಲಿ, ಡೇಟಾ ವಿಜ್ಞಾನಿ ಧೂಮಪಾನ ಮಾಡುವವರ ಮತ್ತು ಧೂಮಪಾನ ಮಾಡದವರ ಮರಣಾಂಶದ ಬಗ್ಗೆ ಕೈಯಿಂದ ರಚಿಸಿದ ನಿಯಮಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು. + +ಆದರೆ, ಅನೇಕ ಇತರ ಚರಗಳನ್ನು ಸಮೀಕರಣಕ್ಕೆ ಸೇರಿಸಿದಾಗ, ಭೂತಕಾಲದ ಆರೋಗ್ಯ ಇತಿಹಾಸದ ಆಧಾರದ ಮೇಲೆ ಭವಿಷ್ಯದ ಮರಣಾಂಶ ದರಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ML ಮಾದರಿ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಬಹುದು. ಇನ್ನೊಂದು ಸಂತೋಷದ ಉದಾಹರಣೆ ಎಂದರೆ, ಲ್ಯಾಟಿಟ್ಯೂಡ್, ಲಾಂಗಿಟ್ಯೂಡ್, ಹವಾಮಾನ ಬದಲಾವಣೆ, ಸಮುದ್ರದ ಸಮೀಪತೆ, ಜೆಟ್ ಸ್ಟ್ರೀಮ್ ಮಾದರಿಗಳು ಮತ್ತು ಇನ್ನಷ್ಟು ಡೇಟಾ ಆಧಾರದ ಮೇಲೆ ನಿರ್ದಿಷ್ಟ ಸ್ಥಳದಲ್ಲಿ ಏಪ್ರಿಲ್ ತಿಂಗಳ ಹವಾಮಾನ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡುವುದು. + +✅ ಈ [ಸ್ಲೈಡ್ ಡೆಕ್](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) ಹವಾಮಾನ ಮಾದರಿಗಳ ಮೇಲೆ ML ಬಳಕೆಯ ಐತಿಹಾಸಿಕ ದೃಷ್ಟಿಕೋನವನ್ನು ನೀಡುತ್ತದೆ. + +## ನಿರ್ಮಾಣಕ್ಕೂ ಮುಂಚಿನ ಕಾರ್ಯಗಳು + +ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ನೀವು ಪೂರ್ಣಗೊಳಿಸಬೇಕಾದ ಹಲವಾರು ಕಾರ್ಯಗಳಿವೆ. ನಿಮ್ಮ ಪ್ರಶ್ನೆಯನ್ನು ಪರೀಕ್ಷಿಸಲು ಮತ್ತು ಮಾದರಿಯ ಭವಿಷ್ಯವಾಣಿಗಳ ಆಧಾರದ ಮೇಲೆ ಊಹೆಯನ್ನು ರೂಪಿಸಲು, ನೀವು ಹಲವಾರು ಅಂಶಗಳನ್ನು ಗುರುತಿಸಿ ಸಂರಚಿಸಬೇಕಾಗುತ್ತದೆ. + +### ಡೇಟಾ + +ನಿಮ್ಮ ಪ್ರಶ್ನೆಗೆ ಯಾವುದೇ ರೀತಿಯ ಖಚಿತತೆಯಿಂದ ಉತ್ತರಿಸಲು, ನಿಮಗೆ ಸರಿಯಾದ ಪ್ರಕಾರದ ಸಾಕಷ್ಟು ಡೇಟಾ ಬೇಕಾಗುತ್ತದೆ. ಈ ಸಮಯದಲ್ಲಿ ನೀವು ಮಾಡಬೇಕಾದ ಎರಡು ಕಾರ್ಯಗಳಿವೆ: + +- **ಡೇಟಾ ಸಂಗ್ರಹಿಸಿ**. ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಯಲ್ಲಿ ನ್ಯಾಯತೆಯ ಬಗ್ಗೆ ಹಿಂದಿನ ಪಾಠವನ್ನು ಗಮನದಲ್ಲಿಟ್ಟುಕೊಂಡು, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಜಾಗರೂಕತೆಯಿಂದ ಸಂಗ್ರಹಿಸಿ. ಈ ಡೇಟಾದ ಮೂಲಗಳು, ಅದರಲ್ಲಿರುವ ಯಾವುದೇ ಅಂತರಂಗಪೂರ್ವಾಗ್ರಹಗಳು ಮತ್ತು ಅದರ ಮೂಲವನ್ನು ದಾಖಲಿಸಿ. +- **ಡೇಟಾ ಸಿದ್ಧಪಡಿಸಿ**. ಡೇಟಾ ಸಿದ್ಧಪಡಿಸುವ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಹಲವಾರು ಹಂತಗಳಿವೆ. ನೀವು ವಿಭಿನ್ನ ಮೂಲಗಳಿಂದ ಬಂದಿದ್ದರೆ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಿ ಸಾಮಾನ್ಯೀಕರಿಸಬೇಕಾಗಬಹುದು. ನೀವು ಡೇಟಾದ ಗುಣಮಟ್ಟ ಮತ್ತು ಪ್ರಮಾಣವನ್ನು ಸುಧಾರಿಸಲು ವಿವಿಧ ವಿಧಾನಗಳನ್ನು ಬಳಸಬಹುದು, ಉದಾಹರಣೆಗೆ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಸಂಖ್ಯೆಗಳಾಗಿ ಪರಿವರ್ತಿಸುವುದು ([Clustering](../../5-Clustering/1-Visualize/README.md) ನಲ್ಲಿ ಮಾಡುತ್ತೇವೆ). ನೀವು ಮೂಲದ ಆಧಾರದ ಮೇಲೆ ಹೊಸ ಡೇಟಾವನ್ನು ರಚಿಸಬಹುದು ([Classification](../../4-Classification/1-Introduction/README.md) ನಲ್ಲಿ ಮಾಡುತ್ತೇವೆ). ನೀವು ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಸಂಪಾದಿಸಬಹುದು ([Web App](../../3-Web-App/README.md) ಪಾಠದ ಮುಂಚೆ ಮಾಡುತ್ತೇವೆ). ಕೊನೆಗೆ, ನೀವು ತರಬೇತಿ ತಂತ್ರಗಳನ್ನು ಅವಲಂಬಿಸಿ ಅದನ್ನು ಯಾದೃಚ್ಛಿಕಗೊಳಿಸಿ ಮಿಶ್ರಣ ಮಾಡಬೇಕಾಗಬಹುದು. + +✅ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ ನಂತರ, ಅದರ ಆಕಾರವು ನಿಮ್ಮ ಉದ್ದೇಶಿತ ಪ್ರಶ್ನೆಯನ್ನು ಪರಿಹರಿಸಲು ಅನುಕೂಲಕರವಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ. ನೀವು ನೀಡಿದ ಕಾರ್ಯದಲ್ಲಿ ಡೇಟಾ ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು, ನಾವು [Clustering](../../5-Clustering/1-Visualize/README.md) ಪಾಠಗಳಲ್ಲಿ ಕಂಡುಕೊಳ್ಳುವಂತೆ! + +### ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಗುರಿ + +[ವೈಶಿಷ್ಟ್ಯ](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) ಎಂದರೆ ನಿಮ್ಮ ಡೇಟಾದ ಮಾಪನೀಯ ಗುಣಲಕ್ಷಣ. ಅನೇಕ ಡೇಟಾಸೆಟ್‌ಗಳಲ್ಲಿ ಇದು 'ದಿನಾಂಕ', 'ಗಾತ್ರ' ಅಥವಾ 'ಬಣ್ಣ' ಎಂಬ ಕಾಲಮ್ ಶೀರ್ಷಿಕೆಯಾಗಿ ವ್ಯಕ್ತವಾಗುತ್ತದೆ. ನಿಮ್ಮ ವೈಶಿಷ್ಟ್ಯ ಚರ, ಸಾಮಾನ್ಯವಾಗಿ ಕೋಡ್‌ನಲ್ಲಿ `X` ಎಂದು ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ, ಇದು ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಲು ಬಳಸುವ ಇನ್‌ಪುಟ್ ಚರವನ್ನು ಸೂಚಿಸುತ್ತದೆ. + +ಗುರಿ ಎಂದರೆ ನೀವು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಯತ್ನಿಸುತ್ತಿರುವ ವಸ್ತು. ಗುರಿ ಸಾಮಾನ್ಯವಾಗಿ ಕೋಡ್‌ನಲ್ಲಿ `y` ಎಂದು ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ, ಇದು ನಿಮ್ಮ ಡೇಟಾದಿಂದ ಕೇಳುತ್ತಿರುವ ಪ್ರಶ್ನೆಗೆ ಉತ್ತರವನ್ನು ಸೂಚಿಸುತ್ತದೆ: ಡಿಸೆಂಬರ್‌ನಲ್ಲಿ, ಯಾವ **ಬಣ್ಣದ** ಕಂಬಳಿಗಳು ಅತಿ ಕಡಿಮೆ ಬೆಲೆಯಿರುತ್ತವೆ? ಸಾನ್ ಫ್ರಾನ್ಸಿಸ್ಕೋದಲ್ಲಿ, ಯಾವ ನೆರೆಹೊರೆಯು ಉತ್ತಮ ರಿಯಲ್ ಎಸ್ಟೇಟ್ **ಬೆಲೆ** ಹೊಂದಿರುತ್ತದೆ? ಕೆಲವೊಮ್ಮೆ ಗುರಿಯನ್ನು ಲೇಬಲ್ ಗುಣಲಕ್ಷಣ ಎಂದು ಕೂಡ ಕರೆಯುತ್ತಾರೆ. + +### ನಿಮ್ಮ ವೈಶಿಷ್ಟ್ಯ ಚರವನ್ನು ಆಯ್ಕೆಮಾಡುವುದು + +🎓 **ವೈಶಿಷ್ಟ್ಯ ಆಯ್ಕೆ ಮತ್ತು ವೈಶಿಷ್ಟ್ಯ ಹೊರತೆಗೆಯುವಿಕೆ** ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸುವಾಗ ಯಾವ ಚರವನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕು ಎಂದು ನೀವು ಹೇಗೆ ತಿಳಿದುಕೊಳ್ಳುತ್ತೀರಿ? ನೀವು ಬಹುಶಃ ಅತ್ಯುತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮಾದರಿಗಾಗಿ ಸರಿಯಾದ ಚರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಲು ವೈಶಿಷ್ಟ್ಯ ಆಯ್ಕೆ ಅಥವಾ ವೈಶಿಷ್ಟ್ಯ ಹೊರತೆಗೆಯುವಿಕೆ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಅನುಸರಿಸುತ್ತೀರಿ. ಅವು ಒಂದೇ ಅಲ್ಲ: "ವೈಶಿಷ್ಟ್ಯ ಹೊರತೆಗೆಯುವಿಕೆ ಮೂಲ ವೈಶಿಷ್ಟ್ಯಗಳ ಕಾರ್ಯಗಳಿಂದ ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ರಚಿಸುತ್ತದೆ, ಆದರೆ ವೈಶಿಷ್ಟ್ಯ ಆಯ್ಕೆ ವೈಶಿಷ್ಟ್ಯಗಳ ಉಪಸಮೂಹವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ." ([ಮೂಲ](https://wikipedia.org/wiki/Feature_selection)) + +### ನಿಮ್ಮ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸಿ + +ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಉಪಕರಣಗಳ ಪ್ರಮುಖ ಅಂಶವೆಂದರೆ Seaborn ಅಥವಾ MatPlotLib ಮುಂತಾದ ಕೆಲವು ಅತ್ಯುತ್ತಮ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಬಳಸಿ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವ ಶಕ್ತಿ. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ದೃಶ್ಯರೂಪದಲ್ಲಿ ಪ್ರತಿನಿಧಿಸುವುದು ನೀವು ಬಳಸಬಹುದಾದ ಗುಪ್ತ ಸಂಬಂಧಗಳನ್ನು ಅನಾವರಣಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು. ನಿಮ್ಮ ದೃಶ್ಯೀಕರಣಗಳು ಅಸಮತೋಲನ ಅಥವಾ ಅಸಮತೋಲನ ಡೇಟಾವನ್ನು ಅನಾವರಣಗೊಳಿಸಲು ಸಹ ಸಹಾಯ ಮಾಡಬಹುದು ([Classification](../../4-Classification/2-Classifiers-1/README.md) ನಲ್ಲಿ ನಾವು ಕಂಡುಕೊಳ್ಳುವಂತೆ). + +### ನಿಮ್ಮ ಡೇಟಾಸೆಟ್ ಅನ್ನು ವಿಭಜಿಸಿ + +ತರಬೇತಿಗೆ ಮುಂಚೆ, ನೀವು ನಿಮ್ಮ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಅಸಮಾನ ಗಾತ್ರದ ಎರಡು ಅಥವಾ ಹೆಚ್ಚು ಭಾಗಗಳಾಗಿ ವಿಭಜಿಸಬೇಕು, ಆದರೆ ಅವು ಡೇಟಾವನ್ನು ಚೆನ್ನಾಗಿ ಪ್ರತಿನಿಧಿಸಬೇಕು. + +- **ತರಬೇತಿ**. ಡೇಟಾಸೆಟ್‌ನ ಈ ಭಾಗವನ್ನು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಲು ಹೊಂದಿಸಲಾಗುತ್ತದೆ. ಈ ಸೆಟ್ ಮೂಲ ಡೇಟಾಸೆಟ್‌ನ ಬಹುಮತವನ್ನು ಹೊಂದಿದೆ. +- **ಪರೀಕ್ಷೆ**. ಪರೀಕ್ಷಾ ಡೇಟಾಸೆಟ್ ಸ್ವತಂತ್ರ ಡೇಟಾ ಗುಂಪಾಗಿದೆ, ಸಾಮಾನ್ಯವಾಗಿ ಮೂಲ ಡೇಟಾದಿಂದ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ, ನೀವು ನಿರ್ಮಿಸಿದ ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ದೃಢೀಕರಿಸಲು ಬಳಸುತ್ತೀರಿ. +- **ಮಾನ್ಯತೆ**. ಮಾನ್ಯತೆ ಸೆಟ್ ಒಂದು ಸಣ್ಣ ಸ್ವತಂತ್ರ ಉದಾಹರಣೆಗಳ ಗುಂಪು, ನೀವು ಮಾದರಿಯ ಹೈಪರ್‌ಪ್ಯಾರಾಮೀಟರ್‌ಗಳು ಅಥವಾ ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ಸುಧಾರಿಸಲು ಬಳಸುತ್ತೀರಿ. ನಿಮ್ಮ ಡೇಟಾದ ಗಾತ್ರ ಮತ್ತು ನೀವು ಕೇಳುತ್ತಿರುವ ಪ್ರಶ್ನೆಯ ಆಧಾರದ ಮೇಲೆ, ನೀವು ಈ ಮೂರನೇ ಸೆಟ್ ಅನ್ನು ನಿರ್ಮಿಸುವ ಅಗತ್ಯವಿಲ್ಲದಿರಬಹುದು ([Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md) ನಲ್ಲಿ ನಾವು ಗಮನಿಸುತ್ತೇವೆ). + +## ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸುವುದು + +ನಿಮ್ಮ ತರಬೇತಿ ಡೇಟಾವನ್ನು ಬಳಸಿ, ನಿಮ್ಮ ಗುರಿ ವಿವಿಧ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬಳಸಿ ಮಾದರಿಯನ್ನು **ತರಬೇತಿಮಾಡುವುದು** ಅಥವಾ ನಿಮ್ಮ ಡೇಟಾದ ಸಾಂಖ್ಯಿಕ ಪ್ರತಿನಿಧಾನವನ್ನು ನಿರ್ಮಿಸುವುದು. ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡುವುದು ಅದನ್ನು ಡೇಟಾಗೆ ಪರಿಚಯಿಸುವುದು ಮತ್ತು ಅದು ಕಂಡುಹಿಡಿದ ಮಾದರಿಗಳನ್ನು ಊಹಿಸಲು, ಪರಿಶೀಲಿಸಲು ಮತ್ತು ಅಂಗೀಕರಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ. + +### ತರಬೇತಿ ವಿಧಾನವನ್ನು ನಿರ್ಧರಿಸಿ + +ನಿಮ್ಮ ಪ್ರಶ್ನೆ ಮತ್ತು ಡೇಟಾದ ಸ್ವಭಾವದ ಆಧಾರದ ಮೇಲೆ, ನೀವು ಅದನ್ನು ತರಬೇತಿಮಾಡಲು ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತೀರಿ. [Scikit-learn ನ ಡಾಕ್ಯುಮೆಂಟೇಶನ್](https://scikit-learn.org/stable/user_guide.html) ಅನ್ನು ಅನುಸರಿಸಿ - ನಾವು ಈ ಕೋರ್ಸ್‌ನಲ್ಲಿ ಬಳಸುತ್ತೇವೆ - ನೀವು ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಲು ಹಲವಾರು ವಿಧಾನಗಳನ್ನು ಅನ್ವೇಷಿಸಬಹುದು. ನಿಮ್ಮ ಅನುಭವದ ಆಧಾರದ ಮೇಲೆ, ನೀವು ಅತ್ಯುತ್ತಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಹಲವು ವಿಭಿನ್ನ ವಿಧಾನಗಳನ್ನು ಪ್ರಯತ್ನಿಸಬೇಕಾಗಬಹುದು. ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಅಪ್ರತ്യക്ഷ ಡೇಟಾವನ್ನು ನೀಡುವ ಮೂಲಕ, ನಿಖರತೆ, ಪೂರ್ವಾಗ್ರಹ ಮತ್ತು ಇತರ ಗುಣಮಟ್ಟ ಕುಗ್ಗಿಸುವ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಶೀಲಿಸುವ ಮೂಲಕ, ಮತ್ತು ಕಾರ್ಯಕ್ಕೆ ಸೂಕ್ತವಾದ ತರಬೇತಿ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ನೀವು ಅನುಭವಿಸುವಿರಿ. + +### ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ + +ನಿಮ್ಮ ತರಬೇತಿ ಡೇಟಾ ಸಿದ್ಧವಾಗಿರುವಾಗ, ನೀವು ಅದನ್ನು 'ಫಿಟ್' ಮಾಡಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. ಬಹುಶಃ ನೀವು ಹಲವಾರು ML ಗ್ರಂಥಾಲಯಗಳಲ್ಲಿ 'model.fit' ಎಂಬ ಕೋಡ್ ಅನ್ನು ಕಾಣುತ್ತೀರಿ - ಈ ಸಮಯದಲ್ಲಿ ನೀವು ನಿಮ್ಮ ವೈಶಿಷ್ಟ್ಯ ಚರವನ್ನು ಮೌಲ್ಯಗಳ ಸರಣಿಯಾಗಿ (ಸಾಮಾನ್ಯವಾಗಿ 'X') ಮತ್ತು ಗುರಿ ಚರವನ್ನು (ಸಾಮಾನ್ಯವಾಗಿ 'y') ಕಳುಹಿಸುತ್ತೀರಿ. + +### ಮಾದರಿಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ + +ತರಬೇತಿ ಪ್ರಕ್ರಿಯೆ ಪೂರ್ಣಗೊಂಡ ನಂತರ (ದೊಡ್ಡ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಲು ಹಲವಾರು ಪುನರಾವೃತ್ತಿಗಳು ಅಥವಾ 'ಎಪೋಕ್ಸ್' ಬೇಕಾಗಬಹುದು), ನೀವು ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ಬಳಸಿ ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಬಹುದು. ಈ ಡೇಟಾ ಮೂಲ ಡೇಟಾದ ಉಪಸಮೂಹವಾಗಿದ್ದು, ಮಾದರಿ ಮೊದಲು ವಿಶ್ಲೇಷಿಸದ ಡೇಟಾಗೆ ಸೇರಿದೆ. ನೀವು ನಿಮ್ಮ ಮಾದರಿಯ ಗುಣಮಟ್ಟದ ಬಗ್ಗೆ ಮೆಟ್ರಿಕ್‌ಗಳ ಟೇಬಲ್ ಅನ್ನು ಮುದ್ರಿಸಬಹುದು. + +🎓 **ಮಾದರಿ ಫಿಟಿಂಗ್** + +ಯಂತ್ರ ಅಧ್ಯಯನದ ಸಂದರ್ಭದಲ್ಲಿ, ಮಾದರಿ ಫಿಟಿಂಗ್ ಎಂದರೆ ಮಾದರಿಯ ಅಡಿಪಾಯ ಕಾರ್ಯವು ಪರಿಚಿತವಲ್ಲದ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಯತ್ನಿಸುವಾಗ ಅದರ ನಿಖರತೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ. + +🎓 **ಅಡಿಗೊಳಿಸುವಿಕೆ** ಮತ್ತು **ಅತಿಗೊಳಿಸುವಿಕೆ** ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳು, ಅವು ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು ಕುಗ್ಗಿಸುತ್ತವೆ, ಏಕೆಂದರೆ ಮಾದರಿ ಸರಿಯಾಗಿ ಹೊಂದದಿರುವುದು ಅಥವಾ ತುಂಬಾ ಚೆನ್ನಾಗಿ ಹೊಂದಿರುವುದು. ಇದರಿಂದ ಮಾದರಿ ತರಬೇತಿ ಡೇಟಾದೊಂದಿಗೆ ತುಂಬಾ ಸಮೀಪವಾಗಿ ಅಥವಾ ತುಂಬಾ ದೂರವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತದೆ. ಅತಿಗೊಳಿಸಿದ ಮಾದರಿ ತರಬೇತಿ ಡೇಟಾದ ವಿವರಗಳು ಮತ್ತು ಶಬ್ದವನ್ನು ತುಂಬಾ ಚೆನ್ನಾಗಿ ಕಲಿತಿರುವುದರಿಂದ ಅದನ್ನು ತುಂಬಾ ಚೆನ್ನಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತದೆ. ಅಡಿಗೊಳಿಸಿದ ಮಾದರಿ ನಿಖರವಿಲ್ಲ, ಏಕೆಂದರೆ ಅದು ತನ್ನ ತರಬೇತಿ ಡೇಟಾವನ್ನು ಅಥವಾ ಇನ್ನೂ 'ನೋಡದ' ಡೇಟಾವನ್ನು ಸರಿಯಾಗಿ ವಿಶ್ಲೇಷಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. + +![overfitting model](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.kn.png) +> ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +## ಪ್ಯಾರಾಮೀಟರ್ ಟ್ಯೂನಿಂಗ್ + +ನಿಮ್ಮ ಪ್ರಾಥಮಿಕ ತರಬೇತಿ ಪೂರ್ಣಗೊಂಡ ನಂತರ, ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು ಗಮನಿಸಿ ಮತ್ತು ಅದರ 'ಹೈಪರ್‌ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು' ಸುಧಾರಿಸಲು ಪರಿಗಣಿಸಿ. ಪ್ರಕ್ರಿಯೆಯ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ [ಡಾಕ್ಯುಮೆಂಟೇಶನ್](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) ಓದಿ. + +## ಭವಿಷ್ಯವಾಣಿ + +ಈ ಸಮಯದಲ್ಲಿ ನೀವು ಸಂಪೂರ್ಣ ಹೊಸ ಡೇಟಾವನ್ನು ಬಳಸಿ ನಿಮ್ಮ ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ಪರೀಕ್ಷಿಸಬಹುದು. 'ಅಪ್ಲೈಡ್' ML ಪರಿಸರದಲ್ಲಿ, ನೀವು ಮಾದರಿಯನ್ನು ಉತ್ಪಾದನೆಯಲ್ಲಿ ಬಳಸಲು ವೆಬ್ ಆಸ್ತಿ ನಿರ್ಮಿಸುತ್ತಿದ್ದರೆ, ಈ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಬಳಕೆದಾರ ಇನ್‌ಪುಟ್ (ಉದಾಹರಣೆಗೆ ಬಟನ್ ಒತ್ತುವುದು) ಸಂಗ್ರಹಿಸಿ, ಚರವನ್ನು ಸೆಟ್ ಮಾಡಿ ಮತ್ತು ಮಾದರಿಗೆ ಇನ್ಫರೆನ್ಸ್ ಅಥವಾ ಮೌಲ್ಯಮಾಪನಕ್ಕಾಗಿ ಕಳುಹಿಸುವುದು ಸೇರಬಹುದು. + +ಈ ಪಾಠಗಳಲ್ಲಿ, ನೀವು ಈ ಹಂತಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸಿದ್ಧಪಡಿಸುವುದು, ನಿರ್ಮಿಸುವುದು, ಪರೀಕ್ಷಿಸುವುದು, ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದನ್ನು ಮತ್ತು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದನ್ನು ಕಂಡುಕೊಳ್ಳುತ್ತೀರಿ - ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಎಲ್ಲಾ ಚಲನೆಗಳು ಮತ್ತು ಇನ್ನಷ್ಟು, ನೀವು 'ಫುಲ್ ಸ್ಟಾಕ್' ML ಎಂಜಿನಿಯರ್ ಆಗಲು ನಿಮ್ಮ ಪ್ರಯಾಣದಲ್ಲಿ ಮುಂದುವರಿಯುವಂತೆ. + +--- + +## 🚀ಸವಾಲು + +ML ಅಭ್ಯಾಸಗಾರರ ಹಂತಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವ ಫ್ಲೋ ಚಾರ್ಟ್ ರಚಿಸಿ. ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ನೀವು ಈಗ ಎಲ್ಲಿದ್ದೀರಿ ಎಂದು ನೀವು ಎಲ್ಲಿ ನೋಡುತ್ತೀರಿ? ನೀವು ಯಾವಲ್ಲಿ ಕಷ್ಟವನ್ನು ಎದುರಿಸುವಿರಿ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತೀರಿ? ನಿಮಗೆ ಯಾವುದು ಸುಲಭವಾಗುತ್ತದೆ? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ತಮ್ಮ ದೈನಂದಿನ ಕೆಲಸವನ್ನು ಚರ್ಚಿಸುವ ಸಂದರ್ಶನಗಳನ್ನು ಆನ್ಲೈನ್‌ನಲ್ಲಿ ಹುಡುಕಿ. ಇಲ್ಲಿ ಒಂದು [ಇದು](https://www.youtube.com/watch?v=Z3IjgbbCEfs) ಇದೆ. + +## ನಿಯೋಜನೆ + +[ಡೇಟಾ ವಿಜ್ಞಾನಿಯನ್ನು ಸಂದರ್ಶನ ಮಾಡಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/4-techniques-of-ML/assignment.md b/translations/kn/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 000000000..0d9b7c2c5 --- /dev/null +++ b/translations/kn/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,27 @@ + +# ಡೇಟಾ ಸೈನ್ಟಿಸ್ಟ್ ಅನ್ನು ಸಂದರ್ಶನ ಮಾಡಿ + +## ಸೂಚನೆಗಳು + +ನಿಮ್ಮ ಕಂಪನಿಯಲ್ಲಿ, ಬಳಕೆದಾರ ಗುಂಪಿನಲ್ಲಿ, ಅಥವಾ ನಿಮ್ಮ ಸ್ನೇಹಿತರು ಅಥವಾ ಸಹ ವಿದ್ಯಾರ್ಥಿಗಳ ನಡುವೆ, ವೃತ್ತಿಪರವಾಗಿ ಡೇಟಾ ಸೈನ್ಟಿಸ್ಟ್ ಆಗಿ ಕೆಲಸ ಮಾಡುವ ಯಾರನ್ನಾದರೂ ಮಾತನಾಡಿ. ಅವರ ದೈನಂದಿನ ಕಾರ್ಯಗಳ ಬಗ್ಗೆ ಒಂದು ಚಿಕ್ಕ ಪ್ರಬಂಧ (500 ಪದಗಳು) ಬರೆಯಿರಿ. ಅವರು ವಿಶೇಷಜ್ಞರೇ, ಅಥವಾ 'ಫುಲ್ ಸ್ಟಾಕ್' ಆಗಿ ಕೆಲಸ ಮಾಡುತ್ತಾರೆಯೇ? + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | +| | ಸರಿಯಾದ ಉದ್ದದ ಪ್ರಬಂಧ, ಮೂಲಗಳನ್ನು ಸೂಚಿಸಿ, .doc ಫೈಲ್ ಆಗಿ ಸಲ್ಲಿಸಲಾಗಿದೆ | ಪ್ರಬಂಧವು ಸರಿಯಾಗಿ ಮೂಲಗಳನ್ನು ಸೂಚಿಸದಿದ್ದರೆ ಅಥವಾ ಅಗತ್ಯ ಉದ್ದಕ್ಕಿಂತ ಕಡಿಮೆ ಇದ್ದರೆ | ಯಾವುದೇ ಪ್ರಬಂಧ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/1-Introduction/README.md b/translations/kn/1-Introduction/README.md new file mode 100644 index 000000000..b2ac7375f --- /dev/null +++ b/translations/kn/1-Introduction/README.md @@ -0,0 +1,38 @@ + +# ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ + +ಪಠ್ಯಕ್ರಮದ ಈ ವಿಭಾಗದಲ್ಲಿ, ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನ ಕ್ಷೇತ್ರದ ಮೂಲ ತತ್ವಗಳನ್ನು ಪರಿಚಯಿಸಿಕೊಳ್ಳುತ್ತೀರಿ, ಅದು ಏನು ಮತ್ತು ಅದರ ಇತಿಹಾಸ ಮತ್ತು ಸಂಶೋಧಕರು ಅದನ್ನು ಬಳಸುವ ತಂತ್ರಗಳನ್ನು ತಿಳಿಯುತ್ತೀರಿ. ಬನ್ನಿ, ಈ ಹೊಸ ಯಂತ್ರ ಅಧ್ಯಯನ ಲೋಕವನ್ನು ಒಟ್ಟಿಗೆ ಅನ್ವೇಷಿಸೋಣ! + +![globe](../../../translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.kn.jpg) +> ಫೋಟೋ ಬಿಲ್ ಆಕ್ಸ್ಫರ್ಡ್ ಅವರಿಂದ ಅನ್ಸ್ಪ್ಲ್ಯಾಶ್ ನಲ್ಲಿ + +### ಪಾಠಗಳು + +1. [ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ](1-intro-to-ML/README.md) +1. [ಯಂತ್ರ ಅಧ್ಯಯನ ಮತ್ತು ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆಯ ಇತಿಹಾಸ](2-history-of-ML/README.md) +1. [ನ್ಯಾಯ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನ](3-fairness/README.md) +1. [ಯಂತ್ರ ಅಧ್ಯಯನದ ತಂತ್ರಗಳು](4-techniques-of-ML/README.md) +### ಕ್ರೆಡಿಟ್ಸ್ + +"ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ" ಅನ್ನು ♥️ ಸಹಿತ [ಮುಹಮ್ಮದ್ ಸಕಿಬ್ ಖಾನ್ ಇನಾನ್](https://twitter.com/Sakibinan), [ಓರ್ನೆಲ್ಲಾ ಅಲ್ಟುನ್ಯಾನ್](https://twitter.com/ornelladotcom) ಮತ್ತು [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಸೇರಿದಂತೆ ತಂಡದವರು ಬರೆದಿದ್ದಾರೆ + +"ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತಿಹಾಸ" ಅನ್ನು ♥️ ಸಹಿತ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಮತ್ತು [ಏಮಿ ಬಾಯ್ಡ್](https://twitter.com/AmyKateNicho) ಬರೆದಿದ್ದಾರೆ + +"ನ್ಯಾಯ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನ" ಅನ್ನು ♥️ ಸಹಿತ [ಟೊಮೊಮಿ ಇಮುರಾ](https://twitter.com/girliemac) ಬರೆದಿದ್ದಾರೆ + +"ಯಂತ್ರ ಅಧ್ಯಯನದ ತಂತ್ರಗಳು" ಅನ್ನು ♥️ ಸಹಿತ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಮತ್ತು [ಕ್ರಿಸ್ ನೋರಿಂಗ್](https://twitter.com/softchris) ಬರೆದಿದ್ದಾರೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/1-Tools/README.md b/translations/kn/2-Regression/1-Tools/README.md new file mode 100644 index 000000000..a62737531 --- /dev/null +++ b/translations/kn/2-Regression/1-Tools/README.md @@ -0,0 +1,240 @@ + +# ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳಿಗಾಗಿ ಪೈಥಾನ್ ಮತ್ತು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ + +![ಸ್ಕೆಚ್‌ನೋಟ್ನಲ್ಲಿ ರಿಗ್ರೆಶನ್‌ಗಳ ಸಾರಾಂಶ](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.kn.png) + +> ಸ್ಕೆಚ್‌ನೋಟ್ನು [ಟೊಮೊಮಿ ಇಮುರು](https://www.twitter.com/girlie_mac) ರಚಿಸಿದ್ದಾರೆ + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +> ### [ಈ ಪಾಠ R ನಲ್ಲಿ ಲಭ್ಯವಿದೆ!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## ಪರಿಚಯ + +ಈ ನಾಲ್ಕು ಪಾಠಗಳಲ್ಲಿ, ನೀವು ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವ ವಿಧಾನವನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೀರಿ. ನಾವು ಇವುಗಳ ಉದ್ದೇಶವನ್ನು ಶೀಘ್ರದಲ್ಲೇ ಚರ್ಚಿಸುವೆವು. ಆದರೆ ನೀವು ಏನನ್ನಾದರೂ ಮಾಡುವ ಮೊದಲು, ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸರಿಯಾದ ಸಾಧನಗಳನ್ನು ಹೊಂದಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ! + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಕಲಿಯುವಿರಿ: + +- ಸ್ಥಳೀಯ ಯಂತ್ರ ಅಧ್ಯಯನ ಕಾರ್ಯಗಳಿಗೆ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಸಂರಚಿಸುವುದು. +- ಜುಪೈಟರ್ ನೋಟ್ಬುಕ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು. +- ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಬಳಕೆ, ಸ್ಥಾಪನೆ ಸೇರಿದಂತೆ. +- ಕೈಯಿಂದ ಅನುಭವಿಸುವ ವ್ಯಾಯಾಮದೊಂದಿಗೆ ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಅನ್ವೇಷಣೆ. + +## ಸ್ಥಾಪನೆಗಳು ಮತ್ತು ಸಂರಚನೆಗಳು + +[![ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲು ನಿಮ್ಮ ಸಾಧನಗಳನ್ನು ಸಿದ್ಧಪಡಿಸಿ](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ಆರಂಭಿಕರಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲು ನಿಮ್ಮ ಸಾಧನಗಳನ್ನು ಸಿದ್ಧಪಡಿಸಿ") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಸಂರಚಿಸುವುದರ ಕುರಿತು ಚಿಕ್ಕ ವೀಡಿಯೋವನ್ನು ನೋಡಿ. + +1. **ಪೈಥಾನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ**. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ [ಪೈಥಾನ್](https://www.python.org/downloads/) ಸ್ಥಾಪಿತವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ನೀವು ಅನೇಕ ಡೇಟಾ ವಿಜ್ಞಾನ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನ ಕಾರ್ಯಗಳಿಗೆ ಪೈಥಾನ್ ಅನ್ನು ಬಳಸುತ್ತೀರಿ. ಬಹುತೇಕ ಕಂಪ್ಯೂಟರ್ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ಈಗಾಗಲೇ ಪೈಥಾನ್ ಸ್ಥಾಪನೆ ಇದೆ. ಕೆಲವು ಬಳಕೆದಾರರಿಗೆ ಸ್ಥಾಪನೆಯನ್ನು ಸುಲಭಗೊಳಿಸಲು ಉಪಯುಕ್ತವಾದ [ಪೈಥಾನ್ ಕೋಡಿಂಗ್ ಪ್ಯಾಕ್ಗಳು](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) ಕೂಡ ಲಭ್ಯವಿವೆ. + + ಕೆಲವು ಪೈಥಾನ್ ಬಳಕೆಗಳಿಗೆ, ಒಂದು ಸಾಫ್ಟ್‌ವೇರ್ ಆವೃತ್ತಿಯ ಅಗತ್ಯವಿರಬಹುದು, ಇತರರಿಗೆ ಬೇರೆ ಆವೃತ್ತಿಯ ಅಗತ್ಯವಿರಬಹುದು. ಈ ಕಾರಣಕ್ಕಾಗಿ, [ವರ್ಚುವಲ್ ಪರಿಸರ](https://docs.python.org/3/library/venv.html) ಒಳಗೆ ಕೆಲಸ ಮಾಡುವುದು ಉಪಯುಕ್ತ. + +2. **ವಿಜುವಲ್ ಸ್ಟುಡಿಯೋ ಕೋಡ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ**. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ Visual Studio Code ಸ್ಥಾಪಿತವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಮೂಲ ಸ್ಥಾಪನೆಗಾಗಿ [Visual Studio Code ಅನ್ನು ಸ್ಥಾಪಿಸುವ](https://code.visualstudio.com/) ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ. ಈ ಕೋರ್ಸ್‌ನಲ್ಲಿ ನೀವು Visual Studio Code ನಲ್ಲಿ ಪೈಥಾನ್ ಬಳಸಲಿದ್ದೀರಿ, ಆದ್ದರಿಂದ ಪೈಥಾನ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ [Visual Studio Code ಅನ್ನು ಸಂರಚಿಸುವ](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) ವಿಧಾನವನ್ನು ತಿಳಿದುಕೊಳ್ಳುವುದು ಉತ್ತಮ. + + > ಈ [ಕಲಿಕೆ ಘಟಕಗಳ](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) ಸಂಗ್ರಹದ ಮೂಲಕ ಪೈಥಾನ್‌ನಲ್ಲಿ ಆರಾಮವಾಗಿ ಕೆಲಸ ಮಾಡಿ + > + > [![Visual Studio Code ನಲ್ಲಿ ಪೈಥಾನ್ ಸ್ಥಾಪನೆ](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Visual Studio Code ನಲ್ಲಿ ಪೈಥಾನ್ ಸ್ಥಾಪನೆ") + > + > 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋ ನೋಡಿ: VS Code ಒಳಗೆ ಪೈಥಾನ್ ಬಳಕೆ. + +3. **ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ**, [ಈ ಸೂಚನೆಗಳನ್ನು](https://scikit-learn.org/stable/install.html) ಅನುಸರಿಸಿ. ನೀವು ಪೈಥಾನ್ 3 ಬಳಸುತ್ತಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕಾಗಿರುವುದರಿಂದ, ವರ್ಚುವಲ್ ಪರಿಸರವನ್ನು ಬಳಸುವುದು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. ಗಮನಿಸಿ, ನೀವು M1 ಮ್ಯಾಕ್‌ನಲ್ಲಿ ಈ ಗ್ರಂಥಾಲಯವನ್ನು ಸ್ಥಾಪಿಸುತ್ತಿದ್ದರೆ, ಮೇಲಿನ ಲಿಂಕ್‌ನಲ್ಲಿ ವಿಶೇಷ ಸೂಚನೆಗಳಿವೆ. + +1. **ಜುಪೈಟರ್ ನೋಟ್ಬುಕ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ**. ನೀವು [ಜುಪೈಟರ್ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ](https://pypi.org/project/jupyter/)। + +## ನಿಮ್ಮ ಯಂತ್ರ ಅಧ್ಯಯನ ಬರಹ ಪರಿಸರ + +ನೀವು ನಿಮ್ಮ ಪೈಥಾನ್ ಕೋಡ್ ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ರಚಿಸಲು **ನೋಟ್ಬುಕ್‌ಗಳನ್ನು** ಬಳಸಲಿದ್ದೀರಿ. ಈ ರೀತಿಯ ಫೈಲ್ ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳ ಸಾಮಾನ್ಯ ಉಪಕರಣವಾಗಿದೆ ಮತ್ತು ಅವುಗಳ ಸಫಿಕ್ಸ್ ಅಥವಾ ವಿಸ್ತರಣೆ `.ipynb` ಮೂಲಕ ಗುರುತಿಸಲಾಗುತ್ತದೆ. + +ನೋಟ್ಬುಕ್‌ಗಳು ಸಂವಹನಾತ್ಮಕ ಪರಿಸರವಾಗಿದ್ದು, ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರು ಕೋಡ್ ಬರೆಯುವುದರ ಜೊತೆಗೆ ಟಿಪ್ಪಣಿಗಳನ್ನು ಸೇರಿಸಲು ಮತ್ತು ಕೋಡ್ ಸುತ್ತಲೂ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಬರೆಯಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ, ಇದು ಪ್ರಯೋಗಾತ್ಮಕ ಅಥವಾ ಸಂಶೋಧನಾ-ಕೇಂದ್ರೀಕೃತ ಯೋಜನೆಗಳಿಗೆ ಬಹಳ ಉಪಯುಕ್ತ. + +[![ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲು ಜುಪೈಟರ್ ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ಸಿದ್ಧಪಡಿಸಿ](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲು ಜುಪೈಟರ್ ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ಸಿದ್ಧಪಡಿಸಿ") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ಈ ವ್ಯಾಯಾಮವನ್ನು ನಡೆಸುವ ಚಿಕ್ಕ ವೀಡಿಯೋ ನೋಡಿ. + +### ವ್ಯಾಯಾಮ - ನೋಟ್ಬುಕ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಿ + +ಈ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ, ನೀವು _notebook.ipynb_ ಫೈಲ್ ಅನ್ನು ಕಾಣುತ್ತೀರಿ. + +1. Visual Studio Code ನಲ್ಲಿ _notebook.ipynb_ ಅನ್ನು ತೆರೆಯಿರಿ. + + ಪೈಥಾನ್ 3+ ಜೊತೆಗೆ ಜುಪೈಟರ್ ಸರ್ವರ್ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ನೀವು ನೋಟ್ಬುಕ್‌ನ ಭಾಗಗಳನ್ನು `run` ಮಾಡಬಹುದು, ಅಂದರೆ ಕೋಡ್ ತುಂಡುಗಳನ್ನು. ಪ್ಲೇ ಬಟನ್ ಹೋಲುವ ಐಕಾನ್ ಆಯ್ಕೆಮಾಡಿ ಕೋಡ್ ಬ್ಲಾಕ್ ಅನ್ನು ರನ್ ಮಾಡಬಹುದು. + +1. `md` ಐಕಾನ್ ಆಯ್ಕೆಮಾಡಿ ಸ್ವಲ್ಪ ಮಾರ್ಕ್‌ಡೌನ್ ಸೇರಿಸಿ, ಮತ್ತು ಕೆಳಗಿನ ಪಠ್ಯವನ್ನು **# ನಿಮ್ಮ ನೋಟ್ಬುಕ್‌ಗೆ ಸ್ವಾಗತ** ಎಂದು ಸೇರಿಸಿ. + + ನಂತರ, ಕೆಲವು ಪೈಥಾನ್ ಕೋಡ್ ಸೇರಿಸಿ. + +1. ಕೋಡ್ ಬ್ಲಾಕ್‌ನಲ್ಲಿ **print('hello notebook')** ಟೈಪ್ ಮಾಡಿ. +1. ಕೋಡ್ ರನ್ ಮಾಡಲು ಅರೋಹಣ ಬಾಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ. + + ನೀವು ಮುದ್ರಿತ ಹೇಳಿಕೆಯನ್ನು ನೋಡಬೇಕು: + + ```output + hello notebook + ``` + +![ನೋಟ್ಬುಕ್ ತೆರೆಯಲಾದ VS ಕೋಡ್](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.kn.jpg) + +ನೀವು ನಿಮ್ಮ ಕೋಡ್ ಜೊತೆಗೆ ಟಿಪ್ಪಣಿಗಳನ್ನು ಸೇರಿಸಿ ನೋಟ್ಬುಕ್ ಅನ್ನು ಸ್ವಯಂ-ಡಾಕ್ಯುಮೆಂಟ್ ಮಾಡಬಹುದು. + +✅ ವೆಬ್ ಡೆವಲಪರ್‌ನ ಕೆಲಸದ ಪರಿಸರ ಮತ್ತು ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಕೆಲಸದ ಪರಿಸರವು ಹೇಗೆ ವಿಭಿನ್ನವಾಗಿವೆ ಎಂದು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ. + +## ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ + +ಈಗ ಪೈಥಾನ್ ನಿಮ್ಮ ಸ್ಥಳೀಯ ಪರಿಸರದಲ್ಲಿ ಸಿದ್ಧವಾಗಿದೆ ಮತ್ತು ನೀವು ಜುಪೈಟರ್ ನೋಟ್ಬುಕ್‌ಗಳೊಂದಿಗೆ ಆರಾಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೀರಿ, ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ (ಅದನ್ನು `sci` ಎಂದು ಉಚ್ಛರಿಸಿ, ಅಂದರೆ `ಸೈನ್ಸ್`) ಜೊತೆಗೆ ಸಮಾನವಾಗಿ ಆರಾಮವಾಗೋಣ. ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ನಿಮಗೆ ಯಂತ್ರ ಅಧ್ಯಯನ ಕಾರ್ಯಗಳನ್ನು ನೆರವೇರಿಸಲು ಸಹಾಯ ಮಾಡುವ [ವಿಸ್ತೃತ API](https://scikit-learn.org/stable/modules/classes.html#api-ref) ಒದಗಿಸುತ್ತದೆ. + +ಅವರ [ವೆಬ್‌ಸೈಟ್](https://scikit-learn.org/stable/getting_started.html) ಪ್ರಕಾರ, "ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಒಂದು ಮುಕ್ತ ಮೂಲ ಯಂತ್ರ ಅಧ್ಯಯನ ಗ್ರಂಥಾಲಯವಾಗಿದೆ, ಇದು ಮೇಲ್ವಿಚಾರಿತ ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆಯಿಲ್ಲದ ಅಧ್ಯಯನವನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. ಇದು ಮಾದರಿ ಹೊಂದಿಸುವಿಕೆ, ಡೇಟಾ ಪೂರ್ವಸಿದ್ಧತೆ, ಮಾದರಿ ಆಯ್ಕೆ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ, ಮತ್ತು ಅನೇಕ ಇತರೆ ಉಪಕರಣಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ." + +ಈ ಕೋರ್ಸ್‌ನಲ್ಲಿ, ನೀವು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಮತ್ತು ಇತರೆ ಉಪಕರಣಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವಿರಿ, ಇದನ್ನು ನಾವು 'ಪಾರಂಪರಿಕ ಯಂತ್ರ ಅಧ್ಯಯನ' ಕಾರ್ಯಗಳು ಎಂದು ಕರೆಯುತ್ತೇವೆ. ನಾವು ಜಾಲಕ ಜಾಲಗಳು ಮತ್ತು ಆಳವಾದ ಅಧ್ಯಯನವನ್ನು ಉಲ್ಲೇಖಿಸಿಲ್ಲ, ಏಕೆಂದರೆ ಅವು ನಮ್ಮ ಮುಂದಿನ 'ಆರಂಭಿಕರಿಗಾಗಿ AI' ಪಠ್ಯಕ್ರಮದಲ್ಲಿ ಉತ್ತಮವಾಗಿ ಒಳಗೊಂಡಿವೆ. + +ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಲು ಮತ್ತು ಅವುಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು ಸರಳ ವಿಧಾನ ಒದಗಿಸುತ್ತದೆ. ಇದು ಮುಖ್ಯವಾಗಿ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ಬಳಕೆಮೇಲೆ ಕೇಂದ್ರೀಕೃತವಾಗಿದೆ ಮತ್ತು ಕಲಿಕೆಯ ಉಪಕರಣಗಳಾಗಿ ಬಳಸಲು ಹಲವು ಸಿದ್ಧ ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದು ವಿದ್ಯಾರ್ಥಿಗಳು ಪ್ರಯತ್ನಿಸಲು ಪೂರ್ವನಿರ್ಮಿತ ಮಾದರಿಗಳನ್ನು ಸಹ ಒಳಗೊಂಡಿದೆ. ಮೊದಲ ML ಮಾದರಿಗಾಗಿ ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನೊಂದಿಗೆ ಪೂರ್ವಪ್ಯಾಕೇಜ್ ಡೇಟಾ ಲೋಡ್ ಮಾಡುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮತ್ತು ನಿರ್ಮಿತ ಅಂದಾಜಕವನ್ನು ಅನ್ವೇಷಿಸೋಣ. + +## ವ್ಯಾಯಾಮ - ನಿಮ್ಮ ಮೊದಲ ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ನೋಟ್ಬುಕ್ + +> ಈ ಪಾಠವು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ವೆಬ್‌ಸೈಟ್‌ನ [ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಉದಾಹರಣೆ](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) ಪ್ರೇರಿತವಾಗಿದೆ. + +[![ಪೈಥಾನ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಮೊದಲ ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಪ್ರಾಜೆಕ್ಟ್](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ಪೈಥಾನ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಮೊದಲ ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಪ್ರಾಜೆಕ್ಟ್") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ಈ ವ್ಯಾಯಾಮವನ್ನು ನಡೆಸುವ ಚಿಕ್ಕ ವೀಡಿಯೋ ನೋಡಿ. + +ಈ ಪಾಠಕ್ಕೆ ಸಂಬಂಧಿಸಿದ _notebook.ipynb_ ಫೈಲ್‌ನಲ್ಲಿ, 'ಟ್ರ್ಯಾಶ್ ಕ್ಯಾನ್' ಐಕಾನ್ ಒತ್ತಿ ಎಲ್ಲಾ ಸೆಲ್‌ಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ. + +ಈ ವಿಭಾಗದಲ್ಲಿ, ನೀವು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನಲ್ಲಿ ಕಲಿಕೆಯ ಉದ್ದೇಶಕ್ಕಾಗಿ ನಿರ್ಮಿಸಲಾದ ಸಣ್ಣ ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತೀರಿ. ನೀವು ಡಯಾಬಿಟಿಕ್ ರೋಗಿಗಳಿಗೆ ಚಿಕಿತ್ಸೆ ಪರೀಕ್ಷಿಸಲು ಬಯಸಿದರೆ ಎಂದು ಕಲ್ಪಿಸಿ. ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳು ಯಾವ ರೋಗಿಗಳು ಚಿಕಿತ್ಸೆಗಾಗಿ ಉತ್ತಮ ಪ್ರತಿಕ್ರಿಯಿಸುವರು ಎಂದು ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು, ಬದಲಾವಣೆಗಳ ಸಂಯೋಜನೆಗಳ ಆಧಾರದ ಮೇಲೆ. ಬಹುಮೂಲ್ಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿ, ದೃಶ್ಯೀಕರಿಸಿದಾಗ, ಬದಲಾವಣೆಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸಬಹುದು, ಇದು ನಿಮ್ಮ ಸೈದ್ಧಾಂತಿಕ ಕ್ಲಿನಿಕಲ್ ಪ್ರಯೋಗಗಳನ್ನು ಸಂಘಟಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. + +✅ ರಿಗ್ರೆಶನ್ ವಿಧಾನಗಳ ಹಲವು ವಿಧಗಳಿವೆ, ಮತ್ತು ನೀವು ಯಾವದನ್ನು ಆರಿಸುವಿರಿ ಎಂಬುದು ನೀವು ಹುಡುಕುತ್ತಿರುವ ಉತ್ತರದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ನೀವು ನಿರ್ದಿಷ್ಟ ವಯಸ್ಸಿನ ವ್ಯಕ್ತಿಯ ಸಾಧ್ಯತೆಯ ಎತ್ತರವನ್ನು ಊಹಿಸಲು ಬಯಸಿದರೆ, ನೀವು ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಬಳಸುತ್ತೀರಿ, ಏಕೆಂದರೆ ನೀವು **ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯ** ಹುಡುಕುತ್ತಿದ್ದೀರಿ. ನೀವು ಯಾವ ಆಹಾರ ಪ್ರಕಾರವನ್ನು ವೆಗನ್ ಎಂದು ಪರಿಗಣಿಸಬೇಕೆಂದು ತಿಳಿಯಲು ಬಯಸಿದರೆ, ನೀವು **ವರ್ಗ ವಿಂಗಡಣೆ** ಹುಡುಕುತ್ತಿದ್ದೀರಿ, ಆದ್ದರಿಂದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಳಸುತ್ತೀರಿ. ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ನೀವು ನಂತರ ಹೆಚ್ಚು ಕಲಿಯುತ್ತೀರಿ. ಡೇಟಾದಿಂದ ಕೇಳಬಹುದಾದ ಕೆಲವು ಪ್ರಶ್ನೆಗಳ ಬಗ್ಗೆ ಮತ್ತು ಯಾವ ವಿಧಾನಗಳು ಸೂಕ್ತವಾಗಿರುತ್ತವೆ ಎಂದು ಸ್ವಲ್ಪ ಯೋಚಿಸಿ. + +ಈ ಕಾರ್ಯವನ್ನು ಪ್ರಾರಂಭಿಸೋಣ. + +### ಗ್ರಂಥಾಲಯಗಳನ್ನು ಆಮದುಮಾಡಿ + +ಈ ಕಾರ್ಯಕ್ಕಾಗಿ ನಾವು ಕೆಲವು ಗ್ರಂಥಾಲಯಗಳನ್ನು ಆಮದುಮಾಡುತ್ತೇವೆ: + +- **ಮ್ಯಾಟ್‌ಪ್ಲಾಟ್‌ಲಿಬ್**. ಇದು ಉಪಯುಕ್ತ [ಗ್ರಾಫ್ ಸಾಧನ](https://matplotlib.org/) ಮತ್ತು ನಾವು ಲೈನ್ ಪ್ಲಾಟ್ ರಚಿಸಲು ಇದನ್ನು ಬಳಸುತ್ತೇವೆ. +- **ನಂಪೈ**. [ನಂಪೈ](https://numpy.org/doc/stable/user/whatisnumpy.html) ಪೈಥಾನ್‌ನಲ್ಲಿ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ನಿರ್ವಹಣೆಗೆ ಉಪಯುಕ್ತ ಗ್ರಂಥಾಲಯ. +- **ಸ್ಕ್ಲರ್ನ್**. ಇದು [ಸ್ಕಿಕಿಟ್-ಲರ್ನ್](https://scikit-learn.org/stable/user_guide.html) ಗ್ರಂಥಾಲಯ. + +ನಿಮ್ಮ ಕಾರ್ಯಗಳಿಗೆ ಸಹಾಯ ಮಾಡಲು ಕೆಲವು ಗ್ರಂಥಾಲಯಗಳನ್ನು ಆಮದುಮಾಡಿ. + +1. ಕೆಳಗಿನ ಕೋಡ್ ಟೈಪ್ ಮಾಡಿ ಆಮದುಮಾಡಿ: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + ಮೇಲಿನ ಕೋಡ್‌ನಲ್ಲಿ ನೀವು `matplotlib`, `numpy` ಮತ್ತು `sklearn` ನಿಂದ `datasets`, `linear_model`, ಮತ್ತು `model_selection` ಅನ್ನು ಆಮದುಮಾಡುತ್ತಿದ್ದೀರಿ. `model_selection` ಅನ್ನು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗಳಿಗೆ ಡೇಟಾ ವಿಭಜಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. + +### ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್ + +ನಿರ್ಮಿತ [ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 442 ಡೇಟಾ ಮಾದರಿಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, 10 ವೈಶಿಷ್ಟ್ಯ ಬದಲಾವಣೆಗಳೊಂದಿಗೆ, ಕೆಲವು: + +- ವಯಸ್ಸು: ವರ್ಷಗಳಲ್ಲಿ ವಯಸ್ಸು +- ಬಿಎಂಐ: ದೇಹದ ಮಾಸ್ ಸೂಚ್ಯಂಕ +- ಬಿಪಿ: ಸರಾಸರಿ ರಕ್ತದ ಒತ್ತಡ +- s1 tc: ಟಿ-ಸೆಲ್ಸ್ (ಒಂದು ಬಗೆಯ ಬಿಳಿ ರಕ್ತಕಣಗಳು) + +✅ ಈ ಡೇಟಾಸೆಟ್ 'ಲಿಂಗ' ಎಂಬ ವೈಶಿಷ್ಟ್ಯ ಬದಲಾವಣೆಯ ಕಲ್ಪನೆಯನ್ನು ಒಳಗೊಂಡಿದೆ, ಇದು ಡಯಾಬಿಟಿಸ್ ಸಂಶೋಧನೆಗೆ ಮಹತ್ವದಾಗಿದೆ. ಅನೇಕ ವೈದ್ಯಕೀಯ ಡೇಟಾಸೆಟ್‌ಗಳು ಈ ರೀತಿಯ ದ್ವಿಪದ ವರ್ಗೀಕರಣವನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ. ಈ ರೀತಿಯ ವರ್ಗೀಕರಣಗಳು ಜನಸಂಖ್ಯೆಯ ಕೆಲವು ಭಾಗಗಳನ್ನು ಚಿಕಿತ್ಸೆಯಿಂದ ಹೊರಗೊಳ್ಳುವಂತೆ ಮಾಡಬಹುದು ಎಂದು ಸ್ವಲ್ಪ ಯೋಚಿಸಿ. + +ಈಗ, X ಮತ್ತು y ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ. + +> 🎓 ನೆನಪಿಡಿ, ಇದು ಮೇಲ್ವಿಚಾರಿತ ಅಧ್ಯಯನ, ಮತ್ತು ನಮಗೆ 'y' ಗುರಿ ಬೇಕು. + +ಹೊಸ ಕೋಡ್ ಸೆಲ್‌ನಲ್ಲಿ, `load_diabetes()` ಅನ್ನು ಕರೆಸಿ ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. `return_X_y=True` ಎಂಬ ಇನ್ಪುಟ್ ಸೂಚಿಸುತ್ತದೆ `X` ಡೇಟಾ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಆಗಿದ್ದು, `y` ರಿಗ್ರೆಶನ್ ಗುರಿಯಾಗಿರುತ್ತದೆ. + +1. ಡೇಟಾ ಮ್ಯಾಟ್ರಿಕ್ಸ್‌ನ ಆಕಾರ ಮತ್ತು ಅದರ ಮೊದಲ ಅಂಶವನ್ನು ತೋರಿಸಲು ಕೆಲವು ಪ್ರಿಂಟ್ ಕಮಾಂಡ್‌ಗಳನ್ನು ಸೇರಿಸಿ: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + ನೀವು ಪಡೆದಿರುವ ಪ್ರತಿಕ್ರಿಯೆ ಒಂದು ಟ್ಯೂಪಲ್ ಆಗಿದೆ. ನೀವು ಟ್ಯೂಪಲ್‌ನ ಮೊದಲ ಎರಡು ಮೌಲ್ಯಗಳನ್ನು ಕ್ರಮವಾಗಿ `X` ಮತ್ತು `y` ಗೆ ನಿಯೋಜಿಸುತ್ತಿದ್ದೀರಿ. [ಟ್ಯೂಪಲ್‌ಗಳ ಬಗ್ಗೆ](https://wikipedia.org/wiki/Tuple) ಹೆಚ್ಚು ತಿಳಿಯಿರಿ. + + ಈ ಡೇಟಾ 442 ಐಟಂಗಳನ್ನು 10 ಅಂಶಗಳ ಅರೆಗಳಾಗಿ ಹೊಂದಿದೆ: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ ಡೇಟಾ ಮತ್ತು ರಿಗ್ರೆಶನ್ ಗುರಿಯ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಸ್ವಲ್ಪ ಯೋಚಿಸಿ. ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ವೈಶಿಷ್ಟ್ಯ X ಮತ್ತು ಗುರಿ y ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ಊಹಿಸುತ್ತದೆ. ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್ ಗುರಿಯನ್ನು [ಡಾಕ್ಯುಮೆಂಟೇಶನ್‌ನಲ್ಲಿ](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ನೀವು ಕಂಡುಹಿಡಿಯಬಹುದೇ? ಈ ಡೇಟಾಸೆಟ್ ಏನು ಪ್ರದರ್ಶಿಸುತ್ತಿದೆ, ಆ ಗುರಿಯನ್ನು ನೀಡಿದಾಗ? + +2. ನಂತರ, ಈ ಡೇಟಾಸೆಟ್‌ನ ಒಂದು ಭಾಗವನ್ನು ಪ್ಲಾಟ್ ಮಾಡಲು, ಡೇಟಾಸೆಟ್‌ನ 3ನೇ ಕಾಲಮ್ ಆಯ್ಕೆಮಾಡಿ. ಎಲ್ಲಾ ಸಾಲುಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲು `:` ಆಪರೇಟರ್ ಬಳಸಿ, ನಂತರ ಸೂಚ್ಯಂಕ (2) ಬಳಸಿ 3ನೇ ಕಾಲಮ್ ಆಯ್ಕೆಮಾಡಿ. ಪ್ಲಾಟ್ ಮಾಡಲು ಅಗತ್ಯವಿರುವಂತೆ ಡೇಟಾವನ್ನು 2D ಅರೆ ಆಗಿ ಮರುರೂಪಿಸಬಹುದು - `reshape(n_rows, n_columns)` ಬಳಸಿ. ಒಂದು ಪ್ಯಾರಾಮೀಟರ್ -1 ಆಗಿದ್ದರೆ, ಆ ಆಯಾಮವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ ಯಾವಾಗಲಾದರೂ ಡೇಟಾ ಮುದ್ರಿಸಿ ಅದರ ಆಕಾರವನ್ನು ಪರಿಶೀಲಿಸಿ. + +3. ಈಗ ನೀವು ಪ್ಲಾಟ್ ಮಾಡಲು ಡೇಟಾ ಸಿದ್ಧವಾಗಿದೆ, ಈ ಡೇಟಾಸೆಟ್‌ನ ಸಂಖ್ಯೆಗಳ ನಡುವೆ ಯಂತ್ರವು ತಾರ್ಕಿಕ ವಿಭಜನೆ ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದೇ ಎಂದು ನೋಡಬಹುದು. ಇದಕ್ಕಾಗಿ, ನೀವು ಡೇಟಾ (X) ಮತ್ತು ಗುರಿ (y) ಎರಡನ್ನೂ ಪರೀಕ್ಷಾ ಮತ್ತು ತರಬೇತಿ ಸೆಟ್‌ಗಳಾಗಿ ವಿಭಜಿಸಬೇಕು. ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಇದನ್ನು ಸರಳವಾಗಿ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ; ನೀವು ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ನಿರ್ದಿಷ್ಟ ಬಿಂದುವಿನಲ್ಲಿ ವಿಭಜಿಸಬಹುದು. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. ಈಗ ನೀವು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೀರಿ! ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ಲೋಡ್ ಮಾಡಿ ಮತ್ತು `model.fit()` ಬಳಸಿ ನಿಮ್ಮ X ಮತ್ತು y ತರಬೇತಿ ಸೆಟ್‌ಗಳೊಂದಿಗೆ ತರಬೇತಿ ಮಾಡಿ: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` ಅನ್ನು ನೀವು TensorFlow ಮುಂತಾದ ಅನೇಕ ML ಗ್ರಂಥಾಲಯಗಳಲ್ಲಿ ಕಾಣುತ್ತೀರಿ + +5. ನಂತರ, ಪರೀಕ್ಷಾ ಡೇಟಾ ಬಳಸಿ `predict()` ಫಂಕ್ಷನ್ ಮೂಲಕ ಅಂದಾಜು ರಚಿಸಿ. ಇದು ಡೇಟಾ ಗುಂಪುಗಳ ನಡುವೆ ರೇಖೆಯನ್ನು ಬಿಡಲು ಬಳಸಲಾಗುತ್ತದೆ + + ```python + y_pred = model.predict(X_test) + ``` + +6. ಈಗ ಡೇಟಾವನ್ನು ಪ್ಲಾಟ್‌ನಲ್ಲಿ ತೋರಿಸುವ ಸಮಯ. ಮ್ಯಾಟ್‌ಪ್ಲಾಟ್‌ಲಿಬ್ ಈ ಕಾರ್ಯಕ್ಕೆ ಬಹಳ ಉಪಯುಕ್ತ ಸಾಧನ. ಎಲ್ಲಾ X ಮತ್ತು y ಪರೀಕ್ಷಾ ಡೇಟಾದ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ರಚಿಸಿ, ಮತ್ತು ಅಂದಾಜನ್ನು ಬಳಸಿ ಮಾದರಿಯ ಡೇಟಾ ಗುಂಪುಗಳ ನಡುವೆ ಸೂಕ್ತ ಸ್ಥಳದಲ್ಲಿ ರೇಖೆಯನ್ನು ಬಿಡಿ. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![ಡಯಾಬಿಟಿಸ್ ಸುತ್ತಲೂ ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳನ್ನು ತೋರಿಸುವ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.kn.png) + ✅ ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ಸ್ವಲ್ಪ ಯೋಚಿಸಿ. ಒಂದು ಸರಳ ರೇಖೆ ಅನೇಕ ಸಣ್ಣ ಡೇಟಾ ಬಿಂದುಗಳ ಮೂಲಕ ಓಡುತ್ತಿದೆ, ಆದರೆ ಅದು ನಿಖರವಾಗಿ ಏನು ಮಾಡುತ್ತಿದೆ? ಈ ರೇಖೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಹೊಸ, ಕಾಣದ ಡೇಟಾ ಬಿಂದು ಪ್ಲಾಟ್‌ನ y ಅಕ್ಷದ ಸಂಬಂಧದಲ್ಲಿ ಎಲ್ಲಿ ಹೊಂದಿಕೊಳ್ಳಬೇಕು ಎಂದು ನೀವು ಹೇಗೆ ಊಹಿಸಬಹುದು ಎಂದು ನೋಡಬಹುದೇ? ಈ ಮಾದರಿಯ ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಯನ್ನು ಪದಗಳಲ್ಲಿ ವಿವರಿಸಲು ಪ್ರಯತ್ನಿಸಿ. + +ಅಭಿನಂದನೆಗಳು, ನೀವು ನಿಮ್ಮ ಮೊದಲ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಅದರಿಂದ ಊಹೆ ಮಾಡಿದ್ದೀರಿ ಮತ್ತು ಅದನ್ನು ಪ್ಲಾಟ್‌ನಲ್ಲಿ ಪ್ರದರ್ಶಿಸಿದ್ದೀರಿ! + +--- +## 🚀ಸವಾಲು + +ಈ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಬೇರೆ ಚರವನ್ನು ಪ್ಲಾಟ್ ಮಾಡಿ. ಸೂಚನೆ: ಈ ಸಾಲನ್ನು ಸಂಪಾದಿಸಿ: `X = X[:,2]`. ಈ ಡೇಟಾಸೆಟ್‌ನ ಗುರಿಯನ್ನು ಗಮನಿಸಿದರೆ, ಡಯಾಬಿಟಿಸ್ ರೋಗದ ಪ್ರಗತಿಯನ್ನು ನೀವು ಏನು ಕಂಡುಹಿಡಿಯಬಹುದು? +## [ಪೋಸ್ಟ್-ಲೆಕ್ಚರ್ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಈ ಟ್ಯುಟೋರಿಯಲ್‌ನಲ್ಲಿ, ನೀವು ಸರಳ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಿದ್ದೀರಿ, ಏಕಚರ ಅಥವಾ ಬಹುಚರ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಅಲ್ಲ. ಈ ವಿಧಾನಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸಗಳ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಓದಿ, ಅಥವಾ [ಈ ವೀಡಿಯೋ](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) ನೋಡಿ. + +ರಿಗ್ರೆಶನ್ ಎಂಬ ಸಂಪ್ರದಾಯದ ಬಗ್ಗೆ ಹೆಚ್ಚು ಓದಿ ಮತ್ತು ಈ ತಂತ್ರಜ್ಞಾನದಿಂದ ಯಾವ ರೀತಿಯ ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರ ನೀಡಬಹುದು ಎಂದು ಯೋಚಿಸಿ. ನಿಮ್ಮ ಅರ್ಥವನ್ನು ಗಾಢಗೊಳಿಸಲು ಈ [ಟ್ಯುಟೋರಿಯಲ್](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ. + +## ನಿಯೋಜನೆ + +[ಬೇರೆ ಡೇಟಾಸೆಟ್](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/1-Tools/assignment.md b/translations/kn/2-Regression/1-Tools/assignment.md new file mode 100644 index 000000000..ae8c2d077 --- /dev/null +++ b/translations/kn/2-Regression/1-Tools/assignment.md @@ -0,0 +1,29 @@ + +# ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನೊಂದಿಗೆ ರಿಗ್ರೆಶನ್ + +## ಸೂಚನೆಗಳು + +ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನಲ್ಲಿ [ಲಿನ್ನೆರಡ್ ಡೇಟಾಸೆಟ್](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) ಅನ್ನು ನೋಡಿ. ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಹಲವಾರು [ಲಕ್ಷ್ಯಗಳು](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset) ಇವೆ: 'ಇದು ಮೂವರು ವ್ಯಾಯಾಮ (ಡೇಟಾ) ಮತ್ತು ಮೂವರು ಶಾರೀರಿಕ (ಲಕ್ಷ್ಯ) ಚರಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ಇವುಗಳನ್ನು ಇಪ್ಪತ್ತು ಮಧ್ಯಮ ವಯಸ್ಸಿನ ಪುರುಷರಿಂದ ಫಿಟ್ನೆಸ್ ಕ್ಲಬ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ'. + +ನಿಮ್ಮ ಸ್ವಂತ ಪದಗಳಲ್ಲಿ, ಎಷ್ಟು ಸಿಟ್-ಅಪ್ಸ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು কোমರದ ಗಾತ್ರದ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಚಿತ್ರಿಸುವ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂದು ವಿವರಿಸಿ. ಈ ಡೇಟಾಸೆಟ್‌ನ ಇತರ ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳಿಗೂ ಅದೇ ರೀತಿಯಲ್ಲಿ ಮಾಡಿ. + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ಸಮರ್ಪಕ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| ವಿವರಣಾತ್ಮಕ ಪ್ಯಾರಾಗ್ರಾಫ್ ಸಲ್ಲಿಸಿ | ಚೆನ್ನಾಗಿ ಬರೆಯಲಾದ ಪ್ಯಾರಾಗ್ರಾಫ್ ಸಲ್ಲಿಸಲಾಗಿದೆ | ಕೆಲವು ವಾಕ್ಯಗಳು ಸಲ್ಲಿಸಲಾಗಿದೆ | ಯಾವುದೇ ವಿವರಣೆ ನೀಡಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/1-Tools/notebook.ipynb b/translations/kn/2-Regression/1-Tools/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/kn/2-Regression/1-Tools/solution/Julia/README.md b/translations/kn/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 000000000..b67b8db71 --- /dev/null +++ b/translations/kn/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb b/translations/kn/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb new file mode 100644 index 000000000..287a176b4 --- /dev/null +++ b/translations/kn/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb @@ -0,0 +1,452 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_1-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1", + "translation_date": "2025-12-19T16:31:36+00:00", + "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: R ಮತ್ತು Tidymodels ಬಳಸಿ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ\n" + ], + "metadata": { + "id": "YJUHCXqK57yz" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ರಿಗ್ರೆಶನ್ ಪರಿಚಯ - ಪಾಠ 1\n", + "\n", + "#### ದೃಷ್ಟಿಕೋನಕ್ಕೆ ಇಡುವುದು\n", + "\n", + "✅ ರಿಗ್ರೆಶನ್ ವಿಧಾನಗಳ ಹಲವು ಪ್ರಕಾರಗಳಿವೆ, ಮತ್ತು ನೀವು ಯಾವದನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತೀರಿ ಎಂಬುದು ನೀವು ಹುಡುಕುತ್ತಿರುವ ಉತ್ತರದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ನೀವು ನೀಡಲಾದ ವಯಸ್ಸಿನ ವ್ಯಕ್ತಿಯ ಸಾಧ್ಯತೆಯ ಎತ್ತರವನ್ನು ಊಹಿಸಲು ಬಯಸಿದರೆ, ನೀವು `ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್` ಅನ್ನು ಬಳಸುತ್ತೀರಿ, ಏಕೆಂದರೆ ನೀವು **ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯ**ವನ್ನು ಹುಡುಕುತ್ತಿದ್ದೀರಿ. ನೀವು ಯಾವ ರೀತಿಯ ಆಹಾರವನ್ನು ವೆಗನ್ ಎಂದು ಪರಿಗಣಿಸಬೇಕೇ ಎಂದು ತಿಳಿದುಕೊಳ್ಳಲು ಆಸಕ್ತರಾಗಿದ್ದರೆ, ನೀವು **ವರ್ಗ ವಿಂಗಡಣೆ**ಗಾಗಿ ಹುಡುಕುತ್ತಿದ್ದೀರಿ ಆದ್ದರಿಂದ ನೀವು `ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್` ಅನ್ನು ಬಳಸುತ್ತೀರಿ. ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ನೀವು ನಂತರ ಹೆಚ್ಚು ತಿಳಿಯುತ್ತೀರಿ. ಡೇಟಾದಿಂದ ನೀವು ಕೇಳಬಹುದಾದ ಕೆಲವು ಪ್ರಶ್ನೆಗಳ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಯೋಚಿಸಿ, ಮತ್ತು ಈ ವಿಧಾನಗಳಲ್ಲಿ ಯಾವುದು ಹೆಚ್ಚು ಸೂಕ್ತವಾಗಿರುತ್ತದೆ ಎಂದು ಪರಿಗಣಿಸಿ.\n", + "\n", + "ಈ ವಿಭಾಗದಲ್ಲಿ, ನೀವು [ಮಧುಮೇಹದ ಬಗ್ಗೆ ಸಣ್ಣ ಡೇಟಾಸೆಟ್](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) ಜೊತೆಗೆ ಕೆಲಸ ಮಾಡುತ್ತೀರಿ. ನೀವು ಮಧುಮೇಹ ರೋಗಿಗಳಿಗೆ ಚಿಕಿತ್ಸೆ ಪರೀಕ್ಷಿಸಲು ಬಯಸಿದರೆ ಎಂದು ಕಲ್ಪಿಸಿ. ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳು, ಬದಲಾವಣೆಗಳ ಸಂಯೋಜನೆಗಳ ಆಧಾರದ ಮೇಲೆ, ಯಾವ ರೋಗಿಗಳು ಚಿಕಿತ್ಸೆಗಾಗಿ ಉತ್ತಮ ಪ್ರತಿಕ್ರಿಯಿಸುವರು ಎಂದು ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು. ಅತ್ಯಂತ ಮೂಲಭೂತ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯೂ ಸಹ, ದೃಶ್ಯೀಕರಿಸಿದಾಗ, ನಿಮ್ಮ ಸೈದ್ಧಾಂತಿಕ ಕ್ಲಿನಿಕಲ್ ಪ್ರಯೋಗಗಳನ್ನು ಸಂಘಟಿಸಲು ಸಹಾಯ ಮಾಡುವ ಬದಲಾವಣೆಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿ ತೋರಿಸಬಹುದು.\n", + "\n", + "ಹೀಗಾಗಿ, ಈ ಕಾರ್ಯವನ್ನು ಪ್ರಾರಂಭಿಸೋಣ!\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n", + "\n", + "\n" + ], + "metadata": { + "id": "LWNNzfqd6feZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 1. ನಮ್ಮ ಉಪಕರಣಗಳ ಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡುವುದು\n", + "\n", + "ಈ ಕಾರ್ಯಕ್ಕಾಗಿ, ನಾವು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅಗತ್ಯವಿದೆ:\n", + "\n", + "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಹೆಚ್ಚು ಮನರಂಜನೀಯವಾಗಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ!\n", + "\n", + "- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ.\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n", + "\n", + "ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ನೀವು ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜುಗಳಿದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ಕೆಲವು ಇಲ್ಲದಿದ್ದರೆ ಅವುಗಳನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ], + "metadata": { + "id": "FIo2YhO26wI9" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", + "pacman::p_load(tidyverse, tidymodels)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading required package: pacman\n", + "\n" + ] + } + ], + "metadata": { + "id": "cIA9fz9v7Dss", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ, ಈ ಅದ್ಭುತ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ ನಮ್ಮ ಪ್ರಸ್ತುತ R ಸೆಷನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿರಿಸೋಣ.(ಇದು ಕೇವಲ ಉದಾಹರಣೆಗೆ, `pacman::p_load()` ಈಗಾಗಲೇ ಅದನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಮಾಡಿದೆ)\n" + ], + "metadata": { + "id": "gpO_P_6f9WUG" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# load the core Tidyverse packages\r\n", + "library(tidyverse)\r\n", + "\r\n", + "# load the core Tidymodels packages\r\n", + "library(tidymodels)\r\n" + ], + "outputs": [], + "metadata": { + "id": "NLMycgG-9ezO" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 2. ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್\n", + "\n", + "ಈ ವ್ಯಾಯಾಮದಲ್ಲಿ, ನಾವು ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್ ಮೇಲೆ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವ ಮೂಲಕ ನಮ್ಮ ರಿಗ್ರೆಶನ್ ಕೌಶಲ್ಯಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವೆವು. [ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) ನಲ್ಲಿ ಡಯಾಬಿಟಿಸ್ ಸುತ್ತಲೂ `442 ಮಾದರಿಗಳು` ಒಳಗೊಂಡಿವೆ, 10 ಭವಿಷ್ಯವಾಣಿ ವೈಶಿಷ್ಟ್ಯ ಚರಗಳು, `ವಯಸ್ಸು`, `ಲಿಂಗ`, `ದೇಹದ ಭಾರ ಸೂಚ್ಯಂಕ`, `ಸರಾಸರಿ ರಕ್ತದ ಒತ್ತಡ`, ಮತ್ತು `ಆರು ರಕ್ತ ಸೀರಮ್ ಮಾಪನಗಳು` ಜೊತೆಗೆ ಫಲಿತಾಂಶ ಚರ `y`: ಮೂಲಸ್ಥಿತಿಯಿಂದ ಒಂದು ವರ್ಷ ನಂತರ ರೋಗ ಪ್ರಗತಿಯ ಪ್ರಮಾಣಾತ್ಮಕ ಅಳೆಯುವಿಕೆ.\n", + "\n", + "|ನೋಟಗಳ ಸಂಖ್ಯೆ|442|\n", + "|----------------------|:---|\n", + "|ಭವಿಷ್ಯವಾಣಿ ಚರಗಳ ಸಂಖ್ಯೆ|ಮೊದಲ 10 ಕಾಲಮ್‌ಗಳು ಸಂಖ್ಯಾತ್ಮಕ ಭವಿಷ್ಯವಾಣಿ|\n", + "|ಫಲಿತಾಂಶ/ಲಕ್ಷ್ಯ|11ನೇ ಕಾಲಮ್ ಮೂಲಸ್ಥಿತಿಯಿಂದ ಒಂದು ವರ್ಷ ನಂತರ ರೋಗ ಪ್ರಗತಿಯ ಪ್ರಮಾಣಾತ್ಮಕ ಅಳೆಯುವಿಕೆ|\n", + "|ಭವಿಷ್ಯವಾಣಿ ಮಾಹಿತಿ|- ವಯಸ್ಸು ವರ್ಷಗಳಲ್ಲಿ\n", + "||- ಲಿಂಗ\n", + "||- bmi ದೇಹದ ಭಾರ ಸೂಚ್ಯಂಕ\n", + "||- bp ಸರಾಸರಿ ರಕ್ತದ ಒತ್ತಡ\n", + "||- s1 tc, ಒಟ್ಟು ಸೀರಮ್ ಕೊಲೆಸ್ಟ್ರಾಲ್\n", + "||- s2 ldl, ಕಡಿಮೆ ಸಾಂದ್ರತೆ ಲಿಪೋಪ್ರೋಟೀನ್‌ಗಳು\n", + "||- s3 hdl, ಹೆಚ್ಚಿನ ಸಾಂದ್ರತೆ ಲಿಪೋಪ್ರೋಟೀನ್‌ಗಳು\n", + "||- s4 tch, ಒಟ್ಟು ಕೊಲೆಸ್ಟ್ರಾಲ್ / HDL\n", + "||- s5 ltg, ಸಾಧ್ಯತೆಯಾಗಿ ಸೀರಮ್ ಟ್ರೈಗ್ಲಿಸರೈಡ್ ಮಟ್ಟದ ಲಾಗ್\n", + "||- s6 glu, ರಕ್ತ ಸಕ್ಕರೆ ಮಟ್ಟ|\n", + "\n", + "\n", + "\n", + "\n", + "> 🎓 ನೆನಪಿಡಿ, ಇದು ಮೇಲ್ವಿಚಾರಿತ ಕಲಿಕೆ, ಮತ್ತು ನಮಗೆ 'y' ಎಂಬ ಹೆಸರಿನ ಲಕ್ಷ್ಯ ಬೇಕು.\n", + "\n", + "ನೀವು R ನಲ್ಲಿ ಡೇಟಾವನ್ನು ಸಂಚಾಲಿಸಲು ಮೊದಲು, ನೀವು ಡೇಟಾವನ್ನು R ನ ಮೆಮೊರಿಯಲ್ಲಿ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬೇಕು, ಅಥವಾ R ಡೇಟಾವನ್ನು ದೂರಸ್ಥವಾಗಿ ಪ್ರವೇಶಿಸಲು ಬಳಸಬಹುದಾದ ಸಂಪರ್ಕವನ್ನು ನಿರ್ಮಿಸಬೇಕು.\n", + "\n", + "> [readr](https://readr.tidyverse.org/) ಪ್ಯಾಕೇಜ್, ಇದು ಟಿಡಿವರ್ಸ್‌ನ ಭಾಗವಾಗಿದೆ, R ಗೆ ಚೌಕಾಕಾರದ ಡೇಟಾವನ್ನು ವೇಗವಾಗಿ ಮತ್ತು ಸ್ನೇಹಪೂರ್ವಕವಾಗಿ ಓದಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "ಈಗ, ಈ ಮೂಲ URL ನಲ್ಲಿ ನೀಡಲಾದ ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡೋಣ: \n", + "\n", + "ಮತ್ತೆ, ನಾವು `glimpse()` ಬಳಸಿ ನಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಸಮರ್ಥನೆ ಪರಿಶೀಲನೆ ಮಾಡೋಣ ಮತ್ತು `slice()` ಬಳಸಿ ಮೊದಲ 5 ಸಾಲುಗಳನ್ನು ಪ್ರದರ್ಶಿಸೋಣ.\n", + "\n", + "ಮುಂದೆ ಹೋಗುವ ಮೊದಲು, R ಕೋಡ್‌ನಲ್ಲಿ ನೀವು ಬಹುಶಃ συχνά ಎದುರಿಸುವುದಾದ ಒಂದು ವಿಷಯವನ್ನು ಪರಿಚಯಿಸೋಣ 🥁🥁: ಪೈಪ್ ಆಪರೇಟರ್ `%>%`\n", + "\n", + "ಪೈಪ್ ಆಪರೇಟರ್ (`%>%`) ಒಂದು ವಸ್ತುವನ್ನು ಮುಂದಕ್ಕೆ ಫಂಕ್ಷನ್ ಅಥವಾ ಕರೆ ಅಭಿವ್ಯಕ್ತಿಗೆ ಹಂಚಿಕೊಡುವ ಮೂಲಕ ತಾರ್ಕಿಕ ಕ್ರಮದಲ್ಲಿ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ನೀವು ಪೈಪ್ ಆಪರೇಟರ್ ಅನ್ನು ನಿಮ್ಮ ಕೋಡ್‌ನಲ್ಲಿ \"ಮತ್ತು ನಂತರ\" ಎಂದು ಹೇಳುತ್ತಿರುವಂತೆ ಭಾವಿಸಬಹುದು.\n" + ], + "metadata": { + "id": "KM6iXLH996Cl" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Import the data set\r\n", + "diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n", + "\r\n", + "\r\n", + "# Get a glimpse and dimensions of the data\r\n", + "glimpse(diabetes)\r\n", + "\r\n", + "\r\n", + "# Select the first 5 rows of the data\r\n", + "diabetes %>% \r\n", + " slice(1:5)" + ], + "outputs": [], + "metadata": { + "id": "Z1geAMhM-bSP" + } + }, + { + "cell_type": "markdown", + "source": [ + "`glimpse()` ನಮಗೆ ಈ ಡೇಟಾದಲ್ಲಿ 442 ಸಾಲುಗಳು ಮತ್ತು 11 ಕಾಲಮ್‌ಗಳಿವೆ ಎಂದು ತೋರಿಸುತ್ತದೆ, ಎಲ್ಲ ಕಾಲಮ್‌ಗಳೂ `double` ಡೇಟಾ ಪ್ರಕಾರದವು.\n", + "\n", + "
\n", + "\n", + "> glimpse() ಮತ್ತು slice() ಎಂಬವು [`dplyr`](https://dplyr.tidyverse.org/) ನಲ್ಲಿ ಇರುವ ಫಂಕ್ಷನ್‌ಗಳು. Dplyr, Tidyverse ಭಾಗವಾಗಿದ್ದು, ಡೇಟಾ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್‌ನ ವ್ಯಾಕರಣವಾಗಿದೆ, ಇದು ಸಾಮಾನ್ಯ ಡೇಟಾ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್ ಸವಾಲುಗಳನ್ನು ಪರಿಹರಿಸಲು ಸಹಾಯ ಮಾಡುವ ಸತತ ಕ್ರಿಯಾಪದಗಳ ಸಮೂಹವನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "
\n", + "\n", + "ಈಗ ನಮಗೆ ಡೇಟಾ ಇದ್ದು, ಈ ವ್ಯಾಯಾಮಕ್ಕಾಗಿ ಒಂದು ವೈಶಿಷ್ಟ್ಯ (`bmi`) ಯನ್ನು ಗುರಿಯಾಗಿಸೋಣ. ಇದಕ್ಕಾಗಿ ನಾವು ಬೇಕಾದ ಕಾಲಮ್‌ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಹಾಗಾದರೆ, ನಾವು ಇದನ್ನು ಹೇಗೆ ಮಾಡಬಹುದು?\n", + "\n", + "[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) ನಮಗೆ ಡೇಟಾ ಫ್ರೇಮ್‌ನಲ್ಲಿ ಕಾಲಮ್‌ಗಳನ್ನು *ಆಯ್ಕೆ* (ಮತ್ತು ಐಚ್ಛಿಕವಾಗಿ ಮರುನಾಮಕರಣ) ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "UwjVT1Hz-c3Z" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Select predictor feature `bmi` and outcome `y`\r\n", + "diabetes_select <- diabetes %>% \r\n", + " select(c(bmi, y))\r\n", + "\r\n", + "# Print the first 5 rows\r\n", + "diabetes_select %>% \r\n", + " slice(1:10)" + ], + "outputs": [], + "metadata": { + "id": "RDY1oAKI-m80" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 3. ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಡೇಟಾ\n", + "\n", + "ನಿರೀಕ್ಷಿತ ಕಲಿಕೆಯಲ್ಲಿ ಡೇಟಾವನ್ನು ಎರಡು ಉಪಸಮೂಹಗಳಾಗಿ *ಬೇರ್ಪಡಿಸುವುದು* ಸಾಮಾನ್ಯ ಅಭ್ಯಾಸ; ಒಂದು (ಸಾಮಾನ್ಯವಾಗಿ ದೊಡ್ಡದಾದ) ಸೆಟ್ ಅನ್ನು ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಬಳಸಲಾಗುತ್ತದೆ, ಮತ್ತು ಒಂದು ಸಣ್ಣ \"ಹೋಲ್ಡ್-ಬ್ಯಾಕ್\" ಸೆಟ್ ಅನ್ನು ಮಾದರಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಿತು ಎಂದು ನೋಡಲು ಬಳಸಲಾಗುತ್ತದೆ.\n", + "\n", + "ಈಗ ನಮಗೆ ಡೇಟಾ ಸಿದ್ಧವಾಗಿದೆ, ನಾವು ಈ ಡೇಟಾಸೆಟ್‌ನ ಸಂಖ್ಯೆಗಳ ನಡುವೆ ತಾರ್ಕಿಕ ಬೇರ್ಪಡಿಸುವಿಕೆಯನ್ನು ಯಂತ್ರ ಸಹಾಯದಿಂದ ನಿರ್ಧರಿಸಬಹುದೇ ಎಂದು ನೋಡಬಹುದು. ನಾವು [rsample](https://tidymodels.github.io/rsample/) ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಬಳಸಬಹುದು, ಇದು Tidymodels ಫ್ರೇಮ್ವರ್ಕ್‌ನ ಭಾಗವಾಗಿದ್ದು, ಡೇಟಾವನ್ನು *ಹೇಗೆ* ಬೇರ್ಪಡಿಸುವುದರ ಮಾಹಿತಿ ಹೊಂದಿರುವ ವಸ್ತುವನ್ನು ರಚಿಸಲು, ಮತ್ತು ನಂತರ ರಚಿಸಲಾದ ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗಳನ್ನು ಹೊರತೆಗೆಯಲು ಇನ್ನೂ ಎರಡು rsample ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಬಳಸಬಹುದು:\n" + ], + "metadata": { + "id": "SDk668xK-tc3" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "set.seed(2056)\r\n", + "# Split 67% of the data for training and the rest for tesing\r\n", + "diabetes_split <- diabetes_select %>% \r\n", + " initial_split(prop = 0.67)\r\n", + "\r\n", + "# Extract the resulting train and test sets\r\n", + "diabetes_train <- training(diabetes_split)\r\n", + "diabetes_test <- testing(diabetes_split)\r\n", + "\r\n", + "# Print the first 3 rows of the training set\r\n", + "diabetes_train %>% \r\n", + " slice(1:10)" + ], + "outputs": [], + "metadata": { + "id": "EqtHx129-1h-" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 4. Tidymodels ಬಳಸಿ ರೇಖೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ\n", + "\n", + "ಈಗ ನಾವು ನಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು ಸಿದ್ಧರಾಗಿದ್ದೇವೆ!\n", + "\n", + "Tidymodels ನಲ್ಲಿ, ನೀವು `parsnip()` ಬಳಸಿ ಮೂರು ಕಲ್ಪನೆಗಳನ್ನು ಸೂಚಿಸುವ ಮೂಲಕ ಮಾದರಿಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತೀರಿ:\n", + "\n", + "- ಮಾದರಿ **ಪ್ರಕಾರ** ರೇಖೀಯ ರಿಗ್ರೆಶನ್, ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್, ನಿರ್ಧಾರ ಮರ ಮಾದರಿಗಳು ಮತ್ತು ಇತರವುಗಳಂತಹ ಮಾದರಿಗಳನ್ನು ವಿಭಿನ್ನಗೊಳಿಸುತ್ತದೆ.\n", + "\n", + "- ಮಾದರಿ **ಮೋಡ್** ಸಾಮಾನ್ಯ ಆಯ್ಕೆಗಳು regression ಮತ್ತು classification ಅನ್ನು ಒಳಗೊಂಡಿದೆ; ಕೆಲವು ಮಾದರಿ ಪ್ರಕಾರಗಳು ಇವುಗಳಲ್ಲಿ ಯಾವುದಾದರೂ ಒಂದು ಅಥವಾ ಎರಡನ್ನೂ ಬೆಂಬಲಿಸುತ್ತವೆ.\n", + "\n", + "- ಮಾದರಿ **ಎಂಜಿನ್** ಮಾದರಿಯನ್ನು ಹೊಂದಿಸಲು ಬಳಸಲಾಗುವ ಗಣನಾತ್ಮಕ ಸಾಧನವಾಗಿದೆ. ಸಾಮಾನ್ಯವಾಗಿ ಇವು R ಪ್ಯಾಕೇಜ್‌ಗಳು, ಉದಾಹರಣೆಗೆ **`\"lm\"`** ಅಥವಾ **`\"ranger\"`**\n", + "\n", + "ಈ ಮಾದರಿ ಮಾಹಿತಿಯನ್ನು ಮಾದರಿ ನಿರ್ದಿಷ್ಟಪಡಿಸುವಿಕೆಯಲ್ಲಿ ಸೆರೆಹಿಡಿಯಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಒಂದನ್ನು ನಿರ್ಮಿಸೋಣ!\n" + ], + "metadata": { + "id": "sBOS-XhB-6v7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Build a linear model specification\r\n", + "lm_spec <- \r\n", + " # Type\r\n", + " linear_reg() %>% \r\n", + " # Engine\r\n", + " set_engine(\"lm\") %>% \r\n", + " # Mode\r\n", + " set_mode(\"regression\")\r\n", + "\r\n", + "\r\n", + "# Print the model specification\r\n", + "lm_spec" + ], + "outputs": [], + "metadata": { + "id": "20OwEw20--t3" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಮಾದರಿಯನ್ನು *ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ* ನಂತರ, ಮಾದರಿಯನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಸೂತ್ರ ಮತ್ತು ಕೆಲವು ಡೇಟಾವನ್ನು ಬಳಸಿ [`fit()`](https://parsnip.tidymodels.org/reference/fit.html) ಫಂಕ್ಷನ್ ಬಳಸಿ `ಅಂದಾಜು` ಅಥವಾ `ತರಬೇತಿ` ಮಾಡಬಹುದು.\n", + "\n", + "`y ~ .` ಅಂದರೆ ನಾವು `y` ಅನ್ನು ಭವಿಷ್ಯವಾಣಿ ಪ್ರಮಾಣ/ಲಕ್ಷ್ಯವಾಗಿ ಹೊಂದಿಸುವೆವು, ಎಲ್ಲಾ ಭವಿಷ್ಯವಾಣಿಕಾರರು/ವೈಶಿಷ್ಟ್ಯಗಳಿಂದ ವಿವರಿಸಲಾಗುತ್ತದೆ ಅಂದರೆ, `.` (ಈ ಪ್ರಕರಣದಲ್ಲಿ, ನಮಗೆ ಒಂದೇ ಭವಿಷ್ಯವಾಣಿಕಾರನು ಇದೆ: `bmi`)\n" + ], + "metadata": { + "id": "_oDHs89k_CJj" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Build a linear model specification\r\n", + "lm_spec <- linear_reg() %>% \r\n", + " set_engine(\"lm\") %>%\r\n", + " set_mode(\"regression\")\r\n", + "\r\n", + "\r\n", + "# Train a linear regression model\r\n", + "lm_mod <- lm_spec %>% \r\n", + " fit(y ~ ., data = diabetes_train)\r\n", + "\r\n", + "# Print the model\r\n", + "lm_mod" + ], + "outputs": [], + "metadata": { + "id": "YlsHqd-q_GJQ" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಮಾದರಿ ಔಟ್‌ಪುಟ್‌ನಿಂದ, ನಾವು ತರಬೇತಿ ಸಮಯದಲ್ಲಿ ಕಲಿತ ಸಹಗುಣಾಂಕಗಳನ್ನು ನೋಡಬಹುದು. ಅವುಗಳು ನಿಜವಾದ ಮತ್ತು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲಾದ ಚರಗಳ ನಡುವೆ ಕನಿಷ್ಠ ಒಟ್ಟು ದೋಷವನ್ನು ನೀಡುವ ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯ ರೇಖೆಯ ಸಹಗುಣಾಂಕಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ.\n", + "
\n", + "\n", + "## 5. ಪರೀಕ್ಷಾ ಸೆಟ್‌ನಲ್ಲಿ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡಿ\n", + "\n", + "ನಾವು ಈಗಾಗಲೇ ಒಂದು ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿರುವುದರಿಂದ, ಅದನ್ನು [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) ಬಳಸಿ ಪರೀಕ್ಷಾ ಡೇಟಾಸೆಟ್‌ಗೆ ರೋಗ ಪ್ರಗತಿಯನ್ನು y ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಳಸಬಹುದು. ಇದನ್ನು ಡೇಟಾ ಗುಂಪುಗಳ ನಡುವೆ ರೇಖೆಯನ್ನು ಬಿಡಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.\n" + ], + "metadata": { + "id": "kGZ22RQj_Olu" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make predictions for the test set\r\n", + "predictions <- lm_mod %>% \r\n", + " predict(new_data = diabetes_test)\r\n", + "\r\n", + "# Print out some of the predictions\r\n", + "predictions %>% \r\n", + " slice(1:5)" + ], + "outputs": [], + "metadata": { + "id": "nXHbY7M2_aao" + } + }, + { + "cell_type": "markdown", + "source": [ + "ವಾಹ್! 💃🕺 ನಾವು ಇತ್ತೀಚೆಗೆ ಒಂದು ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಂಡು ಅದನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಳಸಿದ್ದೇವೆ!\n", + "\n", + "ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವಾಗ, tidymodels ಸಂಪ್ರದಾಯವು ಯಾವಾಗಲೂ ಫಲಿತಾಂಶಗಳ ತಬಲ್/ಡೇಟಾ ಫ್ರೇಮ್ ಅನ್ನು ಮಾನಕೃತ ಕಾಲಮ್ ಹೆಸರುಗಳೊಂದಿಗೆ ಉತ್ಪಾದಿಸುವುದಾಗಿದೆ. ಇದರಿಂದ ಮೂಲ ಡೇಟಾ ಮತ್ತು ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು subsequent ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ, ಉದಾಹರಣೆಗೆ ಪ್ಲಾಟಿಂಗ್‌ಗೆ, ಬಳಸಬಹುದಾದ ಸ್ವರೂಪದಲ್ಲಿ ಸಂಯೋಜಿಸುವುದು ಸುಲಭವಾಗುತ್ತದೆ.\n", + "\n", + "`dplyr::bind_cols()` ಬಹು ಡೇಟಾ ಫ್ರೇಮ್‌ಗಳ ಕಾಲಮ್‌ಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಂಧಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "R_JstwUY_bIs" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Combine the predictions and the original test set\r\n", + "results <- diabetes_test %>% \r\n", + " bind_cols(predictions)\r\n", + "\r\n", + "\r\n", + "results %>% \r\n", + " slice(1:5)" + ], + "outputs": [], + "metadata": { + "id": "RybsMJR7_iI8" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 6. ಮಾದರಿ ಫಲಿತಾಂಶಗಳನ್ನು ಚಿತ್ರಿಸಿ\n", + "\n", + "ಈಗ, ಇದನ್ನು ದೃಶ್ಯವಾಗಿ ನೋಡಲು ಸಮಯವಾಗಿದೆ 📈. ನಾವು ಪರೀಕ್ಷಾ ಸೆಟ್‌ನ ಎಲ್ಲಾ `y` ಮತ್ತು `bmi` ಮೌಲ್ಯಗಳ scatter plot ಅನ್ನು ರಚಿಸುವೆವು, ನಂತರ ಮಾದರಿಯ ಡೇಟಾ ಗುಂಪುಗಳ ನಡುವೆ ಅತ್ಯಂತ ಸೂಕ್ತ ಸ್ಥಳದಲ್ಲಿ prediction ಗಳನ್ನು ಬಳಸಿ ಒಂದು ರೇಖೆಯನ್ನು ಬಿಡುತ್ತೇವೆ.\n", + "\n", + "R ನಲ್ಲಿ ಗ್ರಾಫ್‌ಗಳನ್ನು ರಚಿಸಲು ಹಲವಾರು ವ್ಯವಸ್ಥೆಗಳಿವೆ, ಆದರೆ `ggplot2` ಅತ್ಯಂತ ಸುಂದರ ಮತ್ತು ಬಹುಮುಖವಾಗಿದೆ. ಇದು ನಿಮಗೆ **ಸ್ವತಂತ್ರ ಘಟಕಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ** ಗ್ರಾಫ್‌ಗಳನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "XJbYbMZW_n_s" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Set a theme for the plot\r\n", + "theme_set(theme_light())\r\n", + "# Create a scatter plot\r\n", + "results %>% \r\n", + " ggplot(aes(x = bmi)) +\r\n", + " # Add a scatter plot\r\n", + " geom_point(aes(y = y), size = 1.6) +\r\n", + " # Add a line plot\r\n", + " geom_line(aes(y = .pred), color = \"blue\", size = 1.5)" + ], + "outputs": [], + "metadata": { + "id": "R9tYp3VW_sTn" + } + }, + { + "cell_type": "markdown", + "source": [ + "> ✅ ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಯೋಚಿಸಿ. ಒಂದು ಸರಳ ರೇಖೆ ಅನೇಕ ಸಣ್ಣ ಡೇಟಾ ಬಿಂದುಗಳ ಮೂಲಕ ಓಡುತ್ತಿದೆ, ಆದರೆ ಅದು ನಿಖರವಾಗಿ ಏನು ಮಾಡುತ್ತಿದೆ? ಈ ರೇಖೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಹೊಸ, ಕಾಣದ ಡೇಟಾ ಬಿಂದು ಪ್ಲಾಟ್‌ನ y ಅಕ್ಷದ ಸಂಬಂಧದಲ್ಲಿ ಎಲ್ಲಿ ಹೊಂದಿಕೊಳ್ಳಬೇಕು ಎಂದು ನೀವು ಹೇಗೆ ಊಹಿಸಬಹುದು ಎಂದು ನೀವು ನೋಡಬಹುದೇ? ಈ ಮಾದರಿಯ ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಯನ್ನು ಪದಗಳಲ್ಲಿ ವಿವರಿಸಲು ಪ್ರಯತ್ನಿಸಿ.\n", + "\n", + "ಅಭಿನಂದನೆಗಳು, ನೀವು ನಿಮ್ಮ ಮೊದಲ ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಅದನ್ನು ಬಳಸಿಕೊಂಡು ಊಹೆ ಮಾಡಿದ್ದೀರಿ, ಮತ್ತು ಅದನ್ನು ಪ್ಲಾಟ್‌ನಲ್ಲಿ ಪ್ರದರ್ಶಿಸಿದ್ದೀರಿ!\n" + ], + "metadata": { + "id": "zrPtHIxx_tNI" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/2-Regression/1-Tools/solution/notebook.ipynb b/translations/kn/2-Regression/1-Tools/solution/notebook.ipynb new file mode 100644 index 000000000..1ab4698ae --- /dev/null +++ b/translations/kn/2-Regression/1-Tools/solution/notebook.ipynb @@ -0,0 +1,677 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್‌ಗಾಗಿ ರೇಖೀಯ ರಿಗ್ರೆಷನ್ - ಪಾಠ 1\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಅಗತ್ಯವಾದ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಆಮದುಮಾಡಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn import datasets, linear_model, model_selection\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಡಯಾಬಿಟಿಸ್ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ, `X` ಡೇಟಾ ಮತ್ತು `y` ವೈಶಿಷ್ಟ್ಯಗಳಾಗಿ ವಿಭಜಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(442, 10)\n", + "[ 0.03807591 0.05068012 0.06169621 0.02187239 -0.0442235 -0.03482076\n", + " -0.04340085 -0.00259226 0.01990749 -0.01764613]\n" + ] + } + ], + "source": [ + "X, y = datasets.load_diabetes(return_X_y=True)\n", + "print(X.shape)\n", + "print(X[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಈ ವ್ಯಾಯಾಮಕ್ಕಾಗಿ ಗುರಿಯಾಗಿಸಲು ಕೇವಲ ಒಂದು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(442,)\n" + ] + } + ], + "source": [ + "# Selecting the 3rd feature\n", + "X = X[:, 2]\n", + "print(X.shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(442, 1)\n", + "[[ 0.06169621]\n", + " [-0.05147406]\n", + " [ 0.04445121]\n", + " [-0.01159501]\n", + " [-0.03638469]\n", + " [-0.04069594]\n", + " [-0.04716281]\n", + " [-0.00189471]\n", + " [ 0.06169621]\n", + " [ 0.03906215]\n", + " [-0.08380842]\n", + " [ 0.01750591]\n", + " [-0.02884001]\n", + " [-0.00189471]\n", + " [-0.02560657]\n", + " [-0.01806189]\n", + " [ 0.04229559]\n", + " [ 0.01211685]\n", + " [-0.0105172 ]\n", + " [-0.01806189]\n", + " [-0.05686312]\n", + " [-0.02237314]\n", + " [-0.00405033]\n", + " [ 0.06061839]\n", + " [ 0.03582872]\n", + " [-0.01267283]\n", + " [-0.07734155]\n", + " [ 0.05954058]\n", + " [-0.02129532]\n", + " [-0.00620595]\n", + " [ 0.04445121]\n", + " [-0.06548562]\n", + " [ 0.12528712]\n", + " [-0.05039625]\n", + " [-0.06332999]\n", + " [-0.03099563]\n", + " [ 0.02289497]\n", + " [ 0.01103904]\n", + " [ 0.07139652]\n", + " [ 0.01427248]\n", + " [-0.00836158]\n", + " [-0.06764124]\n", + " [-0.0105172 ]\n", + " [-0.02345095]\n", + " [ 0.06816308]\n", + " [-0.03530688]\n", + " [-0.01159501]\n", + " [-0.0730303 ]\n", + " [-0.04177375]\n", + " [ 0.01427248]\n", + " [-0.00728377]\n", + " [ 0.0164281 ]\n", + " [-0.00943939]\n", + " [-0.01590626]\n", + " [ 0.0250506 ]\n", + " [-0.04931844]\n", + " [ 0.04121778]\n", + " [-0.06332999]\n", + " [-0.06440781]\n", + " [-0.02560657]\n", + " [-0.00405033]\n", + " [ 0.00457217]\n", + " [-0.00728377]\n", + " [-0.0374625 ]\n", + " [-0.02560657]\n", + " [-0.02452876]\n", + " [-0.01806189]\n", + " [-0.01482845]\n", + " [-0.02991782]\n", + " [-0.046085 ]\n", + " [-0.06979687]\n", + " [ 0.03367309]\n", + " [-0.00405033]\n", + " [-0.02021751]\n", + " [ 0.00241654]\n", + " [-0.03099563]\n", + " [ 0.02828403]\n", + " [-0.03638469]\n", + " [-0.05794093]\n", + " [-0.0374625 ]\n", + " [ 0.01211685]\n", + " [-0.02237314]\n", + " [-0.03530688]\n", + " [ 0.00996123]\n", + " [-0.03961813]\n", + " [ 0.07139652]\n", + " [-0.07518593]\n", + " [-0.00620595]\n", + " [-0.04069594]\n", + " [-0.04824063]\n", + " [-0.02560657]\n", + " [ 0.0519959 ]\n", + " [ 0.00457217]\n", + " [-0.06440781]\n", + " [-0.01698407]\n", + " [-0.05794093]\n", + " [ 0.00996123]\n", + " [ 0.08864151]\n", + " [-0.00512814]\n", + " [-0.06440781]\n", + " [ 0.01750591]\n", + " [-0.04500719]\n", + " [ 0.02828403]\n", + " [ 0.04121778]\n", + " [ 0.06492964]\n", + " [-0.03207344]\n", + " [-0.07626374]\n", + " [ 0.04984027]\n", + " [ 0.04552903]\n", + " [-0.00943939]\n", + " [-0.03207344]\n", + " [ 0.00457217]\n", + " [ 0.02073935]\n", + " [ 0.01427248]\n", + " [ 0.11019775]\n", + " [ 0.00133873]\n", + " [ 0.05846277]\n", + " [-0.02129532]\n", + " [-0.0105172 ]\n", + " [-0.04716281]\n", + " [ 0.00457217]\n", + " [ 0.01750591]\n", + " [ 0.08109682]\n", + " [ 0.0347509 ]\n", + " [ 0.02397278]\n", + " [-0.00836158]\n", + " [-0.06117437]\n", + " [-0.00189471]\n", + " [-0.06225218]\n", + " [ 0.0164281 ]\n", + " [ 0.09618619]\n", + " [-0.06979687]\n", + " [-0.02129532]\n", + " [-0.05362969]\n", + " [ 0.0433734 ]\n", + " [ 0.05630715]\n", + " [-0.0816528 ]\n", + " [ 0.04984027]\n", + " [ 0.11127556]\n", + " [ 0.06169621]\n", + " [ 0.01427248]\n", + " [ 0.04768465]\n", + " [ 0.01211685]\n", + " [ 0.00564998]\n", + " [ 0.04660684]\n", + " [ 0.12852056]\n", + " [ 0.05954058]\n", + " [ 0.09295276]\n", + " [ 0.01535029]\n", + " [-0.00512814]\n", + " [ 0.0703187 ]\n", + " [-0.00405033]\n", + " [-0.00081689]\n", + " [-0.04392938]\n", + " [ 0.02073935]\n", + " [ 0.06061839]\n", + " [-0.0105172 ]\n", + " [-0.03315126]\n", + " [-0.06548562]\n", + " [ 0.0433734 ]\n", + " [-0.06225218]\n", + " [ 0.06385183]\n", + " [ 0.03043966]\n", + " [ 0.07247433]\n", + " [-0.0191397 ]\n", + " [-0.06656343]\n", + " [-0.06009656]\n", + " [ 0.06924089]\n", + " [ 0.05954058]\n", + " [-0.02668438]\n", + " [-0.02021751]\n", + " [-0.046085 ]\n", + " [ 0.07139652]\n", + " [-0.07949718]\n", + " [ 0.00996123]\n", + " [-0.03854032]\n", + " [ 0.01966154]\n", + " [ 0.02720622]\n", + " [-0.00836158]\n", + " [-0.01590626]\n", + " [ 0.00457217]\n", + " [-0.04285156]\n", + " [ 0.00564998]\n", + " [-0.03530688]\n", + " [ 0.02397278]\n", + " [-0.01806189]\n", + " [ 0.04229559]\n", + " [-0.0547075 ]\n", + " [-0.00297252]\n", + " [-0.06656343]\n", + " [-0.01267283]\n", + " [-0.04177375]\n", + " [-0.03099563]\n", + " [-0.00512814]\n", + " [-0.05901875]\n", + " [ 0.0250506 ]\n", + " [-0.046085 ]\n", + " [ 0.00349435]\n", + " [ 0.05415152]\n", + " [-0.04500719]\n", + " [-0.05794093]\n", + " [-0.05578531]\n", + " [ 0.00133873]\n", + " [ 0.03043966]\n", + " [ 0.00672779]\n", + " [ 0.04660684]\n", + " [ 0.02612841]\n", + " [ 0.04552903]\n", + " [ 0.04013997]\n", + " [-0.01806189]\n", + " [ 0.01427248]\n", + " [ 0.03690653]\n", + " [ 0.00349435]\n", + " [-0.07087468]\n", + " [-0.03315126]\n", + " [ 0.09403057]\n", + " [ 0.03582872]\n", + " [ 0.03151747]\n", + " [-0.06548562]\n", + " [-0.04177375]\n", + " [-0.03961813]\n", + " [-0.03854032]\n", + " [-0.02560657]\n", + " [-0.02345095]\n", + " [-0.06656343]\n", + " [ 0.03259528]\n", + " [-0.046085 ]\n", + " [-0.02991782]\n", + " [-0.01267283]\n", + " [-0.01590626]\n", + " [ 0.07139652]\n", + " [-0.03099563]\n", + " [ 0.00026092]\n", + " [ 0.03690653]\n", + " [ 0.03906215]\n", + " [-0.01482845]\n", + " [ 0.00672779]\n", + " [-0.06871905]\n", + " [-0.00943939]\n", + " [ 0.01966154]\n", + " [ 0.07462995]\n", + " [-0.00836158]\n", + " [-0.02345095]\n", + " [-0.046085 ]\n", + " [ 0.05415152]\n", + " [-0.03530688]\n", + " [-0.03207344]\n", + " [-0.0816528 ]\n", + " [ 0.04768465]\n", + " [ 0.06061839]\n", + " [ 0.05630715]\n", + " [ 0.09834182]\n", + " [ 0.05954058]\n", + " [ 0.03367309]\n", + " [ 0.05630715]\n", + " [-0.06548562]\n", + " [ 0.16085492]\n", + " [-0.05578531]\n", + " [-0.02452876]\n", + " [-0.03638469]\n", + " [-0.00836158]\n", + " [-0.04177375]\n", + " [ 0.12744274]\n", + " [-0.07734155]\n", + " [ 0.02828403]\n", + " [-0.02560657]\n", + " [-0.06225218]\n", + " [-0.00081689]\n", + " [ 0.08864151]\n", + " [-0.03207344]\n", + " [ 0.03043966]\n", + " [ 0.00888341]\n", + " [ 0.00672779]\n", + " [-0.02021751]\n", + " [-0.02452876]\n", + " [-0.01159501]\n", + " [ 0.02612841]\n", + " [-0.05901875]\n", + " [-0.03638469]\n", + " [-0.02452876]\n", + " [ 0.01858372]\n", + " [-0.0902753 ]\n", + " [-0.00512814]\n", + " [-0.05255187]\n", + " [-0.02237314]\n", + " [-0.02021751]\n", + " [-0.0547075 ]\n", + " [-0.00620595]\n", + " [-0.01698407]\n", + " [ 0.05522933]\n", + " [ 0.07678558]\n", + " [ 0.01858372]\n", + " [-0.02237314]\n", + " [ 0.09295276]\n", + " [-0.03099563]\n", + " [ 0.03906215]\n", + " [-0.06117437]\n", + " [-0.00836158]\n", + " [-0.0374625 ]\n", + " [-0.01375064]\n", + " [ 0.07355214]\n", + " [-0.02452876]\n", + " [ 0.03367309]\n", + " [ 0.0347509 ]\n", + " [-0.03854032]\n", + " [-0.03961813]\n", + " [-0.00189471]\n", + " [-0.03099563]\n", + " [-0.046085 ]\n", + " [ 0.00133873]\n", + " [ 0.06492964]\n", + " [ 0.04013997]\n", + " [-0.02345095]\n", + " [ 0.05307371]\n", + " [ 0.04013997]\n", + " [-0.02021751]\n", + " [ 0.01427248]\n", + " [-0.03422907]\n", + " [ 0.00672779]\n", + " [ 0.00457217]\n", + " [ 0.03043966]\n", + " [ 0.0519959 ]\n", + " [ 0.06169621]\n", + " [-0.00728377]\n", + " [ 0.00564998]\n", + " [ 0.05415152]\n", + " [-0.00836158]\n", + " [ 0.114509 ]\n", + " [ 0.06708527]\n", + " [-0.05578531]\n", + " [ 0.03043966]\n", + " [-0.02560657]\n", + " [ 0.10480869]\n", + " [-0.00620595]\n", + " [-0.04716281]\n", + " [-0.04824063]\n", + " [ 0.08540807]\n", + " [-0.01267283]\n", + " [-0.03315126]\n", + " [-0.00728377]\n", + " [-0.01375064]\n", + " [ 0.05954058]\n", + " [ 0.02181716]\n", + " [ 0.01858372]\n", + " [-0.01159501]\n", + " [-0.00297252]\n", + " [ 0.01750591]\n", + " [-0.02991782]\n", + " [-0.02021751]\n", + " [-0.05794093]\n", + " [ 0.06061839]\n", + " [-0.04069594]\n", + " [-0.07195249]\n", + " [-0.05578531]\n", + " [ 0.04552903]\n", + " [-0.00943939]\n", + " [-0.03315126]\n", + " [ 0.04984027]\n", + " [-0.08488624]\n", + " [ 0.00564998]\n", + " [ 0.02073935]\n", + " [-0.00728377]\n", + " [ 0.10480869]\n", + " [-0.02452876]\n", + " [-0.00620595]\n", + " [-0.03854032]\n", + " [ 0.13714305]\n", + " [ 0.17055523]\n", + " [ 0.00241654]\n", + " [ 0.03798434]\n", + " [-0.05794093]\n", + " [-0.00943939]\n", + " [-0.02345095]\n", + " [-0.0105172 ]\n", + " [-0.03422907]\n", + " [-0.00297252]\n", + " [ 0.06816308]\n", + " [ 0.00996123]\n", + " [ 0.00241654]\n", + " [-0.03854032]\n", + " [ 0.02612841]\n", + " [-0.08919748]\n", + " [ 0.06061839]\n", + " [-0.02884001]\n", + " [-0.02991782]\n", + " [-0.0191397 ]\n", + " [-0.04069594]\n", + " [ 0.01535029]\n", + " [-0.02452876]\n", + " [ 0.00133873]\n", + " [ 0.06924089]\n", + " [-0.06979687]\n", + " [-0.02991782]\n", + " [-0.046085 ]\n", + " [ 0.01858372]\n", + " [ 0.00133873]\n", + " [-0.03099563]\n", + " [-0.00405033]\n", + " [ 0.01535029]\n", + " [ 0.02289497]\n", + " [ 0.04552903]\n", + " [-0.04500719]\n", + " [-0.03315126]\n", + " [ 0.097264 ]\n", + " [ 0.05415152]\n", + " [ 0.12313149]\n", + " [-0.08057499]\n", + " [ 0.09295276]\n", + " [-0.05039625]\n", + " [-0.01159501]\n", + " [-0.0277622 ]\n", + " [ 0.05846277]\n", + " [ 0.08540807]\n", + " [-0.00081689]\n", + " [ 0.00672779]\n", + " [ 0.00888341]\n", + " [ 0.08001901]\n", + " [ 0.07139652]\n", + " [-0.02452876]\n", + " [-0.0547075 ]\n", + " [-0.03638469]\n", + " [ 0.0164281 ]\n", + " [ 0.07786339]\n", + " [-0.03961813]\n", + " [ 0.01103904]\n", + " [-0.04069594]\n", + " [-0.03422907]\n", + " [ 0.00564998]\n", + " [ 0.08864151]\n", + " [-0.03315126]\n", + " [-0.05686312]\n", + " [-0.03099563]\n", + " [ 0.05522933]\n", + " [-0.06009656]\n", + " [ 0.00133873]\n", + " [-0.02345095]\n", + " [-0.07410811]\n", + " [ 0.01966154]\n", + " [-0.01590626]\n", + " [-0.01590626]\n", + " [ 0.03906215]\n", + " [-0.0730303 ]]\n" + ] + } + ], + "source": [ + "#Reshaping to get a 2D array\n", + "X = X.reshape(-1, 1)\n", + "print(X.shape)\n", + "print(X)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`X` ಮತ್ತು `y` ಎರಡರಿಗೂ ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಮಾದರಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ತರಬೇತಿ ಡೇಟಾದೊಂದಿಗೆ ಅದನ್ನು ಹೊಂದಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = linear_model.LinearRegression()\n", + "model.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ಬಳಸಿ ಒಂದು ಸಾಲನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = model.predict(X_test)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಫಲಿತಾಂಶಗಳನ್ನು ಒಂದು ರೇಖಾಚಿತ್ರದಲ್ಲಿ ಪ್ರದರ್ಶಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbmUlEQVR4nO3de3wU1f0//tcQIHIxiQmBALsQUdSigNYLxn6iSaECaj/5NKTawAfRWi2IbUBRS71gtIrKp5rUj5dqK7ZfXfwAWcVS8ALuYtCIQEERvAC/cAtJoCBJQAhkc35/rLtmk92dmd2Z2ZnZ1/Px2Edl92Tm7CTd894z7/M+khBCgIiIiMhEuiW6A0RERESdMUAhIiIi02GAQkRERKbDAIWIiIhMhwEKERERmQ4DFCIiIjIdBihERERkOgxQiIiIyHS6J7oDsWhvb8f+/ftx+umnQ5KkRHeHiIiIFBBCoKWlBYMGDUK3btHnSCwZoOzfvx9OpzPR3SAiIqIY7N27Fw6HI2obSwYop59+OgD/G0xLS0twb4iIiEiJ5uZmOJ3O4DgejSUDlMBtnbS0NAYoREREFqMkPYNJskRERGQ6DFCIiIjIdBigEBERkekwQCEiIiLTYYBCREREpqMqQHn++ecxatSo4OqZvLw8rFy5Mvh6QUEBJEkKeUyfPj3kGHv27MG1116L3r17o3///rj77rvR1tamzbshIiIiW1C1zNjhcODxxx/H8OHDIYTA3/72NxQVFWHTpk04//zzAQC33norHn744eDP9O7dO/jfPp8P1157LXJycvDRRx+hvr4eN954I3r06IHHHntMo7dEREREVicJIUQ8B8jMzMSCBQtwyy23oKCgABdeeCEqKirCtl25ciWuu+467N+/HwMGDAAAvPDCC7j33ntx8OBB9OzZU9E5m5ubkZ6ejqamJtZBISIisgg143fMOSg+nw+vv/46jh07hry8vODzr732Gvr164cLLrgAc+fOxbfffht8raamBiNHjgwGJwAwfvx4NDc3Y+vWrRHP1draiubm5pAHERERac/n88Hr9WLRokXwer3w+XwJ6YfqSrJbtmxBXl4eTpw4gb59++KNN97AiBEjAACTJ0/G0KFDMWjQIHz22We499578dVXX8HtdgMAGhoaQoITAMF/NzQ0RDzn/PnzUV5errarREREpILb7UZZWRn2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_test, y_test, color='black')\n", + "plt.plot(X_test, y_pred, color='blue', linewidth=3)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "16ff1a974f6e4348e869e4a7d366b86a", + "translation_date": "2025-12-19T16:28:35+00:00", + "source_file": "2-Regression/1-Tools/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/2-Data/README.md b/translations/kn/2-Regression/2-Data/README.md new file mode 100644 index 000000000..c068b83df --- /dev/null +++ b/translations/kn/2-Regression/2-Data/README.md @@ -0,0 +1,228 @@ + +# Scikit-learn ಬಳಸಿ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: ಡೇಟಾವನ್ನು ಸಿದ್ಧಪಡಿಸಿ ಮತ್ತು ದೃಶ್ಯೀಕರಿಸಿ + +![ಡೇಟಾ ದೃಶ್ಯೀಕರಣ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.kn.png) + +ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](https://twitter.com/dasani_decoded) ಅವರಿಂದ + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +> ### [ಈ ಪಾಠ R ನಲ್ಲಿ ಲಭ್ಯವಿದೆ!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## ಪರಿಚಯ + +Scikit-learn ಬಳಸಿ ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿ ನಿರ್ಮಾಣವನ್ನು ಪ್ರಾರಂಭಿಸಲು ನೀವು ಅಗತ್ಯವಿರುವ ಸಾಧನಗಳೊಂದಿಗೆ ಸಿದ್ಧರಾಗಿರುವಾಗ, ನಿಮ್ಮ ಡೇಟಾದ ಬಗ್ಗೆ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಲು ನೀವು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. ಡೇಟಾ ಜೊತೆಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಮತ್ತು ML ಪರಿಹಾರಗಳನ್ನು ಅನ್ವಯಿಸುವಾಗ, ನಿಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸಾಧ್ಯತೆಗಳನ್ನು ಸರಿಯಾಗಿ ಅನ್ಲಾಕ್ ಮಾಡಲು ಸರಿಯಾದ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುವುದು ಬಹಳ ಮುಖ್ಯ. + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಕಲಿಯುವಿರಿ: + +- ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮಾದರಿ ನಿರ್ಮಾಣಕ್ಕೆ ಹೇಗೆ ಸಿದ್ಧಪಡಿಸುವುದು. +- ಡೇಟಾ ದೃಶ್ಯೀಕರಣಕ್ಕಾಗಿ Matplotlib ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು. + +## ನಿಮ್ಮ ಡೇಟಾದ ಸರಿಯಾದ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುವುದು + +ನೀವು ಉತ್ತರಿಸಬೇಕಾದ ಪ್ರಶ್ನೆ ಯಾವ ರೀತಿಯ ML ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ನೀವು ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಮತ್ತು ನೀವು ಪಡೆದ ಉತ್ತರದ ಗುಣಮಟ್ಟವು ನಿಮ್ಮ ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಬಹಳ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ. + +ಈ ಪಾಠಕ್ಕಾಗಿ ನೀಡಲಾದ [ಡೇಟಾ](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ಅನ್ನು ನೋಡಿ. ನೀವು ಈ .csv ಫೈಲ್ ಅನ್ನು VS Code ನಲ್ಲಿ ತೆರೆಯಬಹುದು. ಒಂದು ತ್ವರಿತ ಪರಿಶೀಲನೆ ತಕ್ಷಣವೇ ಖಾಲಿ ಸ್ಥಳಗಳು ಮತ್ತು ಸ್ಟ್ರಿಂಗ್‌ಗಳು ಮತ್ತು ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾದ ಮಿಶ್ರಣವಿದೆ ಎಂದು ತೋರಿಸುತ್ತದೆ. 'Package' ಎಂಬ ವಿಚಿತ್ರ ಕಾಲಮ್ ಕೂಡ ಇದೆ, ಅಲ್ಲಿ ಡೇಟಾ 'sacks', 'bins' ಮತ್ತು ಇತರ ಮೌಲ್ಯಗಳ ಮಿಶ್ರಣವಾಗಿದೆ. ಡೇಟಾ, ವಾಸ್ತವದಲ್ಲಿ, ಸ್ವಲ್ಪ ಗೊಂದಲವಾಗಿದೆ. + +[![ML for beginners - How to Analyze and Clean a Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML for beginners - How to Analyze and Clean a Dataset") + +> 🎥 ಈ ಪಾಠಕ್ಕಾಗಿ ಡೇಟಾ ಸಿದ್ಧಪಡಿಸುವುದನ್ನು ತೋರಿಸುವ ಚಿಕ್ಕ ವೀಡಿಯೋಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ವಾಸ್ತವದಲ್ಲಿ, ಬಾಕ್ಸ್‌ನಿಂದಲೇ ML ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಸಂಪೂರ್ಣ ಸಿದ್ಧವಾಗಿರುವ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಪಡೆಯುವುದು ಸಾಮಾನ್ಯವಲ್ಲ. ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಪೈಥಾನ್ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿ ಕಚ್ಚಾ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಹೇಗೆ ಸಿದ್ಧಪಡಿಸುವುದು ಎಂದು ಕಲಿಯುತ್ತೀರಿ. ನೀವು ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವ ವಿವಿಧ ತಂತ್ರಗಳನ್ನು ಸಹ ಕಲಿಯುತ್ತೀರಿ. + +## ಪ್ರಕರಣ ಅಧ್ಯಯನ: 'ಪಂಪ್ಕಿನ್ ಮಾರುಕಟ್ಟೆ' + +ಈ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ನೀವು ಮೂಲ `data` ಫೋಲ್ಡರ್‌ನಲ್ಲಿ [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ಎಂಬ .csv ಫೈಲ್ ಅನ್ನು ಕಾಣಬಹುದು, ಇದರಲ್ಲಿ ನಗರಗಳ ಪ್ರಕಾರ ಗುಂಪುಮಾಡಲಾದ ಪಂಪ್ಕಿನ್ ಮಾರುಕಟ್ಟೆಯ ಬಗ್ಗೆ 1757 ಸಾಲುಗಳ ಡೇಟಾ ಇದೆ. ಇದು ಯುನೈಟೆಡ್ ಸ್ಟೇಟ್ಸ್ ಡಿಪಾರ್ಟ್‌ಮೆಂಟ್ ಆಫ್ ಅಗ್ರಿಕಲ್ಚರ್ ವಿತರಿಸುವ [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) ನಿಂದ ತೆಗೆದ ಕಚ್ಚಾ ಡೇಟಾ. + +### ಡೇಟಾ ಸಿದ್ಧಪಡಿಸುವುದು + +ಈ ಡೇಟಾ ಸಾರ್ವಜನಿಕ ಡೊಮೇನ್‌ನಲ್ಲಿ ಇದೆ. ಇದನ್ನು USDA ವೆಬ್‌ಸೈಟ್‌ನಿಂದ ಪ್ರತಿ ನಗರಕ್ಕೆ ಪ್ರತ್ಯೇಕ ಫೈಲ್‌ಗಳಾಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು. ಬಹಳಷ್ಟು ಪ್ರತ್ಯೇಕ ಫೈಲ್‌ಗಳನ್ನು ತಪ್ಪಿಸಲು, ನಾವು ಎಲ್ಲಾ ನಗರಗಳ ಡೇಟಾವನ್ನು ಒಂದೇ ಸ್ಪ್ರೆಡ್ಶೀಟ್‌ಗೆ ಸಂಯೋಜಿಸಿದ್ದೇವೆ, ಆದ್ದರಿಂದ ನಾವು ಡೇಟಾವನ್ನು ಸ್ವಲ್ಪ _ಸಿದ್ಧಪಡಿಸಿದ್ದೇವೆ_. ಮುಂದಿನದಾಗಿ, ಡೇಟಾವನ್ನು ನಿಕಟವಾಗಿ ನೋಡೋಣ. + +### ಪಂಪ್ಕಿನ್ ಡೇಟಾ - ಪ್ರಾಥಮಿಕ ನಿರ್ಣಯಗಳು + +ನೀವು ಈ ಡೇಟಾದ ಬಗ್ಗೆ ಏನು ಗಮನಿಸುತ್ತೀರಿ? ನೀವು ಈಗಾಗಲೇ ಸ್ಟ್ರಿಂಗ್‌ಗಳು, ಸಂಖ್ಯೆಗಳು, ಖಾಲಿ ಸ್ಥಳಗಳು ಮತ್ತು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕಾದ ವಿಚಿತ್ರ ಮೌಲ್ಯಗಳ ಮಿಶ್ರಣವಿದೆ ಎಂದು ನೋಡಿದ್ದೀರಿ. + +ನೀವು Regression ತಂತ್ರವನ್ನು ಬಳಸಿ ಈ ಡೇಟಾದಿಂದ ಯಾವ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಬಹುದು? "ನಿಗದಿತ ತಿಂಗಳಲ್ಲಿ ಮಾರಾಟಕ್ಕೆ ಇರುವ ಪಂಪ್ಕಿನ್‌ನ ಬೆಲೆಯನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡು" ಎಂದು ಯೋಚಿಸಿ. ಡೇಟಾವನ್ನು ಮತ್ತೆ ನೋಡಿದಾಗ, ಈ ಕಾರ್ಯಕ್ಕೆ ಅಗತ್ಯವಿರುವ ಡೇಟಾ ರಚನೆಯನ್ನು ರಚಿಸಲು ನೀವು ಕೆಲವು ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಬೇಕಾಗುತ್ತದೆ. + +## ಅಭ್ಯಾಸ - ಪಂಪ್ಕಿನ್ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸಿ + +ನಾವು [Pandas](https://pandas.pydata.org/) (ಹೆಸರು `Python Data Analysis` ನ ಸಂಕ್ಷಿಪ್ತ) ಎಂಬ ಡೇಟಾ ರೂಪಿಸುವುದಕ್ಕೆ ಬಹಳ ಉಪಯುಕ್ತವಾದ ಸಾಧನವನ್ನು ಬಳಸಿ ಈ ಪಂಪ್ಕಿನ್ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸಿ ಮತ್ತು ಸಿದ್ಧಪಡಿಸೋಣ. + +### ಮೊದಲು, ಕಳೆದುಹೋಗಿರುವ ದಿನಾಂಕಗಳನ್ನು ಪರಿಶೀಲಿಸಿ + +ನೀವು ಮೊದಲು ಕಳೆದುಹೋಗಿರುವ ದಿನಾಂಕಗಳಿಗಾಗಿ ಕ್ರಮಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ: + +1. ದಿನಾಂಕಗಳನ್ನು ತಿಂಗಳ ಫಾರ್ಮ್ಯಾಟ್‌ಗೆ ಪರಿವರ್ತಿಸಿ (ಇವು US ದಿನಾಂಕಗಳು, ಆದ್ದರಿಂದ ಫಾರ್ಮ್ಯಾಟ್ `MM/DD/YYYY` ಆಗಿದೆ). +2. ತಿಂಗಳನ್ನೂ ಹೊಸ ಕಾಲಮ್‌ಗೆ ಹೊರತೆಗೆಯಿರಿ. + +Visual Studio Code ನಲ್ಲಿ _notebook.ipynb_ ಫೈಲ್ ತೆರೆಯಿರಿ ಮತ್ತು ಸ್ಪ್ರೆಡ್ಶೀಟ್ ಅನ್ನು ಹೊಸ Pandas ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಆಮದುಮಾಡಿ. + +1. ಮೊದಲ ಐದು ಸಾಲುಗಳನ್ನು ನೋಡಲು `head()` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಿ. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ ಕೊನೆಯ ಐದು ಸಾಲುಗಳನ್ನು ನೋಡಲು ನೀವು ಯಾವ ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸುತ್ತೀರಿ? + +1. ಪ್ರಸ್ತುತ ಡೇಟಾಫ್ರೇಮ್‌ನಲ್ಲಿ ಕಳೆದುಹೋಗಿರುವ ಡೇಟಾ ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ: + + ```python + pumpkins.isnull().sum() + ``` + + ಕಳೆದುಹೋಗಿರುವ ಡೇಟಾ ಇದೆ, ಆದರೆ ಅದು ಈ ಕಾರ್ಯಕ್ಕೆ ಪ್ರಭಾವ ಬೀರುವುದಿಲ್ಲದಿರಬಹುದು. + +1. ನಿಮ್ಮ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಕೆಲಸ ಮಾಡಲು, ನೀವು ಬೇಕಾದ ಕಾಲಮ್‌ಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆಮಾಡಿ, `loc` ಫಂಕ್ಷನ್ ಬಳಸಿ, ಇದು ಮೂಲ ಡೇಟಾಫ್ರೇಮ್‌ನಿಂದ ಸಾಲುಗಳ ಗುಂಪು (ಮೊದಲ ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿ) ಮತ್ತು ಕಾಲಮ್‌ಗಳನ್ನು (ಎರಡನೇ ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿ) ಹೊರತೆಗೆಯುತ್ತದೆ. ಕೆಳಗಿನ ಉದಾಹರಣೆಯಲ್ಲಿ `:` ಅಂದರೆ "ಎಲ್ಲಾ ಸಾಲುಗಳು". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### ಎರಡನೇದು, ಪಂಪ್ಕಿನ್‌ನ ಸರಾಸರಿ ಬೆಲೆಯನ್ನು ನಿರ್ಧರಿಸಿ + +ನಿಗದಿತ ತಿಂಗಳಲ್ಲಿ ಪಂಪ್ಕಿನ್‌ನ ಸರಾಸರಿ ಬೆಲೆಯನ್ನು ಹೇಗೆ ನಿರ್ಧರಿಸುವುದು ಎಂದು ಯೋಚಿಸಿ. ಈ ಕಾರ್ಯಕ್ಕೆ ನೀವು ಯಾವ ಕಾಲಮ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತೀರಿ? ಸೂಚನೆ: ನಿಮಗೆ 3 ಕಾಲಮ್‌ಗಳು ಬೇಕಾಗುತ್ತವೆ. + +ಉತ್ತರ: `Low Price` ಮತ್ತು `High Price` ಕಾಲಮ್‌ಗಳ ಸರಾಸರಿ ತೆಗೆದು ಹೊಸ `Price` ಕಾಲಮ್ ಅನ್ನು ತುಂಬಿಸಿ, ಮತ್ತು `Date` ಕಾಲಮ್ ಅನ್ನು ತಿಂಗಳಷ್ಟೇ ತೋರಿಸುವಂತೆ ಪರಿವರ್ತಿಸಿ. ಮೇಲಿನ ಪರಿಶೀಲನೆಯ ಪ್ರಕಾರ, ದಿನಾಂಕಗಳು ಅಥವಾ ಬೆಲೆಗಳಿಗೆ ಯಾವುದೇ ಕಳೆದುಹೋಗಿರುವ ಡೇಟಾ ಇಲ್ಲ. + +1. ಸರಾಸರಿ ಲೆಕ್ಕಿಸಲು ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ ನೀವು `print(month)` ಬಳಸಿ ಯಾವುದೇ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಲು ಮುಕ್ತವಾಗಿರಿ. + +2. ಈಗ, ನಿಮ್ಮ ಪರಿವರ್ತಿತ ಡೇಟಾವನ್ನು ಹೊಸ Pandas ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ನಕಲಿಸಿ: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + ನಿಮ್ಮ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಮುದ್ರಿಸಿದರೆ, ನೀವು ಹೊಸ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಶುದ್ಧ, ವ್ಯವಸ್ಥಿತ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಕಾಣುತ್ತೀರಿ. + +### ಆದರೆ ಕಾಯಿರಿ! ಇಲ್ಲಿ ಒಂದು ವಿಚಿತ್ರ ವಿಷಯವಿದೆ + +ನೀವು `Package` ಕಾಲಮ್ ನೋಡಿದರೆ, ಪಂಪ್ಕಿನ್‌ಗಳು ವಿವಿಧ ರೂಪಗಳಲ್ಲಿ ಮಾರಾಟವಾಗುತ್ತಿವೆ. ಕೆಲವು '1 1/9 bushel' ಅಳತೆಯಲ್ಲಿ, ಕೆಲವು '1/2 bushel' ಅಳತೆಯಲ್ಲಿ, ಕೆಲವು ಪ್ರತಿ ಪಂಪ್ಕಿನ್, ಕೆಲವು ಪ್ರತಿ ಪೌಂಡ್, ಮತ್ತು ಕೆಲವು ಬೃಹತ್ ಬಾಕ್ಸ್‌ಗಳಲ್ಲಿ ವಿವಿಧ ಅಗಲಗಳೊಂದಿಗೆ ಮಾರಾಟವಾಗುತ್ತವೆ. + +> ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು ಸತತವಾಗಿ ತೂಕಮಾಪನ ಮಾಡುವುದು ಬಹಳ ಕಷ್ಟ. + +ಮೂಲ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಿದಾಗ, `Unit of Sale` 'EACH' ಅಥವಾ 'PER BIN' ಆಗಿರುವ ಯಾವುದೇ ಐಟಂಗಳು `Package` ಪ್ರಕಾರ ಇಂಚು, ಬಿನ್ ಅಥವಾ 'each' ಆಗಿವೆ. ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು ಸತತವಾಗಿ ತೂಕಮಾಪನ ಮಾಡುವುದು ಕಷ್ಟವಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ನಾವು `Package` ಕಾಲಮ್‌ನಲ್ಲಿ 'bushel' ಸ್ಟ್ರಿಂಗ್ ಇರುವ ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆಮಾಡಿ ಫಿಲ್ಟರ್ ಮಾಡೋಣ. + +1. ಫೈಲ್‌ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ, ಪ್ರಾಥಮಿಕ .csv ಆಮದುಮಾಡಿದ ನಂತರ ಫಿಲ್ಟರ್ ಸೇರಿಸಿ: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + ನೀವು ಈಗ ಡೇಟಾವನ್ನು ಮುದ್ರಿಸಿದರೆ, ನೀವು ಬಸ್ಸೆಲ್ ಮೂಲಕ ಮಾರಾಟವಾಗುವ ಸುಮಾರು 415 ಸಾಲುಗಳ ಡೇಟಾವನ್ನು ಮಾತ್ರ ಪಡೆಯುತ್ತಿರುವಿರಿ ಎಂದು ಕಾಣಬಹುದು. + +### ಆದರೆ ಕಾಯಿರಿ! ಇನ್ನೂ ಒಂದು ಕೆಲಸ ಮಾಡಬೇಕಿದೆ + +ನೀವು ಗಮನಿಸಿದ್ದೀರಾ, ಬಸ್ಸೆಲ್ ಪ್ರಮಾಣವು ಪ್ರತಿ ಸಾಲಿಗೆ ಬದಲಾಗುತ್ತದೆ? ನೀವು ಬೆಲೆಯನ್ನು ಪ್ರತಿ ಬಸ್ಸೆಲ್ ಪ್ರಕಾರ ಸಾಮಾನ್ಯೀಕರಿಸಬೇಕಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದನ್ನು ಮಾನಕೀಕರಿಸಲು ಕೆಲವು ಗಣಿತ ಮಾಡಿ. + +1. ಹೊಸ `new_pumpkins` ಡೇಟಾಫ್ರೇಮ್ ರಚನೆಯ ನಂತರ ಈ ಸಾಲುಗಳನ್ನು ಸೇರಿಸಿ: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) ಪ್ರಕಾರ, ಬಸ್ಸೆಲ್ ತೂಕವು ಉತ್ಪನ್ನದ ಪ್ರಕಾರ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ಪ್ರಮಾಣದ ಅಳತೆ. "ಉದಾಹರಣೆಗೆ, ಟೊಮೇಟೋಗಳ ಒಂದು ಬಸ್ಸೆಲ್ 56 ಪೌಂಡ್ ತೂಕವಾಗಿರಬೇಕು... ಎಲೆಗಳು ಮತ್ತು ಹಸಿರುಗಳು ಕಡಿಮೆ ತೂಕದೊಂದಿಗೆ ಹೆಚ್ಚು ಜಾಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತವೆ, ಆದ್ದರಿಂದ ಸ್ಪಿನಾಚ್‌ನ ಒಂದು ಬಸ್ಸೆಲ್ ಕೇವಲ 20 ಪೌಂಡ್." ಇದು ಬಹಳ ಸಂಕೀರ್ಣವಾಗಿದೆ! ಬಸ್ಸೆಲ್-ನಿಂದ-ಪೌಂಡ್ ಪರಿವರ್ತನೆ ಮಾಡಲು ಪ್ರಯತ್ನಿಸದೆ, ಬಸ್ಸೆಲ್ ಪ್ರಕಾರ ಬೆಲೆಯನ್ನು ನಿರ್ಧರಿಸೋಣ. ಈ ಪಂಪ್ಕಿನ್ ಬಸ್ಸೆಲ್ ಅಧ್ಯಯನವು ನಿಮ್ಮ ಡೇಟಾದ ಸ್ವಭಾವವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಎಷ್ಟು ಮುಖ್ಯವೋ ತೋರಿಸುತ್ತದೆ! + +ಈಗ, ನೀವು ಬಸ್ಸೆಲ್ ಅಳತೆಯ ಆಧಾರದ ಮೇಲೆ ಪ್ರತಿ ಘಟಕದ ಬೆಲೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಬಹುದು. ನೀವು ಡೇಟಾವನ್ನು ಮತ್ತೊಮ್ಮೆ ಮುದ್ರಿಸಿದರೆ, ಅದು ಹೇಗೆ ಮಾನಕೀಕೃತವಾಗಿದೆ ಎಂದು ಕಾಣಬಹುದು. + +✅ ನೀವು ಗಮನಿಸಿದ್ದೀರಾ, ಅರ್ಧ ಬಸ್ಸೆಲ್ ಮೂಲಕ ಮಾರಾಟವಾಗುವ ಪಂಪ್ಕಿನ್‌ಗಳು ಬಹಳ ದುಬಾರಿ? ನೀವು ಏಕೆ ಎಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದೇ? ಸೂಚನೆ: ಸಣ್ಣ ಪಂಪ್ಕಿನ್‌ಗಳು ದೊಡ್ಡದಿಗಿಂತ ಬಹಳ ಹೆಚ್ಚು ಬೆಲೆಯಿವೆ, ಬಹುಶಃ ಒಂದು ದೊಡ್ಡ ಹೊಳೆಯುವ ಪೈ ಪಂಪ್ಕಿನ್ ತೆಗೆದುಕೊಳ್ಳುವ ಅನವಶ್ಯಕ ಜಾಗದಿಂದಾಗಿ ಪ್ರತಿ ಬಸ್ಸೆಲ್‌ನಲ್ಲಿ ಅವುಗಳ ಸಂಖ್ಯೆ ಹೆಚ್ಚು ಇರುವ ಕಾರಣ. + +## ದೃಶ್ಯೀಕರಣ ತಂತ್ರಗಳು + +ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಪಾತ್ರದ ಒಂದು ಭಾಗವೆಂದರೆ ಅವರು ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ಡೇಟಾದ ಗುಣಮಟ್ಟ ಮತ್ತು ಸ್ವಭಾವವನ್ನು ಪ್ರದರ್ಶಿಸುವುದು. ಇದಕ್ಕಾಗಿ, ಅವರು ವಿವಿಧ ಅಂಶಗಳನ್ನು ತೋರಿಸುವ ಆಸಕ್ತಿದಾಯಕ ದೃಶ್ಯೀಕರಣಗಳು, ಪ್ಲಾಟ್‌ಗಳು, ಗ್ರಾಫ್‌ಗಳು ಮತ್ತು ಚಾರ್ಟ್‌ಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತಾರೆ. ಈ ರೀತಿಯಲ್ಲಿ, ಅವರು ದೃಶ್ಯವಾಗಿ ಸಂಬಂಧಗಳು ಮತ್ತು ಗ್ಯಾಪ್‌ಗಳನ್ನು ತೋರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ಅವುಗಳನ್ನು ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕಂಡುಹಿಡಿಯುವುದು ಕಷ್ಟ. + +[![ML for beginners - How to Visualize Data with Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML for beginners - How to Visualize Data with Matplotlib") + +> 🎥 ಈ ಪಾಠಕ್ಕಾಗಿ ಡೇಟಾ ದೃಶ್ಯೀಕರಣವನ್ನು ತೋರಿಸುವ ಚಿಕ್ಕ ವೀಡಿಯೋಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ದೃಶ್ಯೀಕರಣಗಳು ಡೇಟಾದಿಗೆ ಅತ್ಯಂತ ಸೂಕ್ತ ಯಂತ್ರ ಅಧ್ಯಯನ ತಂತ್ರವನ್ನು ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು. ಉದಾಹರಣೆಗೆ, ಒಂದು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಒಂದು ರೇಖೆಯನ್ನು ಅನುಸರಿಸುವಂತೆ ತೋರುತ್ತದೆ ಎಂದರೆ, ಡೇಟಾ ಲೀನಿಯರ್ ರೆಗ್ರೆಶನ್ ಅಭ್ಯಾಸಕ್ಕೆ ಉತ್ತಮ ಅಭ್ಯರ್ಥಿ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. + +Jupyter ನೋಟ್ಬುಕ್‌ಗಳಲ್ಲಿ ಚೆನ್ನಾಗಿ ಕೆಲಸ ಮಾಡುವ ಒಂದು ಡೇಟಾ ದೃಶ್ಯೀಕರಣ ಲೈಬ್ರರಿ [Matplotlib](https://matplotlib.org/) ಆಗಿದೆ (ನೀವು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿಯೂ ಇದನ್ನು ನೋಡಿದ್ದೀರಿ). + +> [ಈ ಟ್ಯುಟೋರಿಯಲ್‌ಗಳಲ್ಲಿ](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) ಡೇಟಾ ದೃಶ್ಯೀಕರಣದ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಅನುಭವ ಪಡೆಯಿರಿ. + +## ಅಭ್ಯಾಸ - Matplotlib ಜೊತೆ ಪ್ರಯೋಗ ಮಾಡಿ + +ನೀವು ಈಗ ರಚಿಸಿದ ಹೊಸ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಲು ಕೆಲವು ಮೂಲ ಪ್ಲಾಟ್‌ಗಳನ್ನು ರಚಿಸಲು ಪ್ರಯತ್ನಿಸಿ. ಮೂಲ ರೇಖಾ ಪ್ಲಾಟ್ ಏನು ತೋರಿಸುತ್ತದೆ? + +1. ಫೈಲ್‌ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ, Pandas ಆಮದುಮಾಡಿದ ನಂತರ Matplotlib ಅನ್ನು ಆಮದುಮಾಡಿ: + + ```python + import matplotlib.pyplot as plt + ``` + +1. ಸಂಪೂರ್ಣ ನೋಟ್ಬುಕ್ ಅನ್ನು ಮರುನಡೆಸಿ. +1. ನೋಟ್ಬುಕ್‌ನ ಕೆಳಭಾಗದಲ್ಲಿ, ಡೇಟಾವನ್ನು ಬಾಕ್ಸ್ ಆಗಿ ಪ್ಲಾಟ್ ಮಾಡಲು ಒಂದು ಸೆಲ್ ಸೇರಿಸಿ: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![ಬೆಲೆ ಮತ್ತು ತಿಂಗಳ ಸಂಬಂಧವನ್ನು ತೋರಿಸುವ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.kn.png) + + ಇದು ಉಪಯುಕ್ತವಾದ ಪ್ಲಾಟ್ ಆಗಿದೆಯೇ? ಇದರಲ್ಲಿ ಏನಾದರೂ ನಿಮಗೆ ಆಶ್ಚರ್ಯಕರವೇ? + + ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಲ್ಲ, ಏಕೆಂದರೆ ಇದು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನಿಗದಿತ ತಿಂಗಳಲ್ಲಿ ಬಿಂದುಗಳ ವಿಸ್ತಾರವಾಗಿ ಮಾತ್ರ ಪ್ರದರ್ಶಿಸುತ್ತದೆ. + +### ಅದನ್ನು ಉಪಯುಕ್ತವಾಗಿಸೋಣ + +ಉಪಯುಕ್ತ ಡೇಟಾ ಪ್ರದರ್ಶನಕ್ಕಾಗಿ, ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಡೇಟಾವನ್ನು ಗುಂಪುಮಾಡಬೇಕಾಗುತ್ತದೆ. ತಿಂಗಳುಗಳನ್ನು y ಅಕ್ಷದಲ್ಲಿ ತೋರಿಸುವ ಮತ್ತು ಡೇಟಾ ವಿತರಣೆ ತೋರಿಸುವ ಪ್ಲಾಟ್ ರಚಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ. + +1. ಗುಂಪುಮಾಡಲಾದ ಬಾರ್ ಚಾರ್ಟ್ ರಚಿಸಲು ಒಂದು ಸೆಲ್ ಸೇರಿಸಿ: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![ಬೆಲೆ ಮತ್ತು ತಿಂಗಳ ಸಂಬಂಧವನ್ನು ತೋರಿಸುವ ಬಾರ್ ಚಾರ್ಟ್](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.kn.png) + + ಇದು ಹೆಚ್ಚು ಉಪಯುಕ್ತ ಡೇಟಾ ದೃಶ್ಯೀಕರಣ! ಇದು ಪಂಪ್ಕಿನ್‌ಗಳ ಅತ್ಯಧಿಕ ಬೆಲೆ ಸೆಪ್ಟೆಂಬರ್ ಮತ್ತು ಅಕ್ಟೋಬರ್ ತಿಂಗಳಲ್ಲಿ ಸಂಭವಿಸುತ್ತದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. ಇದು ನಿಮ್ಮ ನಿರೀಕ್ಷೆಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆಯೇ? ಏಕೆ ಅಥವಾ ಏಕೆ ಅಲ್ಲ? + +--- + +## 🚀ಸವಾಲು + +Matplotlib ನೀಡುವ ವಿವಿಧ ದೃಶ್ಯೀಕರಣ ಪ್ರಕಾರಗಳನ್ನು ಅನ್ವೇಷಿಸಿ. ರೆಗ್ರೆಶನ್ ಸಮಸ್ಯೆಗಳಿಗೆ ಯಾವ ಪ್ರಕಾರಗಳು ಅತ್ಯಂತ ಸೂಕ್ತ? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವ ಅನೇಕ ವಿಧಾನಗಳನ್ನು ನೋಡಿ. ಲಭ್ಯವಿರುವ ವಿವಿಧ ಲೈಬ್ರರಿಗಳ ಪಟ್ಟಿ ಮಾಡಿ ಮತ್ತು ಯಾವವು ಯಾವ ಕಾರ್ಯಗಳಿಗೆ ಉತ್ತಮ ಎಂದು ಗಮನಿಸಿ, ಉದಾಹರಣೆಗೆ 2D ದೃಶ್ಯೀಕರಣಗಳು ಮತ್ತು 3D ದೃಶ್ಯೀಕರಣಗಳು. ನೀವು ಏನು ಕಂಡುಹಿಡಿದಿರಿ? + +## ನಿಯೋಜನೆ + +[ದೃಶ್ಯೀಕರಣ ಅನ್ವೇಷಣೆ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/2-Data/assignment.md b/translations/kn/2-Regression/2-Data/assignment.md new file mode 100644 index 000000000..25ea630b1 --- /dev/null +++ b/translations/kn/2-Regression/2-Data/assignment.md @@ -0,0 +1,25 @@ + +# ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಅನ್ವೇಷಿಸುವುದು + +ಡೇಟಾ ದೃಶ್ಯೀಕರಣಕ್ಕಾಗಿ ಲಭ್ಯವಿರುವ ಹಲವು ವಿಭಿನ್ನ ಗ್ರಂಥಾಲಯಗಳಿವೆ. ಈ ಪಾಠದಲ್ಲಿ ಪಂಪ್ಕಿನ್ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು matplotlib ಮತ್ತು seaborn ಬಳಸಿ ಕೆಲವು ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಸೃಷ್ಟಿಸಿ ಒಂದು ಮಾದರಿ ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ. ಯಾವ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಬಳಸುವುದು ಸುಲಭವಾಗಿದೆ? + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡ | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | --------- | -------- | ----------------- | +| | ಎರಡು ಅನ್ವೇಷಣೆಗಳು/ದೃಶ್ಯೀಕರಣಗಳೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಸಲ್ಲಿಸಲಾಗಿದೆ | ಒಂದು ಅನ್ವೇಷಣೆ/ದೃಶ್ಯೀಕರಣದೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಸಲ್ಲಿಸಲಾಗಿದೆ | ನೋಟ್ಬುಕ್ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/2-Data/notebook.ipynb b/translations/kn/2-Regression/2-Data/notebook.ipynb new file mode 100644 index 000000000..84fdd36a0 --- /dev/null +++ b/translations/kn/2-Regression/2-Data/notebook.ipynb @@ -0,0 +1,46 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3-final" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3", + "language": "python" + }, + "coopTranslator": { + "original_hash": "1b2ab303ac6c604a34c6ca7a49077fc7", + "translation_date": "2025-12-19T16:18:17+00:00", + "source_file": "2-Regression/2-Data/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕಾರ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/2-Regression/2-Data/solution/Julia/README.md b/translations/kn/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 000000000..dde7f3625 --- /dev/null +++ b/translations/kn/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/2-Data/solution/R/lesson_2-R.ipynb b/translations/kn/2-Regression/2-Data/solution/R/lesson_2-R.ipynb new file mode 100644 index 000000000..a1449382f --- /dev/null +++ b/translations/kn/2-Regression/2-Data/solution/R/lesson_2-R.ipynb @@ -0,0 +1,673 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_2-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "f3c335f9940cfd76528b3ef918b9b342", + "translation_date": "2025-12-19T16:36:33+00:00", + "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: ಡೇಟಾವನ್ನು ಸಿದ್ಧಪಡಿಸಿ ಮತ್ತು ದೃಶ್ಯೀಕರಿಸಿ\n", + "\n", + "## **ಕುಂಬಳಕಾಯಿ ಗಾಗಿ ರೇಖೀಯ ರಿಗ್ರೆಶನ್ - ಪಾಠ 2**\n", + "#### ಪರಿಚಯ\n", + "\n", + "ನೀವು ಈಗ Tidymodels ಮತ್ತು Tidyverse ಬಳಸಿ ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿ ನಿರ್ಮಾಣವನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅಗತ್ಯವಿರುವ ಸಾಧನಗಳೊಂದಿಗೆ ಸಜ್ಜಾಗಿದ್ದೀರಿ, ನೀವು ನಿಮ್ಮ ಡೇಟಾದ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. ನೀವು ಡೇಟಾ ಜೊತೆ ಕೆಲಸಮಾಡಿ ML ಪರಿಹಾರಗಳನ್ನು ಅನ್ವಯಿಸುವಾಗ, ನಿಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸಾಧ್ಯತೆಗಳನ್ನು ಸರಿಯಾಗಿ ಅನ್ಲಾಕ್ ಮಾಡಲು ಸರಿಯಾದ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುವುದು ಬಹಳ ಮುಖ್ಯ.\n", + "\n", + "ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಕಲಿಯುವಿರಿ:\n", + "\n", + "- ನಿಮ್ಮ ಮಾದರಿ ನಿರ್ಮಾಣಕ್ಕಾಗಿ ಡೇಟಾವನ್ನು ಹೇಗೆ ಸಿದ್ಧಪಡಿಸುವುದು.\n", + "\n", + "- ಡೇಟಾ ದೃಶ್ಯೀಕರಣಕ್ಕಾಗಿ `ggplot2` ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು.\n", + "\n", + "ನೀವು ಉತ್ತರಿಸಬೇಕಾದ ಪ್ರಶ್ನೆ ಯಾವ ರೀತಿಯ ML ಆಲ್ಗಾರಿದಮ್ಗಳನ್ನು ನೀವು ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಮತ್ತು ನೀವು ಪಡೆಯುವ ಉತ್ತರದ ಗುಣಮಟ್ಟವು ನಿಮ್ಮ ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಬಹಳ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ.\n", + "\n", + "ಪ್ರಾಯೋಗಿಕ ವ್ಯಾಯಾಮದ ಮೂಲಕ ಇದನ್ನು ನೋಡೋಣ.\n", + "\n", + "\n", + "

\n", + " \n", + "

ಕಲಾಕೃತಿ @allison_horst ಅವರಿಂದ
\n" + ], + "metadata": { + "id": "Pg5aexcOPqAZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 1. ಕಂಬಳಿಯ ಡೇಟಾವನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಟಿಡಿವರ್ಸ್ ಅನ್ನು ಕರೆಸಿಕೊಳ್ಳುವುದು\n", + "\n", + "ನಾವು ಈ ಪಾಠವನ್ನು ಕತ್ತರಿಸಲು ಮತ್ತು ವಿಶ್ಲೇಷಿಸಲು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅಗತ್ಯವಿದೆ:\n", + "\n", + "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಹೆಚ್ಚು ಮನರಂಜನೀಯವಾಗಿ ಮಾಡುತ್ತದೆ!\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n", + "\n", + "`install.packages(c(\"tidyverse\"))`\n", + "\n", + "ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜುಗಳಿದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ಕೆಲವು ಇಲ್ಲದಿದ್ದರೆ ಅವುಗಳನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ], + "metadata": { + "id": "dc5WhyVdXAjR" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", + "pacman::p_load(tidyverse)" + ], + "outputs": [], + "metadata": { + "id": "GqPYUZgfXOBt" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ, ಕೆಲವು ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಈ ಪಾಠಕ್ಕಾಗಿ ನೀಡಲಾದ [ಡೇಟಾ](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ಅನ್ನು ಲೋಡ್ ಮಾಡೋಣ!\n" + ], + "metadata": { + "id": "kvjDTPDSXRr2" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the core Tidyverse packages\n", + "library(tidyverse)\n", + "\n", + "# Import the pumpkins data\n", + "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n", + "\n", + "\n", + "# Get a glimpse and dimensions of the data\n", + "glimpse(pumpkins)\n", + "\n", + "\n", + "# Print the first 50 rows of the data set\n", + "pumpkins %>% \n", + " slice_head(n =50)" + ], + "outputs": [], + "metadata": { + "id": "VMri-t2zXqgD" + } + }, + { + "cell_type": "markdown", + "source": [ + "ತಕ್ಷಣದ `glimpse()` ತೋರಿಸುತ್ತದೆ ಎಂದು ಖಾಲಿ ಸ್ಥಳಗಳಿವೆ ಮತ್ತು ಸ್ಟ್ರಿಂಗ್‌ಗಳು (`chr`) ಮತ್ತು ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ (`dbl`) ಮಿಶ್ರಣವಿದೆ. `Date` ಪ್ರಕಾರವು ಕ್ಯಾರಕ್ಟರ್ ಆಗಿದ್ದು, `Package` ಎಂಬ ವಿಚಿತ್ರ ಕಾಲಮ್ ಕೂಡ ಇದೆ, ಅಲ್ಲಿ ಡೇಟಾ `sacks`, `bins` ಮತ್ತು ಇತರ ಮೌಲ್ಯಗಳ ಮಿಶ್ರಣವಾಗಿದೆ. ವಾಸ್ತವದಲ್ಲಿ, ಡೇಟಾ ಸ್ವಲ್ಪ ಗೊಂದಲವಾಗಿದೆ 😤.\n", + "\n", + "ವಾಸ್ತವದಲ್ಲಿ, ಬಾಕ್ಸ್‌ನಿಂದಲೇ ML ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಸಿದ್ಧವಾಗಿರುವ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಪಡೆಯುವುದು ಸಾಮಾನ್ಯವಲ್ಲ. ಆದರೆ ಚಿಂತೆ ಮಾಡಬೇಡಿ, ಈ ಪಾಠದಲ್ಲಿ ನೀವು ಸ್ಟ್ಯಾಂಡರ್ಡ್ R ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿ ಕಚ್ಚಾ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಹೇಗೆ ಸಿದ್ಧಪಡಿಸಬೇಕೆಂದು ಕಲಿಯುತ್ತೀರಿ 🧑‍🔧. ನೀವು ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ವಿವಿಧ ತಂತ್ರಗಳನ್ನು ಸಹ ಕಲಿಯುತ್ತೀರಿ.📈📊\n", + "
\n", + "\n", + "> ಪುನಃಸ್ಮರಣೆ: ಪೈಪ್ ಆಪರೇಟರ್ (`%>%`) ಲಾಜಿಕಲ್ ಕ್ರಮದಲ್ಲಿ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ, ಒಂದು ವಸ್ತುವನ್ನು ಮುಂದಕ್ಕೆ ಫಂಕ್ಷನ್ ಅಥವಾ ಕರೆ ಅಭಿವ್ಯಕ್ತಿಗೆ ಹಂಚಿಕೊಡುತ್ತದೆ. ನಿಮ್ಮ ಕೋಡ್‌ನಲ್ಲಿ ಪೈಪ್ ಆಪರೇಟರ್ ಅನ್ನು \"ಮತ್ತು ನಂತರ\" ಎಂದು ಹೇಳುವುದಾಗಿ ಭಾವಿಸಬಹುದು.\n" + ], + "metadata": { + "id": "REWcIv9yX29v" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 2. ಕಾಣೆಯಾದ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಿ\n", + "\n", + "ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳು ಎದುರಿಸಬೇಕಾದ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ ಅಪೂರ್ಣ ಅಥವಾ ಕಾಣೆಯಾದ ಡೇಟಾ. R ಕಾಣೆಯಾದ ಅಥವಾ ಅಜ್ಞಾತ ಮೌಲ್ಯಗಳನ್ನು ವಿಶೇಷ ಸೆಂಟಿನೆಲ್ ಮೌಲ್ಯದಿಂದ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ: `NA` (ಲಭ್ಯವಿಲ್ಲ).\n", + "\n", + "ಆದ್ದರಿಂದ ಡೇಟಾ ಫ್ರೇಮ್‌ನಲ್ಲಿ ಕಾಣೆಯಾದ ಮೌಲ್ಯಗಳಿವೆ ಎಂದು ನಾವು ಹೇಗೆ ತಿಳಿಯಬಹುದು?\n", + "
\n", + "- ಒಂದು ಸರಳ ವಿಧಾನವೆಂದರೆ ಮೂಲ R ಫಂಕ್ಷನ್ `anyNA` ಅನ್ನು ಬಳಸುವುದು, ಇದು ತಾರ್ಕಿಕ ವಸ್ತುಗಳು `TRUE` ಅಥವಾ `FALSE` ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "Zxfb3AM5YbUe" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "pumpkins %>% \n", + " anyNA()" + ], + "outputs": [], + "metadata": { + "id": "G--DQutAYltj" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಚೆನ್ನಾಗಿದೆ, ಕೆಲವು ಡೇಟಾ ಕಾಣೆಯಾಗಿರುವಂತೆ ತೋರುತ್ತದೆ! ಅದು ಪ್ರಾರಂಭಿಸಲು ಒಳ್ಳೆಯ ಸ್ಥಳವಾಗಿದೆ.\n", + "\n", + "- ಮತ್ತೊಂದು ವಿಧಾನವೆಂದರೆ `is.na()` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸುವುದು, ಇದು ಯಾವ ವೈಯಕ್ತಿಕ ಕಾಲಮ್ ಅಂಶಗಳು ಕಾಣೆಯಾಗಿವೆ ಎಂದು ಲಾಜಿಕಲ್ `TRUE` ಮೂಲಕ ಸೂಚಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "mU-7-SB6YokF" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "pumpkins %>% \n", + " is.na() %>% \n", + " head(n = 7)" + ], + "outputs": [], + "metadata": { + "id": "W-DxDOR4YxSW" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಸರಿ, ಕೆಲಸ ಮುಗಿಸಿದೆ ಆದರೆ ಇಂತಹ ದೊಡ್ಡ ಡೇಟಾ ಫ್ರೇಮ್‌ನೊಂದಿಗೆ, ಎಲ್ಲಾ ಸಾಲುಗಳು ಮತ್ತು ಕಾಲಮ್‌ಗಳನ್ನು ವೈಯಕ್ತಿಕವಾಗಿ ಪರಿಶೀಲಿಸುವುದು ಅಸಾಧ್ಯ ಮತ್ತು ಅಪ್ರಾಯೋಗಿಕವಾಗಿರುತ್ತದೆ😴.\n", + "\n", + "- ಇನ್ನೊಂದು ಹೆಚ್ಚು ಅರ್ಥಪೂರ್ಣ ವಿಧಾನವೆಂದರೆ ಪ್ರತಿ ಕಾಲಮ್‌ಗೆ ಕಾಣೆಯಾದ ಮೌಲ್ಯಗಳ ಮೊತ್ತವನ್ನು ಲೆಕ್ಕಹಾಕುವುದು:\n" + ], + "metadata": { + "id": "xUWxipKYY0o7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "pumpkins %>% \n", + " is.na() %>% \n", + " colSums()" + ], + "outputs": [], + "metadata": { + "id": "ZRBWV6P9ZArL" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಇನ್ನಷ್ಟು ಉತ್ತಮವಾಗಿದೆ! ಕೆಲವು ಡೇಟಾ ಕಾಣೆಯಾಗಿವೆ, ಆದರೆ ಬಹುಶಃ ಅದು ಈ ಕಾರ್ಯಕ್ಕೆ ಪ್ರಭಾವ ಬೀರುವುದಿಲ್ಲ. ಮುಂದಿನ ವಿಶ್ಲೇಷಣೆ ಏನು ತರುತ್ತದೆ ನೋಡೋಣ.\n", + "\n", + "> ಅದ್ಭುತ ಪ್ಯಾಕೇಜುಗಳು ಮತ್ತು ಫಂಕ್ಷನ್‌ಗಳ ಜೊತೆಗೆ, R ಗೆ ಅತ್ಯುತ್ತಮ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಇದೆ. ಉದಾಹರಣೆಗೆ, ಫಂಕ್ಷನ್ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ `help(colSums)` ಅಥವಾ `?colSums` ಅನ್ನು ಬಳಸಿ.\n" + ], + "metadata": { + "id": "9gv-crB6ZD1Y" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 3. Dplyr: ಡೇಟಾ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್‌ನ ವ್ಯಾಕರಣ\n", + "\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "o4jLY5-VZO2C" + } + }, + { + "cell_type": "markdown", + "source": [ + "[`dplyr`](https://dplyr.tidyverse.org/), ಟಿಡಿವರ್ಸ್‌ನ ಒಂದು ಪ್ಯಾಕೇಜ್, ಡೇಟಾ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್‌ನ ವ್ಯಾಕರಣವಾಗಿದೆ ಇದು ನಿಮಗೆ ಸಾಮಾನ್ಯ ಡೇಟಾ ಮ್ಯಾನಿಪ್ಯುಲೇಶನ್ ಸವಾಲುಗಳನ್ನು ಪರಿಹರಿಸಲು ಸಹಾಯ ಮಾಡುವ ಸತತ ಕ್ರಿಯಾಪದಗಳ ಸಮೂಹವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ವಿಭಾಗದಲ್ಲಿ, ನಾವು dplyr ನ ಕೆಲವು ಕ್ರಿಯಾಪದಗಳನ್ನು ಅನ್ವೇಷಿಸುವೆವು! \n", + "
\n" + ], + "metadata": { + "id": "i5o33MQBZWWw" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::select()\n", + "\n", + "`select()` ಎಂಬುದು `dplyr` ಪ್ಯಾಕೇಜ್‌ನ ಒಂದು ಫಂಕ್ಷನ್ ಆಗಿದ್ದು, ಇದು ನೀವು ಉಳಿಸಿಕೊಳ್ಳಬೇಕಾದ ಅಥವಾ ಹೊರತುಪಡಿಸಬೇಕಾದ ಕಾಲಮ್‌ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "ನಿಮ್ಮ ಡೇಟಾ ಫ್ರೇಮ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಕೆಲಸ ಮಾಡಲು, ಅದರ ಕೆಲವು ಕಾಲಮ್‌ಗಳನ್ನು `select()` ಬಳಸಿ ಬಿಟ್ಟಿಹಾಕಿ, ನೀವು ಬೇಕಾದ ಕಾಲಮ್‌ಗಳನ್ನು ಮಾತ್ರ ಉಳಿಸಿ.\n", + "\n", + "ಉದಾಹರಣೆಗೆ, ಈ ವ್ಯಾಯಾಮದಲ್ಲಿ, ನಮ್ಮ ವಿಶ್ಲೇಷಣೆ `Package`, `Low Price`, `High Price` ಮತ್ತು `Date` ಕಾಲಮ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಈ ಕಾಲಮ್‌ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡೋಣ.\n" + ], + "metadata": { + "id": "x3VGMAGBZiUr" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Select desired columns\n", + "pumpkins <- pumpkins %>% \n", + " select(Package, `Low Price`, `High Price`, Date)\n", + "\n", + "\n", + "# Print data set\n", + "pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "F_FgxQnVZnM0" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::mutate()\n", + "\n", + "`mutate()` ಎಂಬುದು `dplyr` ಪ್ಯಾಕೇಜಿನ ಒಂದು ಫಂಕ್ಷನ್ ಆಗಿದ್ದು, ಇದರಿಂದ ನೀವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕಾಲಮ್‌ಗಳನ್ನು ಉಳಿಸಿಕೊಂಡು ಹೊಸ ಕಾಲಮ್‌ಗಳನ್ನು ರಚಿಸಬಹುದು ಅಥವಾ ಬದಲಾಯಿಸಬಹುದು.\n", + "\n", + "mutate ನ ಸಾಮಾನ್ಯ ರಚನೆ ಹೀಗಿದೆ:\n", + "\n", + "`data %>% mutate(new_column_name = what_it_contains)`\n", + "\n", + "`Date` ಕಾಲಮ್ ಬಳಸಿ ಕೆಳಗಿನ ಕಾರ್ಯಗಳನ್ನು ಮಾಡಿ `mutate` ಅನ್ನು ಪ್ರಯೋಗಿಸೋಣ:\n", + "\n", + "1. ದಿನಾಂಕಗಳನ್ನು (ಈಗಾಗಲೇ character ಪ್ರಕಾರದಲ್ಲಿರುವ) ತಿಂಗಳ ಫಾರ್ಮ್ಯಾಟ್‌ಗೆ ಪರಿವರ್ತಿಸಿ (ಇವು US ದಿನಾಂಕಗಳು, ಆದ್ದರಿಂದ ಫಾರ್ಮ್ಯಾಟ್ `MM/DD/YYYY` ಆಗಿದೆ).\n", + "\n", + "2. ದಿನಾಂಕಗಳಿಂದ ತಿಂಗಳನ್ನೊಂದು ಹೊಸ ಕಾಲಮ್‌ಗೆ ತೆಗೆದುಹಾಕಿ.\n", + "\n", + "R ನಲ್ಲಿ, [lubridate](https://lubridate.tidyverse.org/) ಪ್ಯಾಕೇಜ್ Date-time ಡೇಟಾ ಜೊತೆ ಕೆಲಸ ಮಾಡಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` ಗಳನ್ನು ಬಳಸಿ ಮೇಲಿನ ಗುರಿಗಳನ್ನು ಹೇಗೆ ಸಾಧಿಸಬಹುದು ನೋಡೋಣ. ಮುಂದಿನ ಕಾರ್ಯಗಳಲ್ಲಿ Date ಕಾಲಮ್ ಬೇಕಾಗುವುದಿಲ್ಲದರಿಂದ ಅದನ್ನು ತೆಗೆದುಹಾಕಬಹುದು.\n" + ], + "metadata": { + "id": "2KKo0Ed9Z1VB" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load lubridate\n", + "library(lubridate)\n", + "\n", + "pumpkins <- pumpkins %>% \n", + " # Convert the Date column to a date object\n", + " mutate(Date = mdy(Date)) %>% \n", + " # Extract month from Date\n", + " mutate(Month = month(Date)) %>% \n", + " # Drop Date column\n", + " select(-Date)\n", + "\n", + "# View the first few rows\n", + "pumpkins %>% \n", + " slice_head(n = 7)" + ], + "outputs": [], + "metadata": { + "id": "5joszIVSZ6xe" + } + }, + { + "cell_type": "markdown", + "source": [ + "ವಾಹ್! 🤩\n", + "\n", + "ಮುಂದೆ, ನಾವು ಹೊಸ ಕಾಲಮ್ `Price` ಅನ್ನು ರಚಿಸೋಣ, ಇದು ಒಂದು ಕಂಬಳದ ಸರಾಸರಿ ಬೆಲೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಈಗ, ಹೊಸ Price ಕಾಲಮ್ ಅನ್ನು ತುಂಬಲು `Low Price` ಮತ್ತು `High Price` ಕಾಲಮ್‌ಗಳ ಸರಾಸರಿ ತೆಗೆದುಕೊಳ್ಳೋಣ.\n", + "
\n" + ], + "metadata": { + "id": "nIgLjNMCZ-6Y" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Create a new column Price\n", + "pumpkins <- pumpkins %>% \n", + " mutate(Price = (`Low Price` + `High Price`)/2)\n", + "\n", + "# View the first few rows of the data\n", + "pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "Zo0BsqqtaJw2" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಹೌದು!💪\n", + "\n", + "\"ಆದರೆ ಕಾಯಿರಿ!\", ನೀವು `View(pumpkins)` ಮೂಲಕ ಸಂಪೂರ್ಣ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ತ್ವರಿತವಾಗಿ ನೋಡಿದ ನಂತರ ಹೇಳುತ್ತೀರಿ, \"ಇಲ್ಲಿ ಏನೋ ವಿಚಿತ್ರವಿದೆ!\"🤔\n", + "\n", + "ನೀವು `Package` ಕಾಲಮ್ ಅನ್ನು ನೋಡಿದರೆ, ಕಂಬಳಿಗಳು ವಿವಿಧ ವಿನ್ಯಾಸಗಳಲ್ಲಿ ಮಾರಾಟವಾಗುತ್ತಿವೆ. ಕೆಲವು `1 1/9 ಬಷೆಲ್` ಅಳತೆಯಲ್ಲಿ ಮಾರಾಟವಾಗುತ್ತವೆ, ಕೆಲವು `1/2 ಬಷೆಲ್` ಅಳತೆಯಲ್ಲಿ, ಕೆಲವು ಪ್ರತಿ ಕಂಬಳಿಗೆ, ಕೆಲವು ಪ್ರತಿ ಪೌಂಡ್‌ಗೆ, ಮತ್ತು ಕೆಲವು ಬೃಹತ್ ಬಾಕ್ಸ್‌ಗಳಲ್ಲಿ ವಿವಿಧ ಅಗಲಗಳೊಂದಿಗೆ.\n", + "\n", + "ನಾವು ಇದನ್ನು ಪರಿಶೀಲಿಸೋಣ:\n" + ], + "metadata": { + "id": "p77WZr-9aQAR" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Verify the distinct observations in Package column\n", + "pumpkins %>% \n", + " distinct(Package)" + ], + "outputs": [], + "metadata": { + "id": "XISGfh0IaUy6" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಅದ್ಭುತ!👏\n", + "\n", + "ಕುಂಬಳಕಾಯಿ ತೂಕವನ್ನು ಸತತವಾಗಿ ಅಳೆಯುವುದು ಬಹಳ ಕಷ್ಟವಾಗುತ್ತದೆ ಎಂದು ತೋರುತ್ತದೆ, ಆದ್ದರಿಂದ `Package` ಕಾಲಮ್‌ನಲ್ಲಿ *bushel* ಎಂಬ ಸ್ಟ್ರಿಂಗ್ ಇರುವ ಕುಂಬಳಕಾಯಿಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆಮಾಡಿ ಫಿಲ್ಟರ್ ಮಾಡೋಣ ಮತ್ತು ಇದನ್ನು ಹೊಸ ಡೇಟಾ ಫ್ರೇಮ್ `new_pumpkins` ನಲ್ಲಿ ಇಡೋಣ.\n", + "
\n" + ], + "metadata": { + "id": "7sMjiVujaZxY" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::filter() ಮತ್ತು stringr::str_detect()\n", + "\n", + "[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): ನಿಮ್ಮ ಶರತ್ತುಗಳನ್ನು ಪೂರೈಸುವ **ಸಾಲುಗಳು** ಮಾತ್ರ ಒಳಗೊಂಡಿರುವ ಡೇಟಾದ ಉಪಸಮೂಹವನ್ನು ರಚಿಸುತ್ತದೆ, ಈ ಸಂದರ್ಭದಲ್ಲಿ, `Package` ಕಾಲಮ್‌ನಲ್ಲಿ *bushel* ಎಂಬ ಸ್ಟ್ರಿಂಗ್ ಇರುವ ಕಂಬಳಿಗಳು.\n", + "\n", + "[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): ಸ್ಟ್ರಿಂಗ್‌ನಲ್ಲಿ ಮಾದರಿಯಿರುವಿಕೆ ಅಥವಾ ಇಲ್ಲದಿರುವಿಕೆಯನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ.\n", + "\n", + "[`stringr`](https://github.com/tidyverse/stringr) ಪ್ಯಾಕೇಜ್ ಸಾಮಾನ್ಯ ಸ್ಟ್ರಿಂಗ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ ಸರಳ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "L8Qfcs92ageF" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Retain only pumpkins with \"bushel\"\n", + "new_pumpkins <- pumpkins %>% \n", + " filter(str_detect(Package, \"bushel\"))\n", + "\n", + "# Get the dimensions of the new data\n", + "dim(new_pumpkins)\n", + "\n", + "# View a few rows of the new data\n", + "new_pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "hy_SGYREampd" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನೀವು ನೋಡಬಹುದು ನಾವು ಬಸ್ಸೆಲ್ ಮೂಲಕ ಕಂಬಳಿಗಳನ್ನು ಹೊಂದಿರುವ ಸುಮಾರು 415 ಸಾಲುಗಳ ಡೇಟಾವನ್ನು ಸೀಮಿತಗೊಳಿಸಿದ್ದೇವೆ.🤩\n", + "
\n" + ], + "metadata": { + "id": "VrDwF031avlR" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::case_when()\n", + "\n", + "**ಆದರೆ ಕಾಯಿರಿ! ಇನ್ನೊಂದು ಕೆಲಸ ಮಾಡಬೇಕಿದೆ**\n", + "\n", + "ನೀವು ಗಮನಿಸಿದ್ದೀರಾ, ಬಷೆಲ್ ಪ್ರಮಾಣವು ಪ್ರತಿ ಸಾಲಿಗೆ ಬದಲಾಗುತ್ತದೆ? ನೀವು ಬೆಲೆಯನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಬೇಕಾಗಿದೆ, ಹೀಗಾಗಿ ನೀವು ಬೆಲೆಯನ್ನು ಪ್ರತಿ ಬಷೆಲ್‌ಗೆ ತೋರಿಸಬೇಕು, 1 1/9 ಅಥವಾ 1/2 ಬಷೆಲ್‌ಗೆ ಅಲ್ಲ. ಅದನ್ನು ಸಾಮಾನ್ಯೀಕರಿಸಲು ಕೆಲವು ಗಣಿತ ಮಾಡಬೇಕಾಗಿದೆ.\n", + "\n", + "ನಾವು ಕೆಲವು ಶರತ್ತುಗಳ ಆಧಾರದ ಮೇಲೆ ಬೆಲೆ ಕಾಲಮ್ ಅನ್ನು *ಮ್ಯೂಟೇಟ್* ಮಾಡಲು [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ. `case_when` ನಿಮಗೆ ಹಲವಾರು `if_else()` ಹೇಳಿಕೆಗಳನ್ನು ವೆಕ್ಟರೈಸ್ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "mLpw2jH4a0tx" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Convert the price if the Package contains fractional bushel values\n", + "new_pumpkins <- new_pumpkins %>% \n", + " mutate(Price = case_when(\n", + " str_detect(Package, \"1 1/9\") ~ Price/(1 + 1/9),\n", + " str_detect(Package, \"1/2\") ~ Price/(1/2),\n", + " TRUE ~ Price))\n", + "\n", + "# View the first few rows of the data\n", + "new_pumpkins %>% \n", + " slice_head(n = 30)" + ], + "outputs": [], + "metadata": { + "id": "P68kLVQmbM6I" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ, ನಾವು ಅವರ ಬಷೆಲ್ ಅಳತೆಯ ಆಧಾರದ ಮೇಲೆ ಪ್ರತಿ ಘಟಕದ ಬೆಲೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಬಹುದು. ಈ ಎಲ್ಲಾ ಕಂಬಳಕಾಯಿ ಬಷೆಲ್ ಅಧ್ಯಯನವು, ಆದಾಗ್ಯೂ, ನಿಮ್ಮ ಡೇಟಾದ ಸ್ವಭಾವವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಎಷ್ಟು `ಮುಖ್ಯ` ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ!\n", + "\n", + "> ✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) ಪ್ರಕಾರ, ಬಷೆಲ್‌ನ ತೂಕವು ಉತ್ಪನ್ನದ ಪ್ರಕಾರ ಅವಲಂಬಿತವಾಗಿದ್ದು, ಇದು ಪ್ರಮಾಣದ ಅಳತೆ. \"ಉದಾಹರಣೆಗೆ, ಟೊಮೇಟೋಗಳ ಒಂದು ಬಷೆಲ್ 56 ಪೌಂಡು ತೂಕವಾಗಿರಬೇಕು... ಎಲೆಗಳು ಮತ್ತು ಹಸಿರುಗಳು ಕಡಿಮೆ ತೂಕದೊಂದಿಗೆ ಹೆಚ್ಚು ಜಾಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತವೆ, ಆದ್ದರಿಂದ ಸ್ಪಿನಾಚ್‌ನ ಒಂದು ಬಷೆಲ್ ಕೇವಲ 20 ಪೌಂಡು ತೂಕದಿರುತ್ತದೆ.\" ಇದು ಎಲ್ಲವೂ ತುಂಬಾ ಸಂಕೀರ್ಣವಾಗಿದೆ! ಬಷೆಲ್-ನಿಂದ ಪೌಂಡಿಗೆ ಪರಿವರ್ತನೆ ಮಾಡುವುದನ್ನು ಬಿಟ್ಟು, ಬಷೆಲ್ ಪ್ರಕಾರ ಬೆಲೆಯನ್ನು ನಿಗದಿಪಡಿಸೋಣ. ಈ ಎಲ್ಲಾ ಕಂಬಳಕಾಯಿ ಬಷೆಲ್ ಅಧ್ಯಯನವು, ಆದಾಗ್ಯೂ, ನಿಮ್ಮ ಡೇಟಾದ ಸ್ವಭಾವವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಎಷ್ಟು ಮುಖ್ಯ ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ!\n", + ">\n", + "> ✅ ನೀವು ಗಮನಿಸಿದ್ದೀರಾ, ಅರ್ಧ ಬಷೆಲ್ ಪ್ರಕಾರ ಮಾರಾಟವಾಗುವ ಕಂಬಳಕಾಯಿಗಳು ತುಂಬಾ ದುಬಾರಿ? ನೀವು ಏಕೆ ಎಂದು ಕಂಡುಹಿಡಿಯಬಹುದೇ? ಸೂಚನೆ: ಸಣ್ಣ ಕಂಬಳಕಾಯಿಗಳು ದೊಡ್ಡದಿಗಿಂತ ಬಹಳ ಹೆಚ್ಚು ಬೆಲೆಯಿರುತ್ತವೆ, ಬಹುಶಃ ಏಕೆಂದರೆ ಒಂದು ದೊಡ್ಡ ಹೊಳೆಯುವ ಪೈ ಕಂಬಳಕಾಯಿಯಿಂದ ತೆಗೆದುಕೊಳ್ಳಲಾದ ಉಪಯೋಗಿಸದ ಜಾಗದ ಕಾರಣದಿಂದ, ಬಷೆಲ್ ಪ್ರತಿ ಹೆಚ್ಚು ಸಂಖ್ಯೆಯ ಸಣ್ಣ ಕಂಬಳಕಾಯಿಗಳು ಇರುತ್ತವೆ.\n", + "
\n" + ], + "metadata": { + "id": "pS2GNPagbSdb" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಇದೀಗ ಕೊನೆಗೆ, ಸಾಹಸಕ್ಕಾಗಿ 💁‍♀️, ನಾವು ತಿಂಗಳು ಕಾಲಮ್ ಅನ್ನು ಮೊದಲ ಸ್ಥಾನಕ್ಕೆ `Package` ಕಾಲಮ್ `ಮುಂಬರುವ` ಮಾಡೋಣ.\n", + "\n", + "ಕಾಲಮ್ ಸ್ಥಾನಗಳನ್ನು ಬದಲಾಯಿಸಲು `dplyr::relocate()` ಬಳಸಲಾಗುತ್ತದೆ.\n" + ], + "metadata": { + "id": "qql1SowfbdnP" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Create a new data frame new_pumpkins\n", + "new_pumpkins <- new_pumpkins %>% \n", + " relocate(Month, .before = Package)\n", + "\n", + "new_pumpkins %>% \n", + " slice_head(n = 7)" + ], + "outputs": [], + "metadata": { + "id": "JJ1x6kw8bixF" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಚೆನ್ನಾಗಿದೆ!👌 ಈಗ ನಿಮಗೆ ಹೊಸ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗುವ ಸ್ವಚ್ಛ, ಸುವ್ಯವಸ್ಥಿತ ಡೇಟಾಸೆಟ್ ಇದೆ! \n", + "
\n" + ], + "metadata": { + "id": "y8TJ0Za_bn5Y" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 4. ggplot2 ಬಳಸಿ ಡೇಟಾ ದೃಶ್ಯೀಕರಣ\n", + "\n", + "

\n", + " \n", + "

ಡಾಸನಿ ಮಡಿಪಳ್ಳಿ ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್
\n", + "\n", + "\n", + "\n", + "\n", + "ಇದೀಗ ಒಂದು *ಜ್ಞಾನವಂತ* ಮಾತು ಇದೆ:\n", + "\n", + "> \"ಸರಳ ಗ್ರಾಫ್ ಡೇಟಾ ವಿಶ್ಲೇಷಕನ ಮನಸ್ಸಿಗೆ ಯಾವುದೇ ಇತರೆ ಸಾಧನಕ್ಕಿಂತ ಹೆಚ್ಚು ಮಾಹಿತಿ ತಂದಿದೆ.\" --- ಜಾನ್ ಟುಕಿ\n", + "\n", + "ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಪಾತ್ರದ ಒಂದು ಭಾಗವೆಂದರೆ ಅವರು ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ಡೇಟಾದ ಗುಣಮಟ್ಟ ಮತ್ತು ಸ್ವಭಾವವನ್ನು ಪ್ರದರ್ಶಿಸುವುದು. ಇದಕ್ಕಾಗಿ, ಅವರು ಸಾಮಾನ್ಯವಾಗಿ ಆಸಕ್ತಿದಾಯಕ ದೃಶ್ಯೀಕರಣಗಳನ್ನು, ಅಥವಾ ಪ್ಲಾಟ್‌ಗಳು, ಗ್ರಾಫ್‌ಗಳು ಮತ್ತು ಚಾರ್ಟ್‌ಗಳನ್ನು ರಚಿಸುತ್ತಾರೆ, ಡೇಟಾದ ವಿಭಿನ್ನ ಅಂಶಗಳನ್ನು ತೋರಿಸುತ್ತಾರೆ. ಈ ರೀತಿಯಲ್ಲಿ, ಅವರು ದೃಶ್ಯವಾಗಿ ಸಂಬಂಧಗಳು ಮತ್ತು ಗ್ಯಾಪ್‌ಗಳನ್ನು ತೋರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ಅವುಗಳನ್ನು ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕಂಡುಹಿಡಿಯುವುದು ಕಷ್ಟ.\n", + "\n", + "ದೃಶ್ಯೀಕರಣಗಳು ಡೇಟಾಗೆ ಅತ್ಯಂತ ಸೂಕ್ತವಾದ ಯಂತ್ರ ಅಧ್ಯಯನ ತಂತ್ರವನ್ನು ನಿರ್ಧರಿಸಲು ಸಹ ಸಹಾಯ ಮಾಡಬಹುದು. ಉದಾಹರಣೆಗೆ, ಒಂದು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಒಂದು ರೇಖೆಯನ್ನು ಅನುಸರಿಸುತ್ತಿರುವಂತೆ ಕಾಣಿಸಿದರೆ, ಅದು ಡೇಟಾ ಲೀನಿಯರ್ ರಿಗ್ರೆಷನ್ ಅಭ್ಯಾಸಕ್ಕೆ ಉತ್ತಮ ಅಭ್ಯರ್ಥಿ ಎಂದು ಸೂಚಿಸುತ್ತದೆ.\n", + "\n", + "R ಗ್ರಾಫ್‌ಗಳನ್ನು ರಚಿಸಲು ಹಲವಾರು ವ್ಯವಸ್ಥೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಆದರೆ [`ggplot2`](https://ggplot2.tidyverse.org/index.html) ಅತ್ಯಂತ ಸುಂದರ ಮತ್ತು ಬಹುಮುಖವಾಗಿದೆ. `ggplot2` ನಿಮಗೆ **ಸ್ವತಂತ್ರ ಘಟಕಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ** ಗ್ರಾಫ್‌ಗಳನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.\n", + "\n", + "ನಾವು Price ಮತ್ತು Month ಕಾಲಮ್‌ಗಳಿಗಾಗಿ ಸರಳ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್‌ನಿಂದ ಪ್ರಾರಂಭಿಸೋಣ.\n", + "\n", + "ಹೀಗಾಗಿ ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನಾವು [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html) ನಿಂದ ಪ್ರಾರಂಭಿಸಿ, ಡೇಟಾಸೆಟ್ ಮತ್ತು ಅಲಂಕಾರಿಕ ನಕ್ಷೆ (aesthetic mapping) ( [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html) ಬಳಸಿ) ಒದಗಿಸಿ ನಂತರ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್‌ಗಳಿಗೆ [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html) ಹೋಲುವ ಲೇಯರ್‌ಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ.\n" + ], + "metadata": { + "id": "mYSH6-EtbvNa" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Set a theme for the plots\n", + "theme_set(theme_light())\n", + "\n", + "# Create a scatter plot\n", + "p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n", + "p + geom_point()" + ], + "outputs": [], + "metadata": { + "id": "g2YjnGeOcLo4" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಇದು ಉಪಯುಕ್ತವಾದ ಪ್ಲಾಟ್ ಆಗಿದೆಯೇ 🤷? ಇದರಲ್ಲಿ ನಿಮಗೆ ಏನಾದರೂ ಆಶ್ಚರ್ಯಕರವಾಗಿದೆಯೇ?\n", + "\n", + "ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಲ್ಲ ಏಕೆಂದರೆ ಇದು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನೀಡಲಾದ ತಿಂಗಳಲ್ಲಿ ಬಿಂದುಗಳ ವಿಸ್ತಾರವಾಗಿ ಪ್ರದರ್ಶಿಸುವುದೇ ಆಗಿದೆ.\n", + "
\n" + ], + "metadata": { + "id": "Ml7SDCLQcPvE" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **ನಾವು ಇದನ್ನು ಉಪಯುಕ್ತವಾಗಿಸಲು ಹೇಗೆ ಮಾಡಬಹುದು?**\n", + "\n", + "ಚಾರ್ಟ್‌ಗಳು ಉಪಯುಕ್ತ ಡೇಟಾವನ್ನು ಪ್ರದರ್ಶಿಸಲು, ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಡೇಟಾವನ್ನು ಯಾವುದೋ ರೀತಿಯಲ್ಲಿ ಗುಂಪು ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಪ್ರತಿ ತಿಂಗಳಿಗಾಗಿ ಕಂಬಳಿಗಳ ಸರಾಸರಿ ಬೆಲೆಯನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ನಮ್ಮ ಡೇಟಾದ ಅಡಿಯಲ್ಲಿ ಇರುವ ಮಾದರಿಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚು ಒಳನೋಟಗಳನ್ನು ನೀಡುತ್ತದೆ. ಇದು ನಮಗೆ ಇನ್ನೊಂದು **dplyr** ಫ್ಲೈಬೈಗೆ ದಾರಿ ಮಾಡಿಕೊಡುತ್ತದೆ:\n", + "\n", + "#### `dplyr::group_by() %>% summarize()`\n", + "\n", + "R ನಲ್ಲಿ ಗುಂಪು ಮಾಡಿದ ಸಂಗ್ರಹಣೆಯನ್ನು ಸುಲಭವಾಗಿ ಲೆಕ್ಕಹಾಕಬಹುದು\n", + "\n", + "`dplyr::group_by() %>% summarize()`\n", + "\n", + "- `dplyr::group_by()` ವಿಶ್ಲೇಷಣೆಯ ಘಟಕವನ್ನು ಸಂಪೂರ್ಣ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಪ್ರತಿ ತಿಂಗಳುಗಳಂತಹ ವೈಯಕ್ತಿಕ ಗುಂಪುಗಳಿಗೆ ಬದಲಾಯಿಸುತ್ತದೆ.\n", + "\n", + "- `dplyr::summarize()` ನೀವು ಸೂಚಿಸಿದ ಪ್ರತಿಯೊಂದು ಗುಂಪು ಚರ ಮತ್ತು ಪ್ರತಿಯೊಂದು ಸಾರಾಂಶ ಅಂಕಿಅಂಶಗಳಿಗಾಗಿ ಒಂದು ಕಾಲಮ್ ಹೊಂದಿರುವ ಹೊಸ ಡೇಟಾ ಫ್ರೇಮ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.\n", + "\n", + "ಉದಾಹರಣೆಗೆ, ನಾವು `dplyr::group_by() %>% summarize()` ಅನ್ನು ಬಳಸಿಕೊಂಡು ಕಂಬಳಿಗಳನ್ನು **ತಿಂಗಳು** ಕಾಲಮ್ ಆಧಾರಿತ ಗುಂಪುಗಳಾಗಿ ಗುಂಪು ಮಾಡಿ, ನಂತರ ಪ್ರತಿ ತಿಂಗಳಿಗೂ **ಸರಾಸರಿ ಬೆಲೆ** ಕಂಡುಹಿಡಿಯಬಹುದು.\n" + ], + "metadata": { + "id": "jMakvJZIcVkh" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Find the average price of pumpkins per month\r\n", + "new_pumpkins %>%\r\n", + " group_by(Month) %>% \r\n", + " summarise(mean_price = mean(Price))" + ], + "outputs": [], + "metadata": { + "id": "6kVSUa2Bcilf" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಸಂಕ್ಷಿಪ್ತ!✨\n", + "\n", + "ತಿಂಗಳುಗಳಂತಹ ವರ್ಗೀಕೃತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಾರ್ ಪ್ಲಾಟ್ 📊 ಬಳಸಿ ಉತ್ತಮವಾಗಿ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ. ಬಾರ್ ಚಾರ್ಟ್‌ಗಳಿಗೆ ಹೊಣೆಗಾರಿರುವ ಲೇಯರ್‌ಗಳು `geom_bar()` ಮತ್ತು `geom_col()` ಆಗಿವೆ. ಇನ್ನಷ್ಟು ತಿಳಿಯಲು `?geom_bar` ಅನ್ನು ನೋಡಿ.\n", + "\n", + "ಒಂದು ತಯಾರಿಸೋಣ!\n" + ], + "metadata": { + "id": "Kds48GUBcj3W" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Find the average price of pumpkins per month then plot a bar chart\r\n", + "new_pumpkins %>%\r\n", + " group_by(Month) %>% \r\n", + " summarise(mean_price = mean(Price)) %>% \r\n", + " ggplot(aes(x = Month, y = mean_price)) +\r\n", + " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n", + " ylab(\"Pumpkin Price\")" + ], + "outputs": [], + "metadata": { + "id": "VNbU1S3BcrxO" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤩🤩ಇದು ಇನ್ನಷ್ಟು ಉಪಯುಕ್ತ ಡೇಟಾ ದೃಶ್ಯೀಕರಣವಾಗಿದೆ! ಇದು ಸಪ್ಟೆಂಬರ್ ಮತ್ತು ಅಕ್ಟೋಬರ್ ತಿಂಗಳಲ್ಲಿ ಕಂಬಳಿಗಳ ಗರಿಷ್ಠ ಬೆಲೆ ಸಂಭವಿಸುತ್ತದೆ ಎಂದು ಸೂಚಿಸುತ್ತಿದೆ ಎಂದು ತೋರುತ್ತದೆ. ಇದು ನಿಮ್ಮ ನಿರೀಕ್ಷೆಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆಯೇ? ಏಕೆ ಅಥವಾ ಏಕೆ ಅಲ್ಲ?\n", + "\n", + "ಎರಡನೇ ಪಾಠವನ್ನು ಮುಗಿಸಿದ ನಿಮಗೆ ಅಭಿನಂದನೆಗಳು 👏! ನೀವು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮಾದರಿ ನಿರ್ಮಾಣಕ್ಕೆ ಸಿದ್ಧಪಡಿಸಿದಿರಿ, ನಂತರ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಬಳಸಿ ಇನ್ನಷ್ಟು ಒಳನೋಟಗಳನ್ನು ಅನಾವರಣಗೊಳಿಸಿದಿರಿ!\n" + ], + "metadata": { + "id": "zDm0VOzzcuzR" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/2-Regression/2-Data/solution/notebook.ipynb b/translations/kn/2-Regression/2-Data/solution/notebook.ipynb new file mode 100644 index 000000000..ce88393dc --- /dev/null +++ b/translations/kn/2-Regression/2-Data/solution/notebook.ipynb @@ -0,0 +1,439 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಕಂಬಳಕಾಯಿ ಗಾತ್ರದ ರೇಖೀಯ ರಿಗ್ರೆಷನ್ - ಪಾಠ 2\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
70BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN9/24/1615.015.015.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
71BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN9/24/1618.018.018.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
72BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/1/1618.018.018.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
73BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/1/1617.017.017.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
74BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/8/1615.015.015.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade \\\n", + "70 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "71 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "72 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "73 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "74 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "\n", + " Date Low Price High Price Mostly Low ... Unit of Sale Quality \\\n", + "70 9/24/16 15.0 15.0 15.0 ... NaN NaN \n", + "71 9/24/16 18.0 18.0 18.0 ... NaN NaN \n", + "72 10/1/16 18.0 18.0 18.0 ... NaN NaN \n", + "73 10/1/16 17.0 17.0 17.0 ... NaN NaN \n", + "74 10/8/16 15.0 15.0 15.0 ... NaN NaN \n", + "\n", + " Condition Appearance Storage Crop Repack Trans Mode Unnamed: 24 \\\n", + "70 NaN NaN NaN NaN N NaN NaN \n", + "71 NaN NaN NaN NaN N NaN NaN \n", + "72 NaN NaN NaN NaN N NaN NaN \n", + "73 NaN NaN NaN NaN N NaN NaN \n", + "74 NaN NaN NaN NaN N NaN NaN \n", + "\n", + " Unnamed: 25 \n", + "70 NaN \n", + "71 NaN \n", + "72 NaN \n", + "73 NaN \n", + "74 NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n", + "\n", + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "\n", + "pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "City Name 0\n", + "Type 406\n", + "Package 0\n", + "Variety 0\n", + "Sub Variety 167\n", + "Grade 415\n", + "Date 0\n", + "Low Price 0\n", + "High Price 0\n", + "Mostly Low 24\n", + "Mostly High 24\n", + "Origin 0\n", + "Origin District 396\n", + "Item Size 114\n", + "Color 145\n", + "Environment 415\n", + "Unit of Sale 404\n", + "Quality 415\n", + "Condition 415\n", + "Appearance 415\n", + "Storage 415\n", + "Crop 415\n", + "Repack 0\n", + "Trans Mode 415\n", + "Unnamed: 24 415\n", + "Unnamed: 25 391\n", + "dtype: int64" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pumpkins.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Month Package Low Price High Price Price\n", + "70 9 1 1/9 bushel cartons 15.00 15.0 13.50\n", + "71 9 1 1/9 bushel cartons 18.00 18.0 16.20\n", + "72 10 1 1/9 bushel cartons 18.00 18.0 16.20\n", + "73 10 1 1/9 bushel cartons 17.00 17.0 15.30\n", + "74 10 1 1/9 bushel cartons 15.00 15.0 13.50\n", + "... ... ... ... ... ...\n", + "1738 9 1/2 bushel cartons 15.00 15.0 30.00\n", + "1739 9 1/2 bushel cartons 13.75 15.0 28.75\n", + "1740 9 1/2 bushel cartons 10.75 15.0 25.75\n", + "1741 9 1/2 bushel cartons 12.00 12.0 24.00\n", + "1742 9 1/2 bushel cartons 12.00 12.0 24.00\n", + "\n", + "[415 rows x 5 columns]\n" + ] + } + ], + "source": [ + "\n", + "# A set of new columns for a new dataframe. Filter out nonmatching columns\n", + "columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']\n", + "pumpkins = pumpkins.loc[:, columns_to_select]\n", + "\n", + "# Get an average between low and high price for the base pumpkin price\n", + "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n", + "\n", + "# Convert the date to its month only\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "\n", + "# Create a new dataframe with this basic data\n", + "new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})\n", + "\n", + "# Convert the price if the Package contains fractional bushel values\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)\n", + "\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)\n", + "\n", + "print(new_pumpkins)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "price = new_pumpkins.Price\n", + "month = new_pumpkins.Month\n", + "plt.scatter(price, month)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Pumpkin Price')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')\n", + "plt.ylabel(\"Pumpkin Price\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + }, + "kernelspec": { + "display_name": "Python 3.7.0 64-bit ('3.7')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "95726f0b8283628d5356a4f8eb8b4b76", + "translation_date": "2025-12-19T16:31:54+00:00", + "source_file": "2-Regression/2-Data/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/3-Linear/README.md b/translations/kn/2-Regression/3-Linear/README.md new file mode 100644 index 000000000..3a3e77963 --- /dev/null +++ b/translations/kn/2-Regression/3-Linear/README.md @@ -0,0 +1,383 @@ + +# Scikit-learn ಬಳಸಿ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: ರೆಗ್ರೆಶನ್ ನಾಲ್ಕು ರೀತಿಗಳು + +![ರೇಖೀಯ ಮತ್ತು ಬಹುಪದ ರೆಗ್ರೆಶನ್ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.kn.png) +> ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](https://twitter.com/dasani_decoded) ಅವರಿಂದ +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +> ### [ಈ ಪಾಠ R ನಲ್ಲಿ ಲಭ್ಯವಿದೆ!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### ಪರಿಚಯ + +ಈವರೆಗೆ ನೀವು ರೆಗ್ರೆಶನ್ ಎಂದರೇನು ಎಂಬುದನ್ನು ಪಂಪ್ಕಿನ್ ಬೆಲೆ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಸಂಗ್ರಹಿಸಿದ ಮಾದರಿ ಡೇಟಾ ಮೂಲಕ ಅನ್ವೇಷಿಸಿದ್ದೀರಿ. ನೀವು ಅದನ್ನು Matplotlib ಬಳಸಿ ದೃಶ್ಯೀಕರಿಸಿದ್ದೀರಿ. + +ಈಗ ನೀವು ML ಗಾಗಿ ರೆಗ್ರೆಶನ್‌ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಹೋಗಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. ದೃಶ್ಯೀಕರಣವು ಡೇಟಾವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಆದರೆ ಯಂತ್ರ ಅಧ್ಯಯನದ ನಿಜವಾದ ಶಕ್ತಿ _ಮಾದರಿಗಳನ್ನು ತರಬೇತುಗೊಳಿಸುವುದರಿಂದ_ ಬರುತ್ತದೆ. ಮಾದರಿಗಳನ್ನು ಇತಿಹಾಸದ ಡೇಟಾದ ಮೇಲೆ ತರಬೇತುಗೊಳಿಸಲಾಗುತ್ತದೆ, ಇದು ಡೇಟಾ ಅವಲಂಬನೆಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಿಡಿಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹೊಸ ಡೇಟಾದ ಫಲಿತಾಂಶಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ, ಇದು ಮಾದರಿ ಮೊದಲು ನೋಡಿರಲಿಲ್ಲ. + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಎರಡು ರೀತಿಯ ರೆಗ್ರೆಶನ್ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯುತ್ತೀರಿ: _ಮೂಲಭೂತ ರೇಖೀಯ ರೆಗ್ರೆಶನ್_ ಮತ್ತು _ಬಹುಪದ ರೆಗ್ರೆಶನ್_, ಜೊತೆಗೆ ಈ ತಂತ್ರಜ್ಞಾನಗಳ ಹಿಂದೆ ಇರುವ ಕೆಲವು ಗಣಿತ. ಆ ಮಾದರಿಗಳು ನಮಗೆ ವಿವಿಧ ಇನ್ಪುಟ್ ಡೇಟಾದ ಆಧಾರದ ಮೇಲೆ ಪಂಪ್ಕಿನ್ ಬೆಲೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. + +[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression") + +> 🎥 ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಕುರಿತು ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +> ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ, ನಾವು ಗಣಿತದ ಕನಿಷ್ಠ ಜ್ಞಾನವನ್ನು ಊಹಿಸುತ್ತೇವೆ ಮತ್ತು ಇತರ ಕ್ಷೇತ್ರಗಳಿಂದ ಬರುವ ವಿದ್ಯಾರ್ಥಿಗಳಿಗೆ ಇದನ್ನು ಸುಲಭಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತೇವೆ, ಆದ್ದರಿಂದ ಟಿಪ್ಪಣಿಗಳು, 🧮 ಕರೆಗಳು, ಚಿತ್ರಗಳು ಮತ್ತು ಇತರ ಕಲಿಕಾ ಸಾಧನಗಳನ್ನು ಗಮನಿಸಿ. + +### ಪೂರ್ವಾಪೇಕ್ಷಿತ + +ನೀವು ಈಗಾಗಲೇ ನಾವು ಪರಿಶೀಲಿಸುತ್ತಿರುವ ಪಂಪ್ಕಿನ್ ಡೇಟಾದ ರಚನೆಗೆ ಪರಿಚಿತರಾಗಿರಬೇಕು. ನೀವು ಈ ಪಾಠದ _notebook.ipynb_ ಫೈಲ್‌ನಲ್ಲಿ ಪೂರ್ವಲೋಡ್ ಮತ್ತು ಪೂರ್ವಶುದ್ಧೀಕರಿಸಿದ ಡೇಟಾವನ್ನು ಕಾಣಬಹುದು. ಫೈಲ್‌ನಲ್ಲಿ, ಪಂಪ್ಕಿನ್ ಬೆಲೆ ಪ್ರತಿ ಬಷೆಲ್‌ಗೆ ಹೊಸ ಡೇಟಾ ಫ್ರೇಮ್‌ನಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗಿದೆ. ನೀವು Visual Studio Code ನಲ್ಲಿ ಈ ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ಕರ್ಣೆಲ್‌ಗಳಲ್ಲಿ ಚಾಲನೆ ಮಾಡಬಹುದಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. + +### ತಯಾರಿ + +ಒಂದು ಸ್ಮರಣಿಕೆಗಾಗಿ, ನೀವು ಈ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡುತ್ತಿದ್ದೀರಿ ಇದರಿಂದ ಅದಕ್ಕೆ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಲು. + +- ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು ಖರೀದಿಸಲು ಅತ್ಯುತ್ತಮ ಸಮಯ ಯಾವುದು? +- ಸಣ್ಣ ಪಂಪ್ಕಿನ್‌ಗಳ ಒಂದು ಕೇಸ್‌ನ ಬೆಲೆ ಎಷ್ಟು ನಿರೀಕ್ಷಿಸಬಹುದು? +- ಅವುಗಳನ್ನು ಅರ್ಧ-ಬಷೆಲ್ ಬಾಸ್ಕೆಟ್‌ಗಳಲ್ಲಿ ಖರೀದಿಸಬೇಕೇ ಅಥವಾ 1 1/9 ಬಷೆಲ್ ಬಾಕ್ಸ್ ಮೂಲಕವೇ? +ನಾವು ಈ ಡೇಟಾದಲ್ಲಿ ಇನ್ನಷ್ಟು ತವಕದಿಂದ ತೊಡಗಿಸೋಣ. + +ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನೀವು ಪಾಂಡಾಸ್ ಡೇಟಾ ಫ್ರೇಮ್ ರಚಿಸಿ ಮೂಲ ಡೇಟಾಸೆಟ್‌ನ ಭಾಗವನ್ನು ತುಂಬಿದ್ದೀರಿ, ಬೆಲೆಯನ್ನು ಬಷೆಲ್ ಮೂಲಕ ಮಾನಕೀಕರಿಸಿದ್ದೀರಿ. ಆದಾಗ್ಯೂ, ನೀವು ಸುಮಾರು 400 ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಸಂಗ್ರಹಿಸಿದ್ದೀರಿ ಮತ್ತು ಅವು ಕೇವಲ ಶರತ್ಕಾಲದ ತಿಂಗಳುಗಳಿಗೆ ಮಾತ್ರ. + +ಈ ಪಾಠದ ಜೊತೆಗೆ ಲಭ್ಯವಿರುವ ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಪೂರ್ವಲೋಡ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ನೋಡಿ. ಡೇಟಾ ಪೂರ್ವಲೋಡ್ ಆಗಿದ್ದು, ಪ್ರಾಥಮಿಕ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ತಿಂಗಳ ಡೇಟಾವನ್ನು ತೋರಿಸಲು ಚಾರ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಡೇಟಾದ ಸ್ವಭಾವವನ್ನು ಇನ್ನಷ್ಟು ವಿವರವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಲು ಅದನ್ನು ಹೆಚ್ಚು ಶುದ್ಧೀಕರಿಸಬಹುದು. + +## ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ರೇಖೆ + +ಪಾಠ 1 ರಲ್ಲಿ ನೀವು ಕಲಿತಂತೆ, ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ವ್ಯಾಯಾಮದ ಗುರಿ ಒಂದು ರೇಖೆಯನ್ನು ರೇಖಾಚಿತ್ರ ಮಾಡಲು ಆಗಿದೆ: + +- **ಚರಗಳ ಸಂಬಂಧಗಳನ್ನು ತೋರಿಸುವುದು**. ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ತೋರಿಸುವುದು +- **ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದು**. ಹೊಸ ಡೇಟಾಪಾಯಿಂಟ್ ಆ ರೇಖೆಯ ಸಂಬಂಧದಲ್ಲಿ ಎಲ್ಲಿ ಬಿದ್ದೀತು ಎಂಬುದನ್ನು ನಿಖರವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದು. + +**ಕನಿಷ್ಠ ಚದರ ರೆಗ್ರೆಶನ್** ಸಾಮಾನ್ಯವಾಗಿ ಈ ರೀತಿಯ ರೇಖೆಯನ್ನು ಬಿಡುತ್ತದೆ. 'ಕನಿಷ್ಠ ಚದರ' ಎಂಬ ಪದವು ಅಂದರೆ ರೆಗ್ರೆಶನ್ ರೇಖೆಯ ಸುತ್ತಲೂ ಇರುವ ಎಲ್ಲಾ ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳ ಚದರಗಳನ್ನು ತೆಗೆದು ಸೇರಿಸಲಾಗುತ್ತದೆ. ಆದರ್ಶವಾಗಿ, ಅಂತಿಮ ಮೊತ್ತ ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ಇರಬೇಕು, ಏಕೆಂದರೆ ನಾವು ತಪ್ಪುಗಳ ಸಂಖ್ಯೆ ಕಡಿಮೆ ಇರಬೇಕೆಂದು ಬಯಸುತ್ತೇವೆ, ಅಂದರೆ `ಕನಿಷ್ಠ ಚದರ`. + +ನಾವು ಈ ರೇಖೆಯನ್ನು ಮಾದರಿಮಾಡಲು ಬಯಸುತ್ತೇವೆ ಏಕೆಂದರೆ ಅದು ನಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳಿಂದ ಕನಿಷ್ಠ ಒಟ್ಟು ದೂರವನ್ನು ಹೊಂದಿರುತ್ತದೆ. ನಾವು ಮೊದಲು ಚದರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ ಏಕೆಂದರೆ ನಾವು ಅದರ ದಿಕ್ಕಿನ ಬದಲು ಅದರ ಪ್ರಮಾಣದ ಬಗ್ಗೆ ಚಿಂತಿಸುತ್ತೇವೆ. + +> **🧮 ಗಣಿತವನ್ನು ತೋರಿಸಿ** +> +> ಈ ರೇಖೆಯನ್ನು, _ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯ ರೇಖೆ_ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಅದನ್ನು [ಸಮೀಕರಣ](https://en.wikipedia.org/wiki/Simple_linear_regression) ಮೂಲಕ ವ್ಯಕ್ತಪಡಿಸಬಹುದು: +> +> ``` +> Y = a + bX +> ``` +> +> `X` ಅನ್ನು 'ವಿವರಣೆ ಚರ' ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. `Y` ಅನ್ನು 'ಆಧಾರಿತ ಚರ' ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ರೇಖೆಯ ಸ್ಲೋಪ್ `b` ಆಗಿದ್ದು, `a` ಯು y-ಅಂತರವನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಇದು `X = 0` ಆಗಿರುವಾಗ `Y` ಯ ಮೌಲ್ಯ. +> +>![ಸ್ಲೋಪ್ ಲೆಕ್ಕಹಾಕಿ](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.kn.png) +> +> ಮೊದಲು, ಸ್ಲೋಪ್ `b` ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ. ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ +> +> ಬೇರೆ ಪದಗಳಲ್ಲಿ, ಮತ್ತು ನಮ್ಮ ಪಂಪ್ಕಿನ್ ಡೇಟಾದ ಮೂಲ ಪ್ರಶ್ನೆಗೆ ಸಂಬಂಧಿಸಿದಂತೆ: "ತಿಂಗಳ ಪ್ರಕಾರ ಪ್ರತಿ ಬಷೆಲ್ ಪಂಪ್ಕಿನ್ ಬೆಲೆಯನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿ", `X` ಬೆಲೆಗೆ ಸೂಚಿಸುತ್ತದೆ ಮತ್ತು `Y` ಮಾರಾಟದ ತಿಂಗಳಿಗೆ ಸೂಚಿಸುತ್ತದೆ. +> +>![ಸಮೀಕರಣ ಪೂರ್ಣಗೊಳಿಸಿ](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.kn.png) +> +> 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 ಚರಗಳ ನಡುವೆ. ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಬಳಸಿ ನೀವು ಈ ಗುಣಾಂಕವನ್ನು ತ್ವರಿತವಾಗಿ ದೃಶ್ಯೀಕರಿಸಬಹುದು. ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳು ಸರಳ ರೇಖೆಯಲ್ಲಿ ಸುತ್ತಲೂ ಹಂಚಿಕೊಂಡಿದ್ದರೆ ಸಹಸಂಬಂಧ ಹೆಚ್ಚು ಇರುತ್ತದೆ, ಆದರೆ ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳು X ಮತ್ತು Y ನಡುವೆ ಎಲ್ಲೆಡೆ ಹಂಚಿಕೊಂಡಿದ್ದರೆ ಸಹಸಂಬಂಧ ಕಡಿಮೆ ಇರುತ್ತದೆ. + +ಒಳ್ಳೆಯ ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಮಾದರಿ ಕನಿಷ್ಠ ಚದರ ರೆಗ್ರೆಶನ್ ವಿಧಾನವನ್ನು ಬಳಸಿ ರೇಖೆಯೊಂದಿಗೆ ಸಹಸಂಬಂಧ ಗುಣಾಂಕವು ಹೆಚ್ಚು (0 ಕ್ಕಿಂತ 1 ಗೆ ಹತ್ತಿರ) ಇರುವುದಾಗಿರುತ್ತದೆ. + +✅ ಈ ಪಾಠದ ಜೊತೆಗೆ ಲಭ್ಯವಿರುವ ನೋಟ್ಬುಕ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡಿ ಮತ್ತು ತಿಂಗಳು ಮತ್ತು ಬೆಲೆ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ನೋಡಿ. ಪಂಪ್ಕಿನ್ ಮಾರಾಟದ ತಿಂಗಳು ಮತ್ತು ಬೆಲೆ ನಡುವಿನ ಡೇಟಾ ನಿಮ್ಮ ದೃಶ್ಯಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆಯ ಪ್ರಕಾರ ಹೆಚ್ಚು ಅಥವಾ ಕಡಿಮೆ ಸಹಸಂಬಂಧ ಹೊಂದಿದೆಯೇ? ನೀವು `ತಿಂಗಳು` ಬದಲು ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ಮಾಪನವನ್ನು ಬಳಸಿದರೆ, ಉದಾ. *ವರ್ಷದ ದಿನ* (ಅಂದರೆ ವರ್ಷದ ಆರಂಭದಿಂದ ದಿನಗಳ ಸಂಖ್ಯೆ) ಇದರಿಂದ ಬದಲಾವಣೆ ಆಗುತ್ತದೆಯೇ? + +ಕೆಳಗಿನ ಕೋಡ್‌ನಲ್ಲಿ, ನಾವು ಡೇಟಾವನ್ನು ಶುದ್ಧೀಕರಿಸಿದ್ದೇವೆ ಎಂದು ಊಹಿಸೋಣ ಮತ್ತು `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) +``` + +ಈಗ ನೀವು ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಹಿಂದಿನ ಗಣಿತವನ್ನು ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದೀರಿ, ಬನ್ನಿ ಒಂದು ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ರಚಿಸಿ ಯಾವ ಪಂಪ್ಕಿನ್ ಪ್ಯಾಕೇಜ್ ಉತ್ತಮ ಬೆಲೆ ಹೊಂದಿರಬಹುದು ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡೋಣ. ಹಬ್ಬದ ಪಂಪ್ಕಿನ್ ಪ್ಯಾಚ್‌ಗಾಗಿ ಪಂಪ್ಕಿನ್ ಖರೀದಿಸುವವರು ಈ ಮಾಹಿತಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ಯಾಚ್‌ಗಾಗಿ ಪಂಪ್ಕಿನ್ ಪ್ಯಾಕೇಜ್‌ಗಳ ಖರೀದಿಯನ್ನು ಗರಿಷ್ಠಗೊಳಿಸಬಹುದು. + +## ಸಹಸಂಬಂಧ ಹುಡುಕುವುದು + +[![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") + +> 🎥 ಸಹಸಂಬಂಧದ ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ಹಿಂದಿನ ಪಾಠದಿಂದ ನೀವು ನೋಡಿರಬಹುದು ವಿಭಿನ್ನ ತಿಂಗಳುಗಳಿಗೆ ಸರಾಸರಿ ಬೆಲೆ ಹೀಗಿದೆ: + +ತಿಂಗಳ ಪ್ರಕಾರ ಸರಾಸರಿ ಬೆಲೆ + +ಇದು ಕೆಲವು ಸಹಸಂಬಂಧ ಇರಬೇಕೆಂದು ಸೂಚಿಸುತ್ತದೆ, ಮತ್ತು ನಾವು `ತಿಂಗಳು` ಮತ್ತು `ಬೆಲೆ` ಅಥವಾ `DayOfYear` ಮತ್ತು `ಬೆಲೆ` ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು. ಕೆಳಗಿನ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ನಂತರದ ಸಂಬಂಧವನ್ನು ತೋರಿಸುತ್ತದೆ: + +ಬೆಲೆ ಮತ್ತು ವರ್ಷದ ದಿನದ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ + +`corr` ಫಂಕ್ಷನ್ ಬಳಸಿ ಸಹಸಂಬಂಧವನ್ನು ನೋಡೋಣ: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +ಸಹಸಂಬಂಧವು ಬಹಳ ಕಡಿಮೆ ಇದೆ ಎಂದು ತೋರುತ್ತದೆ, `ತಿಂಗಳು` ಮೂಲಕ -0.15 ಮತ್ತು `DayOfMonth` ಮೂಲಕ -0.17, ಆದರೆ ಇನ್ನೊಂದು ಪ್ರಮುಖ ಸಂಬಂಧ ಇರಬಹುದು. ವಿಭಿನ್ನ ಪಂಪ್ಕಿನ್ ಪ್ರಭೇದಗಳಿಗೆ ಹೊಂದಿಕೊಂಡ ಬೆಲೆಗಳ ವಿಭಿನ್ನ ಗುಂಪುಗಳಿವೆ ಎಂದು ತೋರುತ್ತದೆ. ಈ ಊಹೆಯನ್ನು ದೃಢೀಕರಿಸಲು, ಪ್ರತಿ ಪಂಪ್ಕಿನ್ ವರ್ಗವನ್ನು ವಿಭಿನ್ನ ಬಣ್ಣದಲ್ಲಿ ಚಿತ್ರಿಸೋಣ. `scatter` ಪ್ಲಾಟ್ ಫಂಕ್ಷನ್‌ಗೆ `ax` ಪರಾಮಿತಿ ನೀಡುವ ಮೂಲಕ ನಾವು ಎಲ್ಲಾ ಬಿಂದುಗಳನ್ನು ಒಂದೇ ಗ್ರಾಫ್‌ನಲ್ಲಿ ಚಿತ್ರಿಸಬಹುದು: + +```python +ax=None +colors = ['red','blue','green','yellow'] +for i,var in enumerate(new_pumpkins['Variety'].unique()): + df = new_pumpkins[new_pumpkins['Variety']==var] + ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) +``` + +ಬೆಲೆ ಮತ್ತು ವರ್ಷದ ದಿನದ ಬಣ್ಣದ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ + +ನಮ್ಮ ತನಿಖೆ ಸೂಚಿಸುತ್ತದೆ, ಪ್ರಭೇದವು ಮಾರಾಟದ ದಿನಾಂಕಕ್ಕಿಂತ ಒಟ್ಟು ಬೆಲೆಯ ಮೇಲೆ ಹೆಚ್ಚು ಪ್ರಭಾವ ಬೀರುತ್ತದೆ. ನಾವು ಇದನ್ನು ಬಾರ್ ಗ್ರಾಫ್ ಮೂಲಕ ನೋಡಬಹುದು: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +ಬೆಲೆ ಮತ್ತು ಪ್ರಭೇದದ ಬಾರ್ ಗ್ರಾಫ್ + +ಈಗ ನಾವು ಒಂದು ಪಂಪ್ಕಿನ್ ಪ್ರಭೇದ, 'ಪೈ ಟೈಪ್' ಮೇಲೆ ಮಾತ್ರ ಗಮನಹರಿಸೋಣ ಮತ್ತು ದಿನಾಂಕವು ಬೆಲೆಗೆ ಏನು ಪ್ರಭಾವ ಬೀರುತ್ತದೆ ನೋಡೋಣ: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +ಬೆಲೆ ಮತ್ತು ವರ್ಷದ ದಿನದ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ + +ಈಗ ನಾವು `corr` ಫಂಕ್ಷನ್ ಬಳಸಿ `ಬೆಲೆ` ಮತ್ತು `DayOfYear` ನಡುವಿನ ಸಹಸಂಬಂಧವನ್ನು ಲೆಕ್ಕಹಾಕಿದರೆ, ಅದು `-0.27` ಆಗಿರುತ್ತದೆ - ಇದು ಭವಿಷ್ಯವಾಣಿ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವುದು ಅರ್ಥಪೂರ್ಣ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. + +> ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವ ಮೊದಲು, ನಮ್ಮ ಡೇಟಾ ಶುದ್ಧವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ. ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಕಳೆದುಹೋಗಿರುವ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಚೆನ್ನಾಗಿ ಕೆಲಸ ಮಾಡದು, ಆದ್ದರಿಂದ ಎಲ್ಲಾ ಖಾಲಿ ಸೆಲ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು ಸೂಕ್ತ. + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +ಮತ್ತೊಂದು ವಿಧಾನವೆಂದರೆ ಆ ಖಾಲಿ ಮೌಲ್ಯಗಳನ್ನು ಸಂಬಂಧಿಸಿದ ಕಾಲಮ್‌ನ ಸರಾಸರಿ ಮೌಲ್ಯಗಳಿಂದ ತುಂಬಿಸುವುದು. + +## ಸರಳ ರೇಖೀಯ ರೆಗ್ರೆಶನ್ + +[![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") + +> 🎥 ರೇಖೀಯ ಮತ್ತು ಬಹುಪದ ರೆಗ್ರೆಶನ್ ಕುರಿತು ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ನಮ್ಮ ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು, ನಾವು **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 ಅರೆಗಳಾಗಿ ವಿಭಜಿಸುತ್ತೇವೆ: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> ಗಮನಿಸಿ, Linear Regression ಪ್ಯಾಕೇಜ್ ಸರಿಯಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ನಾವು ಇನ್ಪುಟ್ ಡೇಟಾದ ಮೇಲೆ `reshape` ಮಾಡಬೇಕಾಯಿತು. Linear Regression 2D ಅರೆ ಇನ್ಪುಟ್ ಆಗಿರಬೇಕೆಂದು ನಿರೀಕ್ಷಿಸುತ್ತದೆ, ಅಲ್ಲಿ ಪ್ರತಿಯೊಂದು ಸಾಲು ಒಂದು ಲಕ್ಷಣಗಳ ವೆಕ್ಟರ್ ಆಗಿರುತ್ತದೆ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಮಗೆ ಒಂದೇ ಇನ್ಪುಟ್ ಇದ್ದು, ಆದ್ದರಿಂದ N×1 ಆಕಾರದ ಅರೆ ಬೇಕಾಗುತ್ತದೆ, ಇಲ್ಲಿ N ಡೇಟಾಸೆಟ್ ಗಾತ್ರ. + +ನಂತರ, ನಾವು ಡೇಟಾವನ್ನು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಡೇಟಾಸೆಟ್‌ಗಳಾಗಿ ವಿಭಜಿಸಬೇಕು, ಇದರಿಂದ ನಾವು ತರಬೇತಿಯ ನಂತರ ನಮ್ಮ ಮಾದರಿಯನ್ನು ಮಾನ್ಯತೆ ಮಾಡಬಹುದು: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +ಕೊನೆಗೆ, ನಿಜವಾದ ರೇಖೀಯ ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವುದು ಕೇವಲ ಎರಡು ಸಾಲು ಕೋಡ್ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ನಾವು `LinearRegression` ವಸ್ತುವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ, `fit` ವಿಧಾನ ಬಳಸಿ ಅದನ್ನು ನಮ್ಮ ಡೇಟಾಗೆ ಹೊಂದಿಸುತ್ತೇವೆ: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +`fit` ಮಾಡಿದ ನಂತರ `LinearRegression` ವಸ್ತುವಿನಲ್ಲಿ ಎಲ್ಲಾ ರೆಗ್ರೆಶನ್ ಗುಣಾಂಕಗಳು ಇರುತ್ತವೆ, ಅವುಗಳನ್ನು `.coef_` ಗುಣಲಕ್ಷಣದಿಂದ ಪ್ರವೇಶಿಸಬಹುದು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಒಂದೇ ಗುಣಾಂಕ ಇದೆ, ಅದು ಸುಮಾರು `-0.017` ಆಗಿರಬೇಕು. ಇದರ ಅರ್ಥ ಬೆಲೆಗಳು ಸಮಯದೊಂದಿಗೆ ಸ್ವಲ್ಪ ಇಳಿಯುತ್ತಿವೆ, ಆದರೆ ಹೆಚ್ಚು ಅಲ್ಲ, ದಿನಕ್ಕೆ ಸುಮಾರು 2 ಸೆಂಟುಗಳಷ್ಟು. ನಾವು ರೇಖೆಯ Y-ಅಕ್ಷದ ಅಂತರ ಬಿಂದುವನ್ನು `lin_reg.intercept_` ಬಳಸಿ ಪ್ರವೇಶಿಸಬಹುದು - ಇದು ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ ಸುಮಾರು `21` ಆಗಿರುತ್ತದೆ, ವರ್ಷ ಆರಂಭದ ಬೆಲೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ. +ನಮ್ಮ ಮಾದರಿ ಎಷ್ಟು ನಿಖರವಾಗಿದೆ ಎಂದು ನೋಡಲು, ನಾವು ಪರೀಕ್ಷಾ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಬೆಲೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು, ಮತ್ತು ನಂತರ ನಮ್ಮ ಭವಿಷ್ಯವಾಣಿಗಳು ನಿರೀಕ್ಷಿತ ಮೌಲ್ಯಗಳಿಗೆ ಎಷ್ಟು ಹತ್ತಿರವಿದೆ ಎಂದು ಅಳೆಯಬಹುದು. ಇದು ಸರಾಸರಿ ಚದರ ದೋಷ (MSE) ಮೆಟ್ರಿಕ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಮಾಡಬಹುದು, ಇದು ನಿರೀಕ್ಷಿತ ಮತ್ತು ಭವಿಷ್ಯವಾಣಿ ಮೌಲ್ಯಗಳ ನಡುವಿನ ಎಲ್ಲಾ ಚದರ ವ್ಯತ್ಯಾಸಗಳ ಸರಾಸರಿ. + +```python +pred = lin_reg.predict(X_test) + +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +``` + +ನಮ್ಮ ದೋಷವು ಸುಮಾರು 2 ಅಂಕಿಗಳ ಸುತ್ತಲೂ ಇದೆ, ಇದು ~17% ಆಗಿದೆ. ತುಂಬಾ ಚೆನ್ನಾಗಿಲ್ಲ. ಮಾದರಿ ಗುಣಮಟ್ಟದ ಮತ್ತೊಂದು ಸೂಚಕವು **ನಿರ್ಧಾರ ಸಹಗುಣಕ** ಆಗಿದ್ದು, ಇದನ್ನು ಹೀಗೆ ಪಡೆಯಬಹುದು: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` + +ಮೌಲ್ಯವು 0 ಆಗಿದ್ದರೆ, ಅದು ಮಾದರಿ ಇನ್‌ಪುಟ್ ಡೇಟಾವನ್ನು ಪರಿಗಣಿಸುವುದಿಲ್ಲ ಮತ್ತು *ಅತ್ಯಂತ ಕೆಟ್ಟ ರೇಖೀಯ ಭವಿಷ್ಯವಾಣಿ* ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಇದು ಫಲಿತಾಂಶದ ಸರಾಸರಿ ಮೌಲ್ಯವೇ ಆಗಿದೆ. 1 ಮೌಲ್ಯವು ನಾವು ಎಲ್ಲಾ ನಿರೀಕ್ಷಿತ ಔಟ್‌ಪುಟ್‌ಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು ಎಂದು ಅರ್ಥ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಸಹಗುಣಕವು ಸುಮಾರು 0.06 ಆಗಿದ್ದು, ಇದು ತುಂಬಾ ಕಡಿಮೆ. + +ನಾವು ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ಮತ್ತು ರಿಗ್ರೆಷನ್ ರೇಖೆಯನ್ನು ಒಟ್ಟಿಗೆ ಚಿತ್ರಿಸಿ, ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ ರಿಗ್ರೆಷನ್ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಉತ್ತಮವಾಗಿ ನೋಡಬಹುದು: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +Linear regression + +## ಬಹುಪದ ರಿಗ್ರೆಷನ್ + +ಮತ್ತೊಂದು ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಪ್ರಕಾರ ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಆಗಿದೆ. ಕೆಲವೊಮ್ಮೆ ಚರಗಳ ನಡುವೆ ರೇಖೀಯ ಸಂಬಂಧವಿರಬಹುದು - ಗಾತ್ರದಲ್ಲಿ ದೊಡ್ಡ ಕಂಬಳಿಯು ಬೆಲೆಯೂ ಹೆಚ್ಚು - ಆದರೆ ಕೆಲವೊಮ್ಮೆ ಈ ಸಂಬಂಧಗಳನ್ನು ಸಮತಲ ಅಥವಾ ಸರಳ ರೇಖೆಯಾಗಿ ಚಿತ್ರಿಸಲಾಗುವುದಿಲ್ಲ. + +✅ ಇಲ್ಲಿ [ಇನ್ನಷ್ಟು ಉದಾಹರಣೆಗಳು](https://online.stat.psu.edu/stat501/lesson/9/9.8) ಇವೆ, ಅವು ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಬಳಸಬಹುದು + +ದಿನಾಂಕ ಮತ್ತು ಬೆಲೆಯ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಮತ್ತೊಮ್ಮೆ ನೋಡಿ. ಈ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಅನ್ನು ಅವಶ್ಯಕವಾಗಿ ಸರಳ ರೇಖೆಯಿಂದ ವಿಶ್ಲೇಷಿಸಬೇಕೆಂದು ತೋರುತ್ತದೆಯೇ? ಬೆಲೆಗಳು ಬದಲಾಯಿಸಬಹುದೇ? ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಪ್ರಯತ್ನಿಸಬಹುದು. + +✅ ಬಹುಪದಗಳು ಗಣಿತೀಯ ಅಭಿವ್ಯಕ್ತಿಗಳು, ಅವು ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಚರಗಳು ಮತ್ತು ಸಹಗುಣಕಗಳನ್ನು ಹೊಂದಿರಬಹುದು + +ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಅರೇಖೀಯವಲ್ಲದ ಡೇಟಾವನ್ನು ಉತ್ತಮವಾಗಿ ಹೊಂದಿಸಲು ವಕ್ರ ರೇಖೆಯನ್ನು ರಚಿಸುತ್ತದೆ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು ಇನ್‌ಪುಟ್ ಡೇಟಾದಲ್ಲಿ ಚದರ `DayOfYear` ಚರವನ್ನು ಸೇರಿಸಿದರೆ, ನಾವು ಡೇಟಾವನ್ನು ಪ್ಯಾರಾಬೋಲಿಕ್ ವಕ್ರದಿಂದ ಹೊಂದಿಸಬಹುದು, ಅದು ವರ್ಷದಲ್ಲಿ ಒಂದು ನಿರ್ದಿಷ್ಟ ಬಿಂದುವಿನಲ್ಲಿ ಕನಿಷ್ಠ ಮೌಲ್ಯ ಹೊಂದಿರುತ್ತದೆ. + +ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಸಹಾಯಕ [ಪೈಪ್‌ಲೈನ್ API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) ಅನ್ನು ಒಳಗೊಂಡಿದೆ, ಇದು ಡೇಟಾ ಪ್ರಕ್ರಿಯೆಯ ವಿವಿಧ ಹಂತಗಳನ್ನು ಒಟ್ಟಿಗೆ ಸಂಯೋಜಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. **ಪೈಪ್‌ಲೈನ್** ಎಂದರೆ **ಅಂದಾಜುಕಾರರ** ಸರಪಳಿ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು ಮೊದಲು ಬಹುಪದ ಲಕ್ಷಣಗಳನ್ನು ನಮ್ಮ ಮಾದರಿಯಲ್ಲಿ ಸೇರಿಸುವ, ನಂತರ ರಿಗ್ರೆಷನ್ ತರಬೇತಿ ನೀಡುವ ಪೈಪ್‌ಲೈನ್ ರಚಿಸುವೆವು: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +`PolynomialFeatures(2)` ಬಳಸುವುದು ಎಂದರೆ ನಾವು ಇನ್‌ಪುಟ್ ಡೇಟಾದಿಂದ ಎಲ್ಲಾ ದ್ವಿತೀಯ ದರ್ಜೆಯ ಬಹುಪದಗಳನ್ನು ಸೇರಿಸುವೆವು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ ಇದು ಕೇವಲ `DayOfYear`2 ಅರ್ಥವಾಗುತ್ತದೆ, ಆದರೆ ಎರಡು ಇನ್‌ಪುಟ್ ಚರಗಳು X ಮತ್ತು Y ಇದ್ದರೆ, ಇದು X2, XY ಮತ್ತು Y2 ಸೇರಿಸುತ್ತದೆ. ನಾವು ಹೆಚ್ಚಿನ ದರ್ಜೆಯ ಬಹುಪದಗಳನ್ನು ಕೂಡ ಬಳಸಬಹುದು. + +ಪೈಪ್‌ಲೈನ್‌ಗಳನ್ನು ಮೂಲ `LinearRegression` ವಸ್ತುವಿನಂತೆ ಬಳಸಬಹುದು, ಅಂದರೆ ನಾವು ಪೈಪ್‌ಲೈನ್ ಅನ್ನು `fit` ಮಾಡಬಹುದು, ನಂತರ `predict` ಬಳಸಿ ಭವಿಷ್ಯವಾಣಿ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯಬಹುದು. ಇಲ್ಲಿ ಪರೀಕ್ಷಾ ಡೇಟಾ ಮತ್ತು ಅಂದಾಜು ವಕ್ರವನ್ನು ತೋರಿಸುವ ಗ್ರಾಫ್ ಇದೆ: + +Polynomial regression + +ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಬಳಸಿ, ನಾವು ಸ್ವಲ್ಪ ಕಡಿಮೆ MSE ಮತ್ತು ಹೆಚ್ಚು ನಿರ್ಧಾರ ಸಹಗುಣಕವನ್ನು ಪಡೆಯಬಹುದು, ಆದರೆ ಬಹಳಷ್ಟು ಅಲ್ಲ. ನಾವು ಇತರ ಲಕ್ಷಣಗಳನ್ನು ಪರಿಗಣಿಸಬೇಕಾಗಿದೆ! + +> ನೀವು ನೋಡಬಹುದು, ಕನಿಷ್ಠ ಕಂಬಳಿ ಬೆಲೆಗಳು ಹ್ಯಾಲೋವೀನ್ ಸುತ್ತಲೂ ಕಂಡುಬರುತ್ತವೆ. ಇದನ್ನು ನೀವು ಹೇಗೆ ವಿವರಿಸಬಹುದು? + +🎃 ಅಭಿನಂದನೆಗಳು, ನೀವು ಈಗ ಪೈ ಕಂಬಳಿಗಳ ಬೆಲೆಯನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಸಹಾಯ ಮಾಡುವ ಮಾದರಿಯನ್ನು ರಚಿಸಿದ್ದೀರಿ. ನೀವು ಬಹುಶಃ ಎಲ್ಲಾ ಕಂಬಳಿ ಪ್ರಕಾರಗಳಿಗೆ ಇದೇ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪುನರಾವರ್ತಿಸಬಹುದು, ಆದರೆ ಅದು ಕಷ್ಟಕರವಾಗಬಹುದು. ಈಗ ನಾವು ನಮ್ಮ ಮಾದರಿಯಲ್ಲಿ ಕಂಬಳಿ ಪ್ರಭೇದವನ್ನು ಹೇಗೆ ಪರಿಗಣಿಸಬೇಕೆಂದು ಕಲಿಯೋಣ! + +## ವರ್ಗೀಕೃತ ಲಕ್ಷಣಗಳು + +ಆದರ್ಶ ಜಗತ್ತಿನಲ್ಲಿ, ನಾವು ಒಂದೇ ಮಾದರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ವಿಭಿನ್ನ ಕಂಬಳಿ ಪ್ರಭೇದಗಳ ಬೆಲೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಯಸುತ್ತೇವೆ. ಆದರೆ, `Variety` ಕಾಲಮ್ `Month` ಮುಂತಾದ ಕಾಲಮ್‌ಗಳಿಗಿಂತ ಸ್ವಲ್ಪ ವಿಭಿನ್ನವಾಗಿದೆ, ಏಕೆಂದರೆ ಅದು ಅಂಕಿ-ಅಂಶಗಳಲ್ಲದ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿದೆ. ಇಂತಹ ಕಾಲಮ್‌ಗಳನ್ನು **ವರ್ಗೀಕೃತ** ಎಂದು ಕರೆಯುತ್ತಾರೆ. + +[![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") + +> 🎥 ವರ್ಗೀಕೃತ ಲಕ್ಷಣಗಳನ್ನು ಬಳಸುವ ಬಗ್ಗೆ ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ಇಲ್ಲಿ ನೀವು ಪ್ರಭೇದದ ಮೇಲೆ ಸರಾಸರಿ ಬೆಲೆ ಹೇಗೆ ಅವಲಂಬಿತವಾಗಿದೆ ಎಂದು ನೋಡಬಹುದು: + +Average price by variety + +ಪ್ರಭೇದವನ್ನು ಪರಿಗಣಿಸಲು, ಮೊದಲು ಅದನ್ನು ಅಂಕಿ ರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಬೇಕಾಗುತ್ತದೆ, ಅಥವಾ **ಎನ್‌ಕೋಡ್** ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಇದನ್ನು ಮಾಡಲು ಹಲವಾರು ವಿಧಾನಗಳಿವೆ: + +* ಸರಳ **ಅಂಕಿ ಎನ್‌ಕೋಡಿಂಗ್** ವಿಭಿನ್ನ ಪ್ರಭೇದಗಳ ಟೇಬಲ್ ರಚಿಸಿ, ನಂತರ ಆ ಟೇಬಲ್‌ನಲ್ಲಿನ ಸೂಚ್ಯಂಕದಿಂದ ಪ್ರಭೇದದ ಹೆಸರನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ಇದು ರೇಖೀಯ ರಿಗ್ರೆಷನ್‌ಗೆ ಉತ್ತಮ ಐಡಿಯಾ ಅಲ್ಲ, ಏಕೆಂದರೆ ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಸೂಚ್ಯಂಕದ ನಿಜವಾದ ಅಂಕಿ ಮೌಲ್ಯವನ್ನು ತೆಗೆದುಕೊಂಡು, ಅದನ್ನು ಫಲಿತಾಂಶಕ್ಕೆ ಸೇರಿಸಿ, ಕೆಲವು ಸಹಗುಣಕದಿಂದ ಗುಣಿಸುತ್ತದೆ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಸೂಚ್ಯಂಕ ಸಂಖ್ಯೆ ಮತ್ತು ಬೆಲೆಯ ನಡುವಿನ ಸಂಬಂಧ ಸ್ಪಷ್ಟವಾಗಿ ಅರೇಖೀಯವಲ್ಲ, ಸೂಚ್ಯಂಕಗಳು ನಿರ್ದಿಷ್ಟ ಕ್ರಮದಲ್ಲಿ ಇರಿಸಿದರೂ ಸಹ. +* **ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡಿಂಗ್** `Variety` ಕಾಲಮ್ ಅನ್ನು 4 ವಿಭಿನ್ನ ಕಾಲಮ್‌ಗಳಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ, ಪ್ರತಿ ಪ್ರಭೇದಕ್ಕೆ ಒಂದು ಕಾಲಮ್. ಪ್ರತಿ ಕಾಲಮ್‌ನಲ್ಲಿ, ಸಂಬಂಧಿಸಿದ ಸಾಲು ಆ ಪ್ರಭೇದಕ್ಕೆ ಸೇರಿದರೆ `1` ಇರುತ್ತದೆ, ಇಲ್ಲದಿದ್ದರೆ `0`. ಇದರರ್ಥ, ರೇಖೀಯ ರಿಗ್ರೆಷನ್‌ನಲ್ಲಿ ನಾಲ್ಕು ಸಹಗುಣಕಗಳು ಇರುತ್ತವೆ, ಪ್ರತಿ ಕಂಬಳಿ ಪ್ರಭೇದಕ್ಕೆ ಒಂದು, ಅದು ಆ ಪ್ರಭೇದಕ್ಕೆ "ಆರಂಭಿಕ ಬೆಲೆ" (ಅಥವಾ "ಹೆಚ್ಚುವರಿ ಬೆಲೆ") ಗೆ ಹೊಣೆಗಾರ. + +ಕೆಳಗಿನ ಕೋಡ್ ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡಿಂಗ್ ಹೇಗೆ ಮಾಡಬಹುದು ಎಂದು ತೋರಿಸುತ್ತದೆ: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡ್ ಮಾಡಿದ ಪ್ರಭೇದವನ್ನು ಇನ್‌ಪುಟ್ ಆಗಿ ಬಳಸಿಕೊಂಡು ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ತರಬೇತಿ ನೀಡಲು, ನಾವು ಸರಿಯಾಗಿ `X` ಮತ್ತು `y` ಡೇಟಾವನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕಾಗುತ್ತದೆ: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +ಮತ್ತೆ ಉಳಿದ ಕೋಡ್ ಮೇಲಿನ ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ತರಬೇತಿಗೆ ಬಳಸಿದಂತೆಯೇ ಇದೆ. ನೀವು ಪ್ರಯತ್ನಿಸಿದರೆ, ಸರಾಸರಿ ಚದರ ದೋಷವು ಸುಮಾರು ಅದೇ ಆಗಿದ್ದು, ಆದರೆ ನಿರ್ಧಾರ ಸಹಗುಣಕವು ಬಹಳ ಹೆಚ್ಚು (~77%) ಆಗಿದೆ ಎಂದು ಕಾಣುತ್ತೀರಿ. ಇನ್ನೂ ನಿಖರವಾದ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಪಡೆಯಲು, ನಾವು ಇನ್ನಷ್ಟು ವರ್ಗೀಕೃತ ಲಕ್ಷಣಗಳನ್ನು ಮತ್ತು ಅಂಕಿ ಲಕ್ಷಣಗಳನ್ನು, ಉದಾಹರಣೆಗೆ `Month` ಅಥವಾ `DayOfYear` ಅನ್ನು ಪರಿಗಣಿಸಬಹುದು. ಒಂದು ದೊಡ್ಡ ಲಕ್ಷಣಗಳ ಸರಣಿಯನ್ನು ಪಡೆಯಲು, ನಾವು `join` ಬಳಸಬಹುದು: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) \ + .join(new_pumpkins['Month']) \ + .join(pd.get_dummies(new_pumpkins['City'])) \ + .join(pd.get_dummies(new_pumpkins['Package'])) +y = new_pumpkins['Price'] +``` + +ಇಲ್ಲಿ ನಾವು `City` ಮತ್ತು `Package` ಪ್ರಕಾರವನ್ನು ಕೂಡ ಪರಿಗಣಿಸುತ್ತೇವೆ, ಇದು ನಮಗೆ MSE 2.84 (10%) ಮತ್ತು ನಿರ್ಧಾರ 0.94 ನೀಡುತ್ತದೆ! + +## ಎಲ್ಲವನ್ನೂ ಒಟ್ಟಿಗೆ ಸೇರಿಸುವುದು + +ಉತ್ತಮ ಮಾದರಿಯನ್ನು ಮಾಡಲು, ನಾವು ಮೇಲಿನ ಉದಾಹರಣೆಯಿಂದ ಸಂಯೋಜಿತ (ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡ್ ಮಾಡಿದ ವರ್ಗೀಕೃತ + ಅಂಕಿ) ಡೇಟಾವನ್ನು ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಜೊತೆಗೆ ಬಳಸಬಹುದು. ನಿಮ್ಮ ಅನುಕೂಲಕ್ಕಾಗಿ ಸಂಪೂರ್ಣ ಕೋಡ್ ಇಲ್ಲಿದೆ: + +```python +# ತರಬೇತಿ ಡೇಟಾವನ್ನು ಸಜ್ಜುಗೊಳಿಸಿ +X = pd.get_dummies(new_pumpkins['Variety']) \ + .join(new_pumpkins['Month']) \ + .join(pd.get_dummies(new_pumpkins['City'])) \ + .join(pd.get_dummies(new_pumpkins['Package'])) +y = new_pumpkins['Price'] + +# ತರಬೇತಿ-ಪರೀಕ್ಷೆ ವಿಭಜನೆ ಮಾಡಿ +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}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +ಇದು ನಮಗೆ ಸುಮಾರು 97% ನಿರ್ಧಾರ ಸಹಗುಣಕ ಮತ್ತು MSE=2.23 (~8% ಭವಿಷ್ಯವಾಣಿ ದೋಷ) ನೀಡಬೇಕು. + +| ಮಾದರಿ | MSE | ನಿರ್ಧಾರ | +|-------|-----|---------| +| `DayOfYear` ರೇಖೀಯ | 2.77 (17.2%) | 0.07 | +| `DayOfYear` ಬಹುಪದ | 2.73 (17.0%) | 0.08 | +| `Variety` ರೇಖೀಯ | 5.24 (19.7%) | 0.77 | +| ಎಲ್ಲಾ ಲಕ್ಷಣಗಳು ರೇಖೀಯ | 2.84 (10.5%) | 0.94 | +| ಎಲ್ಲಾ ಲಕ್ಷಣಗಳು ಬಹುಪದ | 2.23 (8.25%) | 0.97 | + +🏆 ಚೆನ್ನಾಗಿದೆ! ನೀವು ಒಂದೇ ಪಾಠದಲ್ಲಿ ನಾಲ್ಕು ರಿಗ್ರೆಷನ್ ಮಾದರಿಗಳನ್ನು ರಚಿಸಿ, ಮಾದರಿ ಗುಣಮಟ್ಟವನ್ನು 97% ಗೆ ಸುಧಾರಿಸಿದ್ದೀರಿ. ರಿಗ್ರೆಷನ್‌ನ ಅಂತಿಮ ವಿಭಾಗದಲ್ಲಿ, ನೀವು ವರ್ಗಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಷನ್ ಬಗ್ಗೆ ಕಲಿಯುತ್ತೀರಿ. + +--- +## 🚀ಸವಾಲು + +ಈ ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ವಿವಿಧ ಚರಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ, ಸಹಸಂಬಂಧವು ಮಾದರಿ ನಿಖರತೆಗೆ ಹೇಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ ಎಂದು ನೋಡಿ. + +## [ಪಾಠೋತ್ತರ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಈ ಪಾಠದಲ್ಲಿ ನಾವು ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಬಗ್ಗೆ ಕಲಿತೆವು. ಇನ್ನೂ ಕೆಲವು ಪ್ರಮುಖ ರಿಗ್ರೆಷನ್ ಪ್ರಕಾರಗಳಿವೆ. ಸ್ಟೆಪ್ವೈಸ್, ರಿಡ್ಜ್, ಲಾಸ್ಸೋ ಮತ್ತು ಎಲಾಸ್ಟಿಕ್‌ನೆಟ್ ತಂತ್ರಗಳನ್ನು ಓದಿ ತಿಳಿಯಿರಿ. ಇನ್ನಷ್ಟು ಕಲಿಯಲು ಉತ್ತಮ ಕೋರ್ಸ್ [ಸ್ಟ್ಯಾನ್‌ಫೋರ್ಡ್ ಸ್ಟಾಟಿಸ್ಟಿಕಲ್ ಲರ್ನಿಂಗ್ ಕೋರ್ಸ್](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ಆಗಿದೆ. + +## ಹುದ್ದೆ + +[ಮಾದರಿ ರಚಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/3-Linear/assignment.md b/translations/kn/2-Regression/3-Linear/assignment.md new file mode 100644 index 000000000..83238cc96 --- /dev/null +++ b/translations/kn/2-Regression/3-Linear/assignment.md @@ -0,0 +1,27 @@ + +# ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ರಚಿಸಿ + +## ಸೂಚನೆಗಳು + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು ಲೀನಿಯರ್ ಮತ್ತು ಪಾಲಿನೋಮಿಯಲ್ ರೆಗ್ರೆಶನ್ ಎರಡನ್ನೂ ಬಳಸಿಕೊಂಡು ಮಾದರಿಯನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸುವುದು ಎಂದು ತೋರಿಸಲಾಗಿದೆ. ಈ ಜ್ಞಾನವನ್ನು ಬಳಸಿಕೊಂಡು, ಒಂದು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಹುಡುಕಿ ಅಥವಾ Scikit-learn ನ ಒಳಗೊಂಡಿರುವ ಸೆಟ್‌ಗಳಲ್ಲಿ ಒಂದನ್ನು ಬಳಸಿಕೊಂಡು ಹೊಸ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ. ನೀವು ಆಯ್ಕೆಮಾಡಿದ ತಂತ್ರವನ್ನು ನಿಮ್ಮ ನೋಟ್‌ಬುಕ್‌ನಲ್ಲಿ ವಿವರಿಸಿ, ಮತ್ತು ನಿಮ್ಮ ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ಪ್ರದರ್ಶಿಸಿ. ಅದು ನಿಖರವಾಗದಿದ್ದರೆ, ಕಾರಣವನ್ನು ವಿವರಿಸಿ. + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | +| | ಚೆನ್ನಾಗಿ ದಾಖಲೆ ಮಾಡಲಾದ ಪೂರ್ಣ ನೋಟ್‌ಬುಕ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸುತ್ತದೆ | ಪರಿಹಾರ ಅಪೂರ್ಣವಾಗಿದೆ | ಪರಿಹಾರ ದೋಷಪೂರ್ಣ ಅಥವಾ ದೋಷಪೂರಿತವಾಗಿದೆ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/3-Linear/notebook.ipynb b/translations/kn/2-Regression/3-Linear/notebook.ipynb new file mode 100644 index 000000000..bcf122488 --- /dev/null +++ b/translations/kn/2-Regression/3-Linear/notebook.ipynb @@ -0,0 +1,128 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಕಂಬಳಿಪಾಯ ಬೆಲೆ\n", + "\n", + "ಅಗತ್ಯವಾದ ಗ್ರಂಥಾಲಯಗಳು ಮತ್ತು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. ಡೇಟಾವಿನ ಉಪಸಮೂಹವನ್ನು ಹೊಂದಿರುವ ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಡೇಟಾವನ್ನು ಪರಿವರ್ತಿಸಿ:\n", + "\n", + "- ಬಸ್ಸೆಲ್ ಪ್ರಕಾರ ಬೆಲೆ ನಿಗದಿಗೊಳಿಸಿದ ಕಂಬಳಿಪಾಯಗಳನ್ನು ಮಾತ್ರ ಪಡೆಯಿರಿ\n", + "- ದಿನಾಂಕವನ್ನು ತಿಂಗಳಿಗೆ ಪರಿವರ್ತಿಸಿ\n", + "- ಬೆಲೆಯನ್ನು ಉನ್ನತ ಮತ್ತು ಕಡಿಮೆ ಬೆಲೆಯ ಸರಾಸರಿ ಎಂದು ಲೆಕ್ಕಹಾಕಿ\n", + "- ಬೆಲೆಯನ್ನು ಬಸ್ಸೆಲ್ ಪ್ರಮಾಣದ ಪ್ರಕಾರ ಪ್ರತಿಬಿಂಬಿಸುವಂತೆ ಪರಿವರ್ತಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from datetime import datetime\n", + "\n", + "pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n", + "\n", + "pumpkins.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "\n", + "columns_to_select = ['Package', 'Variety', 'City Name', 'Low Price', 'High Price', 'Date']\n", + "pumpkins = pumpkins.loc[:, columns_to_select]\n", + "\n", + "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n", + "\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n", + "\n", + "new_pumpkins = pd.DataFrame(\n", + " {'Month': month, \n", + " 'DayOfYear' : day_of_year, \n", + " 'Variety': pumpkins['Variety'], \n", + " 'City': pumpkins['City Name'], \n", + " 'Package': pumpkins['Package'], \n", + " 'Low Price': pumpkins['Low Price'],\n", + " 'High Price': pumpkins['High Price'], \n", + " 'Price': price})\n", + "\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n", + "\n", + "new_pumpkins.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಮೂಲಭೂತ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ನಮಗೆ ಆಗಸ್ಟ್‌ನಿಂದ ಡಿಸೆಂಬರ್‌ವರೆಗೆ ಮಾತ್ರ ತಿಂಗಳ ಡೇಟಾ ಇದೆ ಎಂದು ನೆನಪಿಸುತ್ತದೆ. ರೇಖೀಯ ರೀತಿಯಲ್ಲಿ ನಿರ್ಣಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ನಾವು ಬಹುಶಃ ಹೆಚ್ಚು ಡೇಟಾ ಬೇಕಾಗಬಹುದು.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter('Month','Price',data=new_pumpkins)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "plt.scatter('DayOfYear','Price',data=new_pumpkins)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3-final" + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "b032d371c75279373507f003439a577e", + "translation_date": "2025-12-19T16:17:43+00:00", + "source_file": "2-Regression/3-Linear/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/3-Linear/solution/Julia/README.md b/translations/kn/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 000000000..44931346e --- /dev/null +++ b/translations/kn/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb b/translations/kn/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb new file mode 100644 index 000000000..cecb5629e --- /dev/null +++ b/translations/kn/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb @@ -0,0 +1,1086 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_3-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "5015d65d61ba75a223bfc56c273aa174", + "translation_date": "2025-12-19T16:27:41+00:00", + "source_file": "2-Regression/3-Linear/solution/R/lesson_3-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# ರೆಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: ರೇಖೀಯ ಮತ್ತು ಬಹುಪದ ರೆಗ್ರೆಶನ್ ಮಾದರಿಗಳು\n" + ], + "metadata": { + "id": "EgQw8osnsUV-" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ಲೀನಿಯರ್ ಮತ್ತು ಪೋಲಿನೋಮಿಯಲ್ ರಿಗ್ರೆಶನ್ ಫಾರ್ ಪಂಪ್ಕಿನ್ ಪ್ರೈಸಿಂಗ್ - ಪಾಠ 3\n", + "

\n", + " \n", + "

ಡಾಸಾನಿ ಮಡಿಪಳ್ಳಿ ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್
\n", + "\n", + "\n", + "\n", + "\n", + "#### ಪರಿಚಯ\n", + "\n", + "ಈವರೆಗೆ ನೀವು ರಿಗ್ರೆಶನ್ ಎಂದರೇನು ಎಂಬುದನ್ನು ಪಂಪ್ಕಿನ್ ಪ್ರೈಸಿಂಗ್ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಸಂಗ್ರಹಿಸಿದ ಮಾದರಿ ಡೇಟಾ ಮೂಲಕ ಅನ್ವೇಷಣೆ ಮಾಡಿದ್ದೀರಿ, ಇದನ್ನು ನಾವು ಈ ಪಾಠದಲ್ಲಿ ಬಳಸಲಿದ್ದೇವೆ. ನೀವು ಇದನ್ನು `ggplot2` ಬಳಸಿ ದೃಶ್ಯೀಕರಿಸಿದ್ದೀರಿ.💪\n", + "\n", + "ಈಗ ನೀವು ಎಂಎಲ್ ರಿಗ್ರೆಶನ್‌ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಹೋಗಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಎರಡು ವಿಧದ ರಿಗ್ರೆಶನ್‌ಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚು ತಿಳಿಯಲಿದ್ದೀರಿ: *ಮೂಲಭೂತ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್* ಮತ್ತು *ಪೋಲಿನೋಮಿಯಲ್ ರಿಗ್ರೆಶನ್*, ಜೊತೆಗೆ ಈ ತಂತ್ರಜ್ಞಾನಗಳ ಹಿಂದೆ ಇರುವ ಕೆಲವು ಗಣಿತ.\n", + "\n", + "> ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ, ನಾವು ಗಣಿತದ ಕನಿಷ್ಠ ಜ್ಞಾನವನ್ನು ಊಹಿಸುತ್ತೇವೆ ಮತ್ತು ಇತರ ಕ್ಷೇತ್ರಗಳಿಂದ ಬರುವ ವಿದ್ಯಾರ್ಥಿಗಳಿಗೆ ಇದನ್ನು ಸುಲಭಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತೇವೆ, ಆದ್ದರಿಂದ ಟಿಪ್ಪಣಿಗಳು, 🧮 ಕರೆಗಳು, ಚಿತ್ರಗಳು ಮತ್ತು ಇತರ ಕಲಿಕಾ ಸಾಧನಗಳನ್ನು ಗಮನಿಸಿ.\n", + "\n", + "#### ತಯಾರಿ\n", + "\n", + "ಒಂದು ಸ್ಮರಣಿಕೆಗಾಗಿ, ನೀವು ಈ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡುತ್ತಿದ್ದೀರಿ ಇದರಿಂದ ಅದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಲು.\n", + "\n", + "- ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು ಖರೀದಿಸಲು ಅತ್ಯುತ್ತಮ ಸಮಯ ಯಾವುದು?\n", + "\n", + "- ಒಂದು ಕೇಸ್ ಮಿನಿಯೇಚರ್ ಪಂಪ್ಕಿನ್‌ಗಳ ಬೆಲೆ ಎಷ್ಟು ನಿರೀಕ್ಷಿಸಬಹುದು?\n", + "\n", + "- ಅವುಗಳನ್ನು ಅರ್ಧ-ಬುಷೆಲ್ ಬಾಸ್ಕೆಟ್‌ಗಳಲ್ಲಿ ಖರೀದಿಸಬೇಕೇ ಅಥವಾ 1 1/9 ಬುಷೆಲ್ ಬಾಕ್ಸ್ ಮೂಲಕವೇ? ನಾವು ಈ ಡೇಟಾದ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಳಹದಿಯನ್ನು ಪರಿಶೀಲಿಸೋಣ.\n", + "\n", + "ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನೀವು ಒಂದು `ಟಿಬಲ್` (ಡೇಟಾ ಫ್ರೇಮ್‌ನ ಆಧುನಿಕ ಮರುಕಲ್ಪನೆ) ರಚಿಸಿ ಮೂಲ ಡೇಟಾಸೆಟ್‌ನ ಭಾಗವನ್ನು ತುಂಬಿದ್ದೀರಿ, ಬೆಲೆಯನ್ನು ಬುಷೆಲ್ ಪ್ರಕಾರ ಮಾನಕೀಕರಿಸಿದ್ದೀರಿ. ಆದರೂ, ನೀವು ಸುಮಾರು 400 ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಸಂಗ್ರಹಿಸಬಹುದಾಗಿತ್ತು ಮತ್ತು ಅದು ಕೇವಲ ಶರದೃತು ತಿಂಗಳುಗಳಿಗೆ ಮಾತ್ರ. ಡೇಟಾದ ಸ್ವಭಾವದ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ವಿವರಗಳನ್ನು ಪಡೆಯಲು ಅದನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುವ ಮೂಲಕ ನೋಡೋಣವೇ? ನೋಡೋಣ... 🕵️‍♀️\n", + "\n", + "ಈ ಕಾರ್ಯಕ್ಕಾಗಿ, ನಾವು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಅಗತ್ಯವಿದೆ:\n", + "\n", + "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜ್‌ಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಮನರಂಜನೆಯಾಗಿ ಮಾಡುತ್ತದೆ!\n", + "\n", + "- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜ್‌ಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ.\n", + "\n", + "- `janitor`: [janitor ಪ್ಯಾಕೇಜ್](https://github.com/sfirke/janitor) ಕಳಪೆ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಲು ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಸರಳ ಸಾಧನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "- `corrplot`: [corrplot ಪ್ಯಾಕೇಜ್](https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html) ಸಹಾಯದಿಂದ ಸಹಸಂಬಂಧ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮೇಲೆ ದೃಶ್ಯಾತ್ಮಕ ಅನ್ವೇಷಣಾ ಸಾಧನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಚರಗಳ ಪುನರ್‌ಕ್ರಮಣೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ ಮತ್ತು ಚರಗಳ ನಡುವೆ ಮರೆಮಾಚಿದ ಮಾದರಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"corrplot\"))`\n", + "\n", + "ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜ್‌ಗಳಿದ್ದರೆ ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ಅವು ಇಲ್ಲದಿದ್ದರೆ ನಿಮ್ಮಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ], + "metadata": { + "id": "WqQPS1OAsg3H" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if (!require(\"pacman\")) install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load(tidyverse, tidymodels, janitor, corrplot)" + ], + "outputs": [], + "metadata": { + "id": "tA4C2WN3skCf", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c06cd805-5534-4edc-f72b-d0d1dab96ac0" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ನಂತರ ಈ ಅದ್ಭುತ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ ನಮ್ಮ ಪ್ರಸ್ತುತ R ಸೆಷನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿರಿಸುವೆವು. (ಇದು ಕೇವಲ ಉದಾಹರಣೆಗೆ, `pacman::p_load()` ಈಗಾಗಲೇ ಅದನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಮಾಡಿದೆ)\n", + "\n", + "## 1. ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ರೇಖೆ\n", + "\n", + "ನೀವು ಪಾಠ 1 ರಲ್ಲಿ ಕಲಿತಂತೆ, ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ವ್ಯಾಯಾಮದ ಗುರಿ ಎಂದರೆ *ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯ* *ರೇಖೆಯನ್ನು* ಚಿತ್ರಿಸಲು ಸಾಧ್ಯವಾಗುವುದು:\n", + "\n", + "- **ಚರಗಳ ಸಂಬಂಧಗಳನ್ನು ತೋರಿಸುವುದು**. ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ತೋರಿಸುವುದು\n", + "\n", + "- **ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದು**. ಹೊಸ ಡೇಟಾ ಪಾಯಿಂಟ್ ಆ ರೇಖೆಯ ಸಂಬಂಧದಲ್ಲಿ ಎಲ್ಲಿ ಬಿದ್ದೀತು ಎಂಬುದರ ಬಗ್ಗೆ ನಿಖರ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದು.\n", + "\n", + "ಈ ರೀತಿಯ ರೇಖೆಯನ್ನು ಚಿತ್ರಿಸಲು, ನಾವು **ಲೀಸ್ಟ್-ಸ್ಕ್ವೇರ್ಸ್ ರಿಗ್ರೆಷನ್** ಎಂಬ ಸಂಖ್ಯಾಶಾಸ್ತ್ರೀಯ ತಂತ್ರವನ್ನು ಬಳಸುತ್ತೇವೆ. `least-squares` ಎಂಬ ಪದವು ಅರ್ಥ ಮಾಡಿಕೊಳ್ಳುವುದು, ರಿಗ್ರೆಷನ್ ರೇಖೆಯ ಸುತ್ತಲೂ ಇರುವ ಎಲ್ಲಾ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ವರ್ಗಮೂಲ ಮಾಡಿ ನಂತರ ಸೇರಿಸುವುದು. ಆದರ್ಶವಾಗಿ, ಅಂತಿಮ ಮೊತ್ತ ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ಇರಬೇಕು, ಏಕೆಂದರೆ ನಾವು ತಪ್ಪುಗಳ ಸಂಖ್ಯೆ ಕಡಿಮೆ ಇರಬೇಕೆಂದು ಬಯಸುತ್ತೇವೆ, ಅಂದರೆ `least-squares`. ಆದ್ದರಿಂದ, ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯ ರೇಖೆ ಎಂದರೆ ವರ್ಗಮೂಲ ತಪ್ಪುಗಳ ಮೊತ್ತಕ್ಕೆ ಅತ್ಯಂತ ಕಡಿಮೆ ಮೌಲ್ಯ ನೀಡುವ ರೇಖೆ - ಆದ್ದರಿಂದ ಇದರ ಹೆಸರು *ಲೀಸ್ಟ್ ಸ್ಕ್ವೇರ್ಸ್ ರಿಗ್ರೆಷನ್*.\n", + "\n", + "ನಾವು ಈ ರೇಖೆಯನ್ನು ಮಾಡುವುದು ಏಕೆಂದರೆ ನಾವು ನಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳಿಂದ ಕನಿಷ್ಠ ಒಟ್ಟು ದೂರವಿರುವ ರೇಖೆಯನ್ನು ಮಾದರಿಯಾಗಿಸಬೇಕೆಂದು ಬಯಸುತ್ತೇವೆ. ನಾವು ಮೊದಲು ವರ್ಗಮೂಲಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ ಏಕೆಂದರೆ ನಾವು ಅದರ ದಿಕ್ಕಿನ ಬದಲು ಅದರ ಪ್ರಮಾಣದ ಬಗ್ಗೆ ಚಿಂತಿಸುತ್ತೇವೆ.\n", + "\n", + "> **🧮 ಗಣಿತವನ್ನು ತೋರಿಸಿ**\n", + ">\n", + "> ಈ ರೇಖೆಯನ್ನು, *ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯ ರೇಖೆ* ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, [ಒಂದು ಸಮೀಕರಣದಿಂದ](https://en.wikipedia.org/wiki/Simple_linear_regression) ವ್ಯಕ್ತಪಡಿಸಬಹುದು:\n", + ">\n", + "> Y = a + bX\n", + ">\n", + "> `X` ಎಂದರೆ '`ವಿವರಣೆ ಚರ` ಅಥವಾ `ಭವಿಷ್ಯವಾಣಿ ಚರ`'. `Y` ಎಂದರೆ '`ಆಧಾರಿತ ಚರ` ಅಥವಾ `ಫಲಿತಾಂಶ`'. ರೇಖೆಯ ತಿರುವು `b` ಆಗಿದ್ದು, `a` ಯು y-ಅಂತರವನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಇದು `X = 0` ಆಗಿರುವಾಗ `Y` ಯ ಮೌಲ್ಯವನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n", + ">\n", + "\n", + "> ![](../../../../../../2-Regression/3-Linear/solution/images/slope.png \"slope = $y/x$\")\n", + " ಜೆನ್ ಲೂಪರ್ ರಚಿಸಿದ ಇನ್ಫೋಗ್ರಾಫಿಕ್\n", + ">\n", + "> ಮೊದಲು, ತಿರುವು `b` ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ.\n", + ">\n", + "> ಬೇರೆ ಪದಗಳಲ್ಲಿ, ನಮ್ಮ ಕಂಬಳಿಯ ಮೂಲ ಪ್ರಶ್ನೆಗೆ ಸಂಬಂಧಿಸಿದಂತೆ: \"ತಿಂಗಳ ಪ್ರಕಾರ ಕಂಬಳಿಯ ಬೆಲೆಯನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡು\", `X` ಬೆಲೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ ಮತ್ತು `Y` ಮಾರಾಟದ ತಿಂಗಳನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n", + ">\n", + "> ![](../../../../../../translated_images/calculation.989aa7822020d9d0ba9fc781f1ab5192f3421be86ebb88026528aef33c37b0d8.kn.png)\n", + " ಜೆನ್ ಲೂಪರ್ ರಚಿಸಿದ ಇನ್ಫೋಗ್ರಾಫಿಕ್\n", + "> \n", + "> Y ಮೌಲ್ಯವನ್ನು ಲೆಕ್ಕಹಾಕಿ. ನೀವು ಸುಮಾರು \\$4 ಪಾವತಿಸುತ್ತಿದ್ದರೆ, ಅದು ಏಪ್ರಿಲ್ ಆಗಿರಬೇಕು!\n", + ">\n", + "> ರೇಖೆಯನ್ನು ಲೆಕ್ಕಹಾಕುವ ಗಣಿತವು ರೇಖೆಯ ತಿರುವನ್ನು ತೋರಿಸಬೇಕು, ಇದು ಅಂತರದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದ್ದು, ಅಂದರೆ `X = 0` ಆಗಿರುವಾಗ `Y` ಎಲ್ಲಿ ಇರುತ್ತದೆ ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n", + ">\n", + "> ಈ ಮೌಲ್ಯಗಳನ್ನು ಲೆಕ್ಕಹಾಕುವ ವಿಧಾನವನ್ನು ನೀವು [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ನೋಡಬಹುದು. ಜೊತೆಗೆ [ಈ ಲೀಸ್ಟ್-ಸ್ಕ್ವೇರ್ಸ್ ಕ್ಯಾಲ್ಕ್ಯುಲೇಟರ್](https://www.mathsisfun.com/data/least-squares-calculator.html) ಗೆ ಭೇಟಿ ನೀಡಿ ಸಂಖ್ಯೆಗಳ ಮೌಲ್ಯಗಳು ರೇಖೆಯನ್ನು ಹೇಗೆ ಪ್ರಭಾವಿಸುತ್ತವೆ ಎಂದು ನೋಡಿ.\n", + "\n", + "ಅಷ್ಟು ಭಯಂಕರವಲ್ಲ, ಅಲ್ಲವೇ? 🤓\n", + "\n", + "#### ಸಹಸಂಬಂಧ\n", + "\n", + "ಮತ್ತೊಂದು ಪದವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕಿದೆ ಅದು ನೀಡಲಾದ X ಮತ್ತು Y ಚರಗಳ ನಡುವಿನ **ಸಹಸಂಬಂಧ ಗುಣಾಂಕ**. ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಬಳಸಿ, ನೀವು ಈ ಗುಣಾಂಕವನ್ನು ತ್ವರಿತವಾಗಿ ದೃಶ್ಯೀಕರಿಸಬಹುದು. ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳು ಸರಿಯಾದ ರೇಖೆಯಲ್ಲಿ ಸೆರೆಯಾದ ಪ್ಲಾಟ್‌ಗೆ ಹೆಚ್ಚಿನ ಸಹಸಂಬಂಧವಿರುತ್ತದೆ, ಆದರೆ X ಮತ್ತು Y ನಡುವೆ ಎಲ್ಲೆಡೆ ಸೆರೆಯಾದ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳ ಪ್ಲಾಟ್‌ಗೆ ಕಡಿಮೆ ಸಹಸಂಬಂಧವಿರುತ್ತದೆ.\n", + "\n", + "ಒಂದು ಉತ್ತಮ ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಮಾದರಿ ಎಂದರೆ ಲೀಸ್ಟ್-ಸ್ಕ್ವೇರ್ಸ್ ರಿಗ್ರೆಷನ್ ವಿಧಾನವನ್ನು ಬಳಸಿ ರಿಗ್ರೆಷನ್ ರೇಖೆಯೊಂದಿಗೆ 1 ಗೆ ಹತ್ತಿರ (0 ಕಿಂತ ಹೆಚ್ಚು) ಇರುವ ಹೆಚ್ಚಿನ ಸಹಸಂಬಂಧ ಗುಣಾಂಕ ಹೊಂದಿರುವ ಮಾದರಿ.\n" + ], + "metadata": { + "id": "cdX5FRpvsoP5" + } + }, + { + "cell_type": "markdown", + "source": [ + "## **2. ಡೇಟಾ ಜೊತೆಗೆ ನೃತ್ಯ: ಮಾದರಿಗಾಗಿ ಬಳಸಲಾಗುವ ಡೇಟಾ ಫ್ರೇಮ್ ರಚನೆ**\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "WdUKXk7Bs8-V" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಅಗತ್ಯ ಲೈಬ್ರರಿಗಳನ್ನು ಮತ್ತು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. ಡೇಟಾವನ್ನು ಡೇಟಾ ಫ್ರೇಮ್‌ಗೆ ಪರಿವರ್ತಿಸಿ, ಇದರಲ್ಲಿ ಡೇಟಾದ ಉಪಸಮೂಹವಿದೆ:\n", + "\n", + "- ಬಸ್ಸೆಲ್ ಪ್ರಕಾರ ಬೆಲೆ ನಿಗದಿಪಡಿಸಿದ ಕಂಬಳಿಗಳನ್ನು ಮಾತ್ರ ಪಡೆಯಿರಿ\n", + "\n", + "- ದಿನಾಂಕವನ್ನು ತಿಂಗಳಾಗಿ ಪರಿವರ್ತಿಸಿ\n", + "\n", + "- ಬೆಲೆಯನ್ನು ಹೈ ಮತ್ತು ಲೋ ಬೆಲೆಗಳ ಸರಾಸರಿ ಆಗಿ ಲೆಕ್ಕಿಸಿ\n", + "\n", + "- ಬೆಲೆಯನ್ನು ಬಸ್ಸೆಲ್ ಪ್ರಮಾಣದ ಪ್ರಕಾರ ಪ್ರತಿಬಿಂಬಿಸುವಂತೆ ಪರಿವರ್ತಿಸಿ\n", + "\n", + "> ನಾವು ಈ ಹಂತಗಳನ್ನು [ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/2-Data/solution/lesson_2-R.ipynb) ಆವರಿಸಿಕೊಂಡಿದ್ದೇವೆ.\n" + ], + "metadata": { + "id": "fMCtu2G2s-p8" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the core Tidyverse packages\n", + "library(tidyverse)\n", + "library(lubridate)\n", + "\n", + "# Import the pumpkins data\n", + "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n", + "\n", + "\n", + "# Get a glimpse and dimensions of the data\n", + "glimpse(pumpkins)\n", + "\n", + "\n", + "# Print the first 50 rows of the data set\n", + "pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "ryMVZEEPtERn" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಶುದ್ಧ ಸಾಹಸದ ಮನೋಭಾವದಲ್ಲಿ, ಕಳಪೆ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಲು ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಸರಳ ಕಾರ್ಯಗಳನ್ನು ಒದಗಿಸುವ [`janitor package`](../../../../../../2-Regression/3-Linear/solution/R/github.com/sfirke/janitor) ಅನ್ನು ಅನ್ವೇಷಿಸೋಣ. ಉದಾಹರಣೆಗೆ, ನಮ್ಮ ಡೇಟಾದ ಕಾಲಮ್ ಹೆಸರುಗಳನ್ನು ನೋಡೋಣ:\n" + ], + "metadata": { + "id": "xcNxM70EtJjb" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Return column names\n", + "pumpkins %>% \n", + " names()" + ], + "outputs": [], + "metadata": { + "id": "5XtpaIigtPfW" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤔 ನಾವು ಇನ್ನೂ ಉತ್ತಮ ಮಾಡಬಹುದು. ಈ ಕಾಲಮ್ ಹೆಸರುಗಳನ್ನು `janitor::clean_names` ಬಳಸಿ [snake_case](https://en.wikipedia.org/wiki/Snake_case) ಸಂಪ್ರದಾಯಕ್ಕೆ ಪರಿವರ್ತಿಸಿ `friendR` ಆಗಿಸೋಣ. ಈ ಫಂಕ್ಷನ್ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಲು: `?clean_names`\n" + ], + "metadata": { + "id": "IbIqrMINtSHe" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Clean names to the snake_case convention\n", + "pumpkins <- pumpkins %>% \n", + " clean_names(case = \"snake\")\n", + "\n", + "# Return column names\n", + "pumpkins %>% \n", + " names()" + ], + "outputs": [], + "metadata": { + "id": "a2uYvclYtWvX" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಬಹಳ tidyR 🧹! ಈಗ, ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಇದ್ದಂತೆ `dplyr` ಬಳಸಿ ಡೇಟಾದೊಂದಿಗೆ ನೃತ್ಯ ಮಾಡೋಣ! 💃\n" + ], + "metadata": { + "id": "HfhnuzDDtaDd" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Select desired columns\n", + "pumpkins <- pumpkins %>% \n", + " select(variety, city_name, package, low_price, high_price, date)\n", + "\n", + "\n", + "\n", + "# Extract the month from the dates to a new column\n", + "pumpkins <- pumpkins %>%\n", + " mutate(date = mdy(date),\n", + " month = month(date)) %>% \n", + " select(-date)\n", + "\n", + "\n", + "\n", + "# Create a new column for average Price\n", + "pumpkins <- pumpkins %>% \n", + " mutate(price = (low_price + high_price)/2)\n", + "\n", + "\n", + "# Retain only pumpkins with the string \"bushel\"\n", + "new_pumpkins <- pumpkins %>% \n", + " filter(str_detect(string = package, pattern = \"bushel\"))\n", + "\n", + "\n", + "# Normalize the pricing so that you show the pricing per bushel, not per 1 1/9 or 1/2 bushel\n", + "new_pumpkins <- new_pumpkins %>% \n", + " mutate(price = case_when(\n", + " str_detect(package, \"1 1/9\") ~ price/(1.1),\n", + " str_detect(package, \"1/2\") ~ price*2,\n", + " TRUE ~ price))\n", + "\n", + "# Relocate column positions\n", + "new_pumpkins <- new_pumpkins %>% \n", + " relocate(month, .before = variety)\n", + "\n", + "\n", + "# Display the first 5 rows\n", + "new_pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "X0wU3gQvtd9f" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಚೆನ್ನಾಗಿದೆ!👌 ಈಗ ನಿಮಗೆ ಹೊಸ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗುವ ಸ್ವಚ್ಛ, ಸುವ್ಯವಸ್ಥಿತ ಡೇಟಾ ಸೆಟ್ ಇದೆ!\n", + "\n", + "ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ಬೇಕೆ?\n" + ], + "metadata": { + "id": "UpaIwaxqth82" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Set theme\n", + "theme_set(theme_light())\n", + "\n", + "# Make a scatter plot of month and price\n", + "new_pumpkins %>% \n", + " ggplot(mapping = aes(x = month, y = price)) +\n", + " geom_point(size = 1.6)\n" + ], + "outputs": [], + "metadata": { + "id": "DXgU-j37tl5K" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಒಂದು ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ನಮಗೆ ಆಗಸ್ಟ್‌ನಿಂದ ಡಿಸೆಂಬರ್ ವರೆಗೆ ಮಾತ್ರ ತಿಂಗಳ ಡೇಟಾ ಇದೆ ಎಂದು ನೆನಪಿಸುತ್ತದೆ. ರೇಖೀಯ ರೀತಿಯಲ್ಲಿ ನಿರ್ಣಯಗಳನ್ನು ಬಿಡಿಸಲು ನಾವು ಬಹುಶಃ ಹೆಚ್ಚು ಡೇಟಾವನ್ನು ಬೇಕಾಗಬಹುದು.\n", + "\n", + "ನಮ್ಮ ಮಾದರೀಕರಣ ಡೇಟಾವನ್ನು ಮತ್ತೆ ನೋಡೋಣ:\n" + ], + "metadata": { + "id": "Ve64wVbwtobI" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Display first 5 rows\n", + "new_pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "HFQX2ng1tuSJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು `city` ಅಥವಾ `package` ಕಾಲಮ್‌ಗಳ ಆಧಾರದ ಮೇಲೆ ಕಂಬಳಿಯ `price` ಅನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಯಸಿದರೆ ಏನು ಆಗುತ್ತದೆ, ಅವುಗಳ ಪ್ರಕಾರವು character ಆಗಿದೆ? ಅಥವಾ ಇನ್ನಷ್ಟು ಸರಳವಾಗಿ, ಉದಾಹರಣೆಗೆ `package` ಮತ್ತು `price` ನಡುವಿನ ಸಹಸಂಬಂಧವನ್ನು (ಇದು ಎರಡೂ ಇನ್ಪುಟ್‌ಗಳು ಸಂಖ್ಯಾತ್ಮಕವಾಗಿರಬೇಕು) ಹೇಗೆ ಕಂಡುಹಿಡಿಯಬಹುದು? 🤷🤷\n", + "\n", + "ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳು ಪಠ್ಯ ಮೌಲ್ಯಗಳಿಗಿಂತ ಸಂಖ್ಯಾತ್ಮಕ ಲಕ್ಷಣಗಳೊಂದಿಗೆ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಆದ್ದರಿಂದ ಸಾಮಾನ್ಯವಾಗಿ ವರ್ಗೀಕೃತ ಲಕ್ಷಣಗಳನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ಪ್ರತಿನಿಧಿಗಳಾಗಿ ಪರಿವರ್ತಿಸಬೇಕಾಗುತ್ತದೆ.\n", + "\n", + "ಇದರಿಂದ, ನಾವು ನಮ್ಮ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾದರಿಯು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಲು ಸುಲಭವಾಗುವಂತೆ ಮರುರೂಪಗೊಳಿಸುವ ಮಾರ್ಗವನ್ನು ಕಂಡುಹಿಡಿಯಬೇಕಾಗುತ್ತದೆ, ಇದನ್ನು `feature engineering` ಎಂದು ಕರೆಯುತ್ತಾರೆ.\n" + ], + "metadata": { + "id": "7hsHoxsStyjJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 3. ಮಾದರಿಗಾಗಿ ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸುವುದು recipes 👩‍🍳👨‍🍳 ಬಳಸಿ\n", + "\n", + "ಮಾದರಿಯು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಲು ಸುಲಭವಾಗುವಂತೆ ಭವಿಷ್ಯವಾಣಿ ಮೌಲ್ಯಗಳನ್ನು ಮರುರೂಪಗೊಳಿಸುವ ಚಟುವಟಿಕೆಗಳನ್ನು `ವೈಶಿಷ್ಟ್ಯ ಎಂಜಿನಿಯರಿಂಗ್` ಎಂದು ಕರೆಯಲಾಗಿದೆ.\n", + "\n", + "ವಿವಿಧ ಮಾದರಿಗಳಿಗೆ ವಿಭಿನ್ನ ಪೂರ್ವಸಿದ್ಧತೆ ಅಗತ್ಯವಿರುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಲೀಸ್ಟ್ ಸ್ಕ್ವೇರ್‌ಗಳು `ಮಾಸ, ವೈವಿಧ್ಯ ಮತ್ತು ನಗರ_ಹೆಸರು` ಮುಂತಾದ `ವರ್ಗೀಕೃತ ಚರಗಳನ್ನು ಎನ್‌ಕೋಡ್ ಮಾಡುವುದು` ಅಗತ್ಯವಿದೆ. ಇದು ಸರಳವಾಗಿ `ವರ್ಗೀಕೃತ ಮೌಲ್ಯಗಳ` ಕಾಲಮ್ ಅನ್ನು ಮೂಲದ ಬದಲಿಗೆ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು `ಸಂಖ್ಯಾತ್ಮಕ ಕಾಲಮ್‌ಗಳಾಗಿ` `ಅನುವಾದಿಸುವುದನ್ನು` ಒಳಗೊಂಡಿದೆ.\n", + "\n", + "ಉದಾಹರಣೆಗೆ, ನಿಮ್ಮ ಡೇಟಾದಲ್ಲಿ ಕೆಳಗಿನ ವರ್ಗೀಕೃತ ವೈಶಿಷ್ಟ್ಯವಿದೆ ಎಂದು فرضಿಸಿ:\n", + "\n", + "| ನಗರ |\n", + "|:-------:|\n", + "| ಡೆನ್ವರ್ |\n", + "| ನೈರೋಬಿ |\n", + "| ಟೋಕಿಯೋ |\n", + "\n", + "ನೀವು ಪ್ರತಿ ವರ್ಗಕ್ಕೆ ವಿಶಿಷ್ಟ ಪೂರ್ಣಾಂಕ ಮೌಲ್ಯವನ್ನು ಬದಲಾಯಿಸಲು *ಕ್ರಮಾಂಕ ಎನ್‌ಕೋಡಿಂಗ್* ಅನ್ನು ಅನ್ವಯಿಸಬಹುದು, ಹೀಗೆ:\n", + "\n", + "| ನಗರ |\n", + "|:----:|\n", + "| 0 |\n", + "| 1 |\n", + "| 2 |\n", + "\n", + "ಮತ್ತು ಅದೇನೂ ನಾವು ನಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಮಾಡಲಿದ್ದೇವೆ!\n", + "\n", + "ಈ ವಿಭಾಗದಲ್ಲಿ, ನಾವು ಇನ್ನೊಂದು ಅದ್ಭುತ Tidymodels ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಅನ್ವೇಷಿಸುವೆವು: [recipes](https://tidymodels.github.io/recipes/) - ಇದು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಒಳಪಡಿಸುವ **ಮುಂಬರುವ** ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಮೂಲತಃ, ಒಂದು ರೆಸಿಪಿ ಎಂದರೆ ಮಾದರಿಗಾಗಿ ಸಿದ್ಧಪಡಿಸಲು ಡೇಟಾ ಸೆಟ್‌ಗೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸುವ ವಸ್ತು.\n", + "\n", + "ಈಗ, ಭವಿಷ್ಯವಾಣಿ ಕಾಲಮ್‌ಗಳಲ್ಲಿನ ಎಲ್ಲಾ ವೀಕ್ಷಣೆಗಳಿಗೆ ವಿಶಿಷ್ಟ ಪೂರ್ಣಾಂಕವನ್ನು ಬದಲಾಯಿಸುವ ಮೂಲಕ ನಮ್ಮ ಡೇಟಾವನ್ನು ಮಾದರಿಗಾಗಿ ಸಿದ್ಧಪಡಿಸುವ ರೆಸಿಪಿಯನ್ನು ರಚಿಸೋಣ:\n" + ], + "metadata": { + "id": "AD5kQbcvt3Xl" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Specify a recipe\n", + "pumpkins_recipe <- recipe(price ~ ., data = new_pumpkins) %>% \n", + " step_integer(all_predictors(), zero_based = TRUE)\n", + "\n", + "\n", + "# Print out the recipe\n", + "pumpkins_recipe" + ], + "outputs": [], + "metadata": { + "id": "BNaFKXfRt9TU" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಅದ್ಭುತ! 👏 ನಾವು ಮೊದಲ ರೆಸಿಪಿಯನ್ನು ರಚಿಸಿದ್ದೇವೆ, ಅದು ಒಂದು ಫಲಿತಾಂಶವನ್ನು (ಬೆಲೆ) ಮತ್ತು ಅದರ ಸಂಬಂಧಿತ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಾ ಭವಿಷ್ಯವಾಣಿ ಕಾಲಮ್‌ಗಳನ್ನು ಪೂರ್ಣಾಂಕಗಳ ಸೆಟ್ ಆಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡಬೇಕು 🙌! ಬನ್ನಿ ಅದನ್ನು ತ್ವರಿತವಾಗಿ ವಿಭಜಿಸೋಣ:\n", + "\n", + "- `recipe()` ಗೆ ಫಾರ್ಮುಲಾ ಸಹಿತ ಕರೆ ಮಾಡುವುದರಿಂದ, `new_pumpkins` ಡೇಟಾವನ್ನು ಉಲ್ಲೇಖವಾಗಿ ಬಳಸಿಕೊಂಡು, ಚರಗಳ *ಪಾತ್ರಗಳನ್ನು* ರೆಸಿಪಿಗೆ ತಿಳಿಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, `price` ಕಾಲಮ್‌ಗೆ `outcome` ಪಾತ್ರವನ್ನು ನೀಡಲಾಗಿದೆ, ಉಳಿದ ಕಾಲಮ್‌ಗಳಿಗೆ `predictor` ಪಾತ್ರವನ್ನು ನೀಡಲಾಗಿದೆ.\n", + "\n", + "- `step_integer(all_predictors(), zero_based = TRUE)` ಎಲ್ಲಾ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು 0 ರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಸಂಖ್ಯೆಗಳ ಸೆಟ್ ಆಗಿ ಪರಿವರ್ತಿಸಲು ಸೂಚಿಸುತ್ತದೆ.\n", + "\n", + "ನೀವು ಈ ರೀತಿಯ ವಿಚಾರಗಳನ್ನು ಹೊಂದಿರಬಹುದು: \"ಇದು ತುಂಬಾ ಕುಲ್!! ಆದರೆ ನಾನು ರೆಸಿಪಿಗಳು ನಿಜವಾಗಿಯೂ ನಾನು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕೆಲಸ ಮಾಡುತ್ತವೆಯೇ ಎಂದು ದೃಢೀಕರಿಸಬೇಕಾದರೆ? 🤔\"\n", + "\n", + "ಅದು ಅದ್ಭುತವಾದ ವಿಚಾರ! ನೀವು ನೋಡುತ್ತೀರಿ, ನಿಮ್ಮ ರೆಸಿಪಿ ವ್ಯಾಖ್ಯಾನವಾದ ನಂತರ, ನೀವು ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪರಿಮಾಣಗಳನ್ನು ಅಂದಾಜಿಸಬಹುದು ಮತ್ತು ನಂತರ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯಬಹುದು. ನೀವು ಸಾಮಾನ್ಯವಾಗಿ Tidymodels ಬಳಸುವಾಗ ಇದನ್ನು ಮಾಡಬೇಕಾಗಿಲ್ಲ (ನಾವು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಸಾಮಾನ್ಯ ಸಂಪ್ರದಾಯವನ್ನು ನೋಡುತ್ತೇವೆ -> `workflows`), ಆದರೆ ನೀವು ರೆಸಿಪಿಗಳು ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕೆಲಸ ಮಾಡುತ್ತವೆಯೇ ಎಂದು ದೃಢೀಕರಿಸಲು ಕೆಲವು ರೀತಿಯ ಮಾನಸಿಕ ಪರಿಶೀಲನೆ ಮಾಡಲು ಬಯಸಿದಾಗ ಇದು ಸಹಾಯಕವಾಗಬಹುದು.\n", + "\n", + "ಅದರಿಗಾಗಿ, ನಿಮಗೆ ಇನ್ನೂ ಎರಡು ಕ್ರಿಯಾಪದಗಳು ಬೇಕಾಗಿವೆ: `prep()` ಮತ್ತು `bake()` ಮತ್ತು ಯಾವಾಗಲೂ ಹಾಗೆಯೇ, ನಮ್ಮ ಸಣ್ಣ R ಸ್ನೇಹಿತರು [`Allison Horst`](https://github.com/allisonhorst/stats-illustrations) ಅವರಿಂದ ನಿಮಗೆ ಇದನ್ನು ಉತ್ತಮವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತಾರೆ!\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n" + ], + "metadata": { + "id": "KEiO0v7kuC9O" + } + }, + { + "cell_type": "markdown", + "source": [ + "[`prep()`](https://recipes.tidymodels.org/reference/prep.html): ತರಬೇತಿ ಸೆಟ್‌ನಿಂದ ಅಗತ್ಯವಾದ ಪರಿಮಾಣಗಳನ್ನು ಅಂದಾಜು ಮಾಡುತ್ತದೆ, ಅವುಗಳನ್ನು ನಂತರ ಇತರ ಡೇಟಾ ಸೆಟ್‌ಗಳಿಗೆ ಅನ್ವಯಿಸಬಹುದು. ಉದಾಹರಣೆಗೆ, ನೀಡಲಾದ ಭವಿಷ್ಯವಾಣಿ ಕಾಲಮ್‌ಗೆ, ಯಾವ ವೀಕ್ಷಣೆಗೆ ಪೂರ್ಣಾಂಕ 0 ಅಥವಾ 1 ಅಥವಾ 2 ಇತ್ಯಾದಿ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ.\n", + "\n", + "[`bake()`](https://recipes.tidymodels.org/reference/bake.html): ಪೂರ್ವಸಿದ್ಧವಾದ ರೆಸಿಪಿಯನ್ನು ತೆಗೆದು ಯಾವುದೇ ಡೇಟಾ ಸೆಟ್‌ಗೆ ಆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.\n", + "\n", + "ಅಂದರೆ, ನಾವು ನಮ್ಮ ರೆಸಿಪಿಗಳನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸಿ ಮತ್ತು ಬೇಕ್ ಮಾಡಿ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳೋಣ, ಅಂದರೆ ಒಳಗೆ, ಭವಿಷ್ಯವಾಣಿ ಕಾಲಮ್‌ಗಳನ್ನು ಮೊದಲು ಎನ್‌ಕೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ ನಂತರ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತದೆ.\n" + ], + "metadata": { + "id": "Q1xtzebuuTCP" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Prep the recipe\n", + "pumpkins_prep <- prep(pumpkins_recipe)\n", + "\n", + "# Bake the recipe to extract a preprocessed new_pumpkins data\n", + "baked_pumpkins <- bake(pumpkins_prep, new_data = NULL)\n", + "\n", + "# Print out the baked data set\n", + "baked_pumpkins %>% \n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "FGBbJbP_uUUn" + } + }, + { + "cell_type": "markdown", + "source": [ + "ವಾಹ್!🥳 ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ ಡೇಟಾ `baked_pumpkins` ನಲ್ಲಿ ಅದರ ಎಲ್ಲಾ ಪೂರ್ವಕಾಲಿಕಗಳು ಎನ್‌ಕೋಡ್ ಆಗಿವೆ ಎಂದು ದೃಢೀಕರಿಸುತ್ತದೆ, ಇದು ನಿಜವಾಗಿಯೂ ನಮ್ಮ ರೆಸಿಪಿ ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಿದ ಪೂರ್ವಪ್ರಕ್ರಿಯೆ ಹಂತಗಳು ನಿರೀಕ್ಷಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಇದರಿಂದ ಓದಲು ಸ್ವಲ್ಪ ಕಷ್ಟವಾಗಬಹುದು ಆದರೆ Tidymodels ಗೆ ಬಹಳ ಹೆಚ್ಚು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸುಲಭವಾಗುತ್ತದೆ! ಯಾವ ವೀಕ್ಷಣೆಯನ್ನು ಸಂಬಂಧಿತ ಪೂರ್ಣಾಂಕಕ್ಕೆ ನಕ್ಷೆ ಮಾಡಲಾಗಿದೆ ಎಂದು ಕಂಡುಹಿಡಿಯಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಿ.\n", + "\n", + "ಇದು ಕೂಡ ಹೇಳಬೇಕಾದದ್ದು, `baked_pumpkins` ಒಂದು ಡೇಟಾ ಫ್ರೇಮ್ ಆಗಿದ್ದು, ಅದರಲ್ಲಿ ನಾವು ಗಣನೆಗಳನ್ನು ನಡೆಸಬಹುದು.\n", + "\n", + "ಉದಾಹರಣೆಗೆ, ನಿಮ್ಮ ಡೇಟಾದ ಎರಡು ಬಿಂದುಗಳ ನಡುವೆ ಉತ್ತಮ ಸಂಬಂಧವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಪ್ರಯತ್ನಿಸೋಣ, ಇದರಿಂದ ಉತ್ತಮ ಭವಿಷ್ಯವಾಣಿ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗಬಹುದು. ಇದಕ್ಕಾಗಿ ನಾವು `cor()` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಫಂಕ್ಷನ್ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ `?cor()` ಟೈಪ್ ಮಾಡಿ.\n" + ], + "metadata": { + "id": "1dvP0LBUueAW" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Find the correlation between the city_name and the price\n", + "cor(baked_pumpkins$city_name, baked_pumpkins$price)\n", + "\n", + "# Find the correlation between the package and the price\n", + "cor(baked_pumpkins$package, baked_pumpkins$price)\n" + ], + "outputs": [], + "metadata": { + "id": "3bQzXCjFuiSV" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಹಾಗಿದ್ದರೆ, ನಗರ ಮತ್ತು ಬೆಲೆಯ ನಡುವೆ ಕೇವಲ ದುರ್ಬಲ ಸಂಬಂಧವಿದೆ. ಆದರೆ ಪ್ಯಾಕೇಜ್ ಮತ್ತು ಅದರ ಬೆಲೆಯ ನಡುವೆ ಸ್ವಲ್ಪ ಉತ್ತಮ ಸಂಬಂಧವಿದೆ. ಅದು ಅರ್ಥವಾಗುತ್ತದೆ, ಅಲ್ಲವೇ? ಸಾಮಾನ್ಯವಾಗಿ, ಉತ್ಪನ್ನದ ಬಾಕ್ಸ್ ದೊಡ್ಡದಾಗಿದ್ದರೆ, ಬೆಲೆ ಹೆಚ್ಚು ಇರುತ್ತದೆ.\n", + "\n", + "ನಾವು ಇದರಲ್ಲಿ ಇದ್ದಾಗ, `corrplot` ಪ್ಯಾಕೇಜ್ ಬಳಸಿ ಎಲ್ಲಾ ಕಾಲಮ್‌ಗಳ ಸಂಬಂಧ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ.\n" + ], + "metadata": { + "id": "BToPWbgjuoZw" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the corrplot package\n", + "library(corrplot)\n", + "\n", + "# Obtain correlation matrix\n", + "corr_mat <- cor(baked_pumpkins %>% \n", + " # Drop columns that are not really informative\n", + " select(-c(low_price, high_price)))\n", + "\n", + "# Make a correlation plot between the variables\n", + "corrplot(corr_mat, method = \"shade\", shade.col = NA, tl.col = \"black\", tl.srt = 45, addCoef.col = \"black\", cl.pos = \"n\", order = \"original\")" + ], + "outputs": [], + "metadata": { + "id": "ZwAL3ksmutVR" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤩🤩 ಬಹಳ ಉತ್ತಮ.\n", + "\n", + "ಈ ಡೇಟಾದ ಬಗ್ಗೆ ಈಗ ಕೇಳಬೇಕಾದ ಒಳ್ಳೆಯ ಪ್ರಶ್ನೆ ಏನೆಂದರೆ: '`ನನಗೆ ನೀಡಲಾದ ಪಂಪ್ಕಿನ್ ಪ್ಯಾಕೇಜ್‌ನ ಬೆಲೆ ಎಷ್ಟು ನಿರೀಕ್ಷಿಸಬಹುದು?`' ಬನ್ನಿ, ಅದಕ್ಕೆ ನೇರವಾಗಿ ಹೋಗೋಣ!\n", + "\n", + "> ಟಿಪ್ಪಣಿ: ನೀವು **`bake()`** ಮೂಲಕ ಪೂರ್ವಸಿದ್ಧ ರೆಸಿಪಿ **`pumpkins_prep`** ಅನ್ನು **`new_data = NULL`** ಜೊತೆ ಬಳಸಿದಾಗ, ನೀವು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ (ಅಂದರೆ ಎನ್‌ಕೋಡ್ ಮಾಡಿದ) ತರಬೇತಿ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯುತ್ತೀರಿ. ಉದಾಹರಣೆಗೆ, ನಿಮಗೆ ಇನ್ನೊಂದು ಡೇಟಾ ಸೆಟ್ ಇದ್ದರೆ, ಪರೀಕ್ಷಾ ಸೆಟ್ ಎಂದುಕೊಳ್ಳಿ, ಮತ್ತು ನೀವು ರೆಸಿಪಿ ಅದನ್ನು ಹೇಗೆ ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸುವುದನ್ನು ನೋಡಲು ಬಯಸಿದರೆ, ನೀವು ಸರಳವಾಗಿ **`pumpkins_prep`** ಅನ್ನು **`new_data = test_set`** ಜೊತೆ bake ಮಾಡುತ್ತೀರಿ.\n", + "\n", + "## 4. ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ\n", + "\n", + "

\n", + " \n", + "

ಡಾಸಾನಿ ಮಡಿಪಳ್ಳಿ ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್
\n" + ], + "metadata": { + "id": "YqXjLuWavNxW" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ ನಾವು ಒಂದು ರೆಸಿಪಿ ರಚಿಸಿದ್ದೇವೆ, ಮತ್ತು ಡೇಟಾ ಸರಿಯಾಗಿ ಪೂರ್ವಪ್ರಕ್ರಿಯೆಗೊಳ್ಳುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಂಡಿದ್ದೇವೆ, ಈಗ ನಾವು ಒಂದು ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸೋಣ ಮತ್ತು ಪ್ರಶ್ನೆಗೆ ಉತ್ತರಿಸೋಣ: `ನನಗೆ ನೀಡಲಾದ ಕಂಬಳಿಯ ಪ್ಯಾಕೇಜಿನ ಬೆಲೆ ಎಷ್ಟು ಇರಬಹುದು?`\n", + "\n", + "#### ತರಬೇತಿ ಸೆಟ್ ಬಳಸಿ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೊಳಿಸಿ\n", + "\n", + "ನೀವು ಈಗಾಗಲೇ ಅರ್ಥಮಾಡಿಕೊಂಡಿರಬಹುದು, *ಬೆಲೆ* ಕಾಲಮ್ `ಫಲಿತಾಂಶ` ಚರವಾಗಿದ್ದು, *ಪ್ಯಾಕೇಜ್* ಕಾಲಮ್ `ಭವಿಷ್ಯವಾಣಿ` ಚರವಾಗಿದೆ.\n", + "\n", + "ಇದನ್ನು ಮಾಡಲು, ಮೊದಲು ಡೇಟಾವನ್ನು 80% ತರಬೇತಿಗೆ ಮತ್ತು 20% ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗೆ ವಿಭಜಿಸೋಣ, ನಂತರ ಭವಿಷ್ಯವಾಣಿ ಕಾಲಮ್ ಅನ್ನು ಪೂರ್ಣಾಂಕಗಳ ಸರಣಿಯಾಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡುವ ರೆಸಿಪಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸೋಣ, ನಂತರ ಮಾದರಿ ನಿರ್ದಿಷ್ಟತೆಯನ್ನು ನಿರ್ಮಿಸೋಣ. ನಾವು ಈಗಾಗಲೇ ಡೇಟಾ ಪೂರ್ವಪ್ರಕ್ರಿಯೆಗೊಳ್ಳುತ್ತದೆ ಎಂದು ತಿಳಿದಿರುವುದರಿಂದ ನಮ್ಮ ರೆಸಿಪಿಯನ್ನು ಪ್ರೆಪ್ ಮತ್ತು ಬೇಕ್ ಮಾಡುವುದಿಲ್ಲ.\n" + ], + "metadata": { + "id": "Pq0bSzCevW-h" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "set.seed(2056)\n", + "# Split the data into training and test sets\n", + "pumpkins_split <- new_pumpkins %>% \n", + " initial_split(prop = 0.8)\n", + "\n", + "\n", + "# Extract training and test data\n", + "pumpkins_train <- training(pumpkins_split)\n", + "pumpkins_test <- testing(pumpkins_split)\n", + "\n", + "\n", + "\n", + "# Create a recipe for preprocessing the data\n", + "lm_pumpkins_recipe <- recipe(price ~ package, data = pumpkins_train) %>% \n", + " step_integer(all_predictors(), zero_based = TRUE)\n", + "\n", + "\n", + "\n", + "# Create a linear model specification\n", + "lm_spec <- linear_reg() %>% \n", + " set_engine(\"lm\") %>% \n", + " set_mode(\"regression\")" + ], + "outputs": [], + "metadata": { + "id": "CyoEh_wuvcLv" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಚೆನ್ನಾಗಿದೆ! ಈಗ ನಮಗೆ ಒಂದು ರೆಸಿಪಿ ಮತ್ತು ಒಂದು ಮಾದರಿ ವಿವರಣೆ ಇದ್ದು, ಅವುಗಳನ್ನು ಒಟ್ಟಿಗೆ ಒಂದು ವಸ್ತುವಾಗಿ ಬಂಡಲ್ ಮಾಡುವ ಮಾರ್ಗವನ್ನು ಕಂಡುಹಿಡಿಯಬೇಕಾಗಿದೆ, ಅದು ಮೊದಲು ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧತೆ ಮಾಡುತ್ತದೆ (ಹಿಂದಿನ ದೃಶ್ಯದಲ್ಲಿ prep+bake), ಪೂರ್ವಸಿದ್ಧತೆ ಮಾಡಿದ ಡೇಟಾದ ಮೇಲೆ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸುತ್ತದೆ ಮತ್ತು ಸಾಧ್ಯವಾದ ನಂತರದ ಪ್ರಕ್ರಿಯೆಗಳಿಗೂ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ನಿಮ್ಮ ಮನಸ್ಸಿಗೆ ಇದು ಹೇಗಿದೆ!🤩\n", + "\n", + "Tidymodels ನಲ್ಲಿ, ಈ ಅನುಕೂಲಕರ ವಸ್ತುವನ್ನು [`workflow`](https://workflows.tidymodels.org/) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಇದು ನಿಮ್ಮ ಮಾದರಿ ಘಟಕಗಳನ್ನು ಅನುಕೂಲಕರವಾಗಿ ಹಿಡಿದಿಡುತ್ತದೆ! Python ನಲ್ಲಿ ಇದನ್ನು *pipelines* ಎಂದು ಕರೆಯುತ್ತೇವೆ.\n", + "\n", + "ಹೀಗಾಗಿ ಎಲ್ಲವನ್ನೂ workflow ಗೆ ಬಂಡಲ್ ಮಾಡೋಣ!📦\n" + ], + "metadata": { + "id": "G3zF_3DqviFJ" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Hold modelling components in a workflow\n", + "lm_wf <- workflow() %>% \n", + " add_recipe(lm_pumpkins_recipe) %>% \n", + " add_model(lm_spec)\n", + "\n", + "# Print out the workflow\n", + "lm_wf" + ], + "outputs": [], + "metadata": { + "id": "T3olroU3v-WX" + } + }, + { + "cell_type": "markdown", + "source": [ + "👌 ಜೊತೆಗೆ, ಒಂದು ವರ್ಕ್‌ಫ್ಲೋವನ್ನು ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವಂತೆ ಅಥವಾ ಹೊಂದಿಸುವಂತೆ ಮಾಡಬಹುದು.\n" + ], + "metadata": { + "id": "zd1A5tgOwEPX" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Train the model\n", + "lm_wf_fit <- lm_wf %>% \n", + " fit(data = pumpkins_train)\n", + "\n", + "# Print the model coefficients learned \n", + "lm_wf_fit" + ], + "outputs": [], + "metadata": { + "id": "NhJagFumwFHf" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಮಾದರಿ ಔಟ್‌ಪುಟ್‌ನಿಂದ, ನಾವು ತರಬೇತಿ ಸಮಯದಲ್ಲಿ ಕಲಿತ ಸಹಗುಣಾಂಕಗಳನ್ನು ನೋಡಬಹುದು. ಅವುಗಳು ನಿಜವಾದ ಮತ್ತು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲಾದ ಚರಗಳ ನಡುವೆ ಒಟ್ಟು ತಪ್ಪು ಕಡಿಮೆ ಆಗುವ ಅತ್ಯುತ್ತಮ ಸರಳರೇಖೆಯ ಸಹಗುಣಾಂಕಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತವೆ.\n", + "\n", + "\n", + "#### ಪರೀಕ್ಷಾ ಸೆಟ್ ಬಳಸಿ ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ\n", + "\n", + "ಮಾದರಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಿತು ಎಂದು ನೋಡಲು ಸಮಯವಾಗಿದೆ 📏! ನಾವು ಇದನ್ನು ಹೇಗೆ ಮಾಡುತ್ತೇವೆ?\n", + "\n", + "ಈಗ ನಾವು ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿದ್ದರಿಂದ, `parsnip::predict()` ಬಳಸಿ test_set ಗೆ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡಬಹುದು. ನಂತರ ನಾವು ಈ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ನಿಜವಾದ ಲೇಬಲ್ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೋಲಿಸಿ ಮಾದರಿ ಎಷ್ಟು ಚೆನ್ನಾಗಿ (ಅಥವಾ ಇಲ್ಲ!) ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ ಎಂದು ಮೌಲ್ಯಮಾಪನ ಮಾಡಬಹುದು.\n", + "\n", + "ಮೊದಲು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗೆ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡೋಣ ಮತ್ತು ನಂತರ ಆ ಕಾಲಮ್ಗಳನ್ನು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗೆ ಜೋಡಿಸೋಣ.\n" + ], + "metadata": { + "id": "_4QkGtBTwItF" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make predictions for the test set\n", + "predictions <- lm_wf_fit %>% \n", + " predict(new_data = pumpkins_test)\n", + "\n", + "\n", + "# Bind predictions to the test set\n", + "lm_results <- pumpkins_test %>% \n", + " select(c(package, price)) %>% \n", + " bind_cols(predictions)\n", + "\n", + "\n", + "# Print the first ten rows of the tibble\n", + "lm_results %>% \n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "UFZzTG0gwTs9" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಹೌದು, ನೀವು ಇತ್ತೀಚೆಗೆ ಒಂದು ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಂಡು ಅದನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಳಸಿದ್ದೀರಿ!🔮 ಇದು ಎಷ್ಟು ಉತ್ತಮವಾಗಿದೆ ಎಂದು ನೋಡೋಣ, ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡೋಣ!\n", + "\n", + "Tidymodels ನಲ್ಲಿ, ನಾವು ಇದನ್ನು `yardstick::metrics()` ಬಳಸಿ ಮಾಡುತ್ತೇವೆ! ರೇಖೀಯ ರಿಗ್ರೆಶನ್‌ಗಾಗಿ, ಕೆಳಗಿನ ಮೆಟ್ರಿಕ್ಸ್‌ಗಳ ಮೇಲೆ ಗಮನಹರಿಸೋಣ:\n", + "\n", + "- `Root Mean Square Error (RMSE)`: [MSE](https://en.wikipedia.org/wiki/Mean_squared_error) ಯ ಚದರ ಮೂಲ. ಇದು ಲೇಬಲ್‌ನ (ಈ ಪ್ರಕರಣದಲ್ಲಿ, ಕಂಬಳಿಯ ಬೆಲೆ) ಅದೇ ಘಟಕದಲ್ಲಿ ಪರಮಾಣು ಮೆಟ್ರಿಕ್ ಅನ್ನು ನೀಡುತ್ತದೆ. ಮೌಲ್ಯವು ಕಡಿಮೆ ಇದ್ದರೆ, ಮಾದರಿ ಉತ್ತಮವಾಗಿದೆ (ಸರಳವಾಗಿ ಹೇಳುವುದಾದರೆ, ಇದು ಭವಿಷ್ಯವಾಣಿಗಳು ತಪ್ಪಾಗಿರುವ ಸರಾಸರಿ ಬೆಲೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ!)\n", + "\n", + "- `Coefficient of Determination (ಸಾಮಾನ್ಯವಾಗಿ R-squared ಅಥವಾ R2 ಎಂದು ಕರೆಯಲ್ಪಡುವುದು)`: ಇದು ಸಾಪೇಕ್ಷ ಮೆಟ್ರಿಕ್ ಆಗಿದ್ದು, ಮೌಲ್ಯವು ಹೆಚ್ಚು ಇದ್ದರೆ, ಮಾದರಿಯ ಹೊಂದಾಣಿಕೆ ಉತ್ತಮವಾಗಿದೆ. ಮೂಲತಃ, ಈ ಮೆಟ್ರಿಕ್ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಮತ್ತು ನಿಜವಾದ ಲೇಬಲ್ ಮೌಲ್ಯಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಮಾದರಿ ಎಷ್ಟು ವಿವರಿಸಬಹುದು ಎಂಬುದನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "0A5MjzM7wW9M" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Evaluate performance of linear regression\n", + "metrics(data = lm_results,\n", + " truth = price,\n", + " estimate = .pred)" + ], + "outputs": [], + "metadata": { + "id": "reJ0UIhQwcEH" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಮಾಡೆಲ್ ಕಾರ್ಯಕ್ಷಮತೆ ಇಲ್ಲಿಗೆ ಹೋಗುತ್ತದೆ. ಪ್ಯಾಕೇಜ್ ಮತ್ತು ಬೆಲೆಯ scatter ಪ್ಲಾಟ್ ಅನ್ನು ದೃಶ್ಯೀಕರಿಸುವ ಮೂಲಕ ನಾವು ಉತ್ತಮ ಸೂಚನೆಯನ್ನು ಪಡೆಯಬಹುದೇ ಎಂದು ನೋಡೋಣ, ನಂತರ ಮಾಡಲಾದ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯ ರೇಖೆಯನ್ನು ಓವರ್‌ಲೆ ಮಾಡೋಣ.\n", + "\n", + "ಇದಕ್ಕೆ ಅರ್ಥ, ನಾವು ಪ್ಯಾಕೇಜ್ ಕಾಲಮ್ ಅನ್ನು ಎನ್‌ಕೋಡ್ ಮಾಡಲು ಟೆಸ್ಟ್ ಸೆಟ್ ಅನ್ನು ತಯಾರಿಸಿ ಬೇಕ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ, ನಂತರ ಇದನ್ನು ನಮ್ಮ ಮಾಡೆಲ್ ಮಾಡಿದ ಭವಿಷ್ಯವಾಣಿಗಳೊಂದಿಗೆ ಬಾಂಧಿಸಬೇಕು.\n" + ], + "metadata": { + "id": "fdgjzjkBwfWt" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Encode package column\n", + "package_encode <- lm_pumpkins_recipe %>% \n", + " prep() %>% \n", + " bake(new_data = pumpkins_test) %>% \n", + " select(package)\n", + "\n", + "\n", + "# Bind encoded package column to the results\n", + "lm_results <- lm_results %>% \n", + " bind_cols(package_encode %>% \n", + " rename(package_integer = package)) %>% \n", + " relocate(package_integer, .after = package)\n", + "\n", + "\n", + "# Print new results data frame\n", + "lm_results %>% \n", + " slice_head(n = 5)\n", + "\n", + "\n", + "# Make a scatter plot\n", + "lm_results %>% \n", + " ggplot(mapping = aes(x = package_integer, y = price)) +\n", + " geom_point(size = 1.6) +\n", + " # Overlay a line of best fit\n", + " geom_line(aes(y = .pred), color = \"orange\", size = 1.2) +\n", + " xlab(\"package\")\n", + " \n" + ], + "outputs": [], + "metadata": { + "id": "R0nw719lwkHE" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಅದ್ಭುತ! ನೀವು ನೋಡಬಹುದು, ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿ ಪ್ಯಾಕೇಜ್ ಮತ್ತು ಅದರ ಸಂಬಂಧಿತ ಬೆಲೆಯ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಚೆನ್ನಾಗಿ ಸಾಮಾನ್ಯಗೊಳಿಸುವುದಿಲ್ಲ.\n", + "\n", + "🎃 ಅಭಿನಂದನೆಗಳು, ನೀವು ಕೆಲವು ಬಗೆಯ ಕಂಬಳಿಗಳ ಬೆಲೆಯನ್ನು ಊಹಿಸಲು ಸಹಾಯ ಮಾಡುವ ಮಾದರಿಯನ್ನು ಸೃಷ್ಟಿಸಿದ್ದೀರಿ. ನಿಮ್ಮ ಹಬ್ಬದ ಕಂಬಳಿ ತೋಟ ಸುಂದರವಾಗಿರುತ್ತದೆ. ಆದರೆ ನೀವು ಬಹುಶಃ ಉತ್ತಮ ಮಾದರಿಯನ್ನು ರಚಿಸಬಹುದು!\n", + "\n", + "## 5. ಬಹುಪದ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ\n", + "\n", + "

\n", + " \n", + "

ದಾಸನಿ ಮಡಿಪಳ್ಳಿ ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "HOCqJXLTwtWI" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಕೆಲವೊಮ್ಮೆ ನಮ್ಮ ಡೇಟಾದಲ್ಲಿ ರೇಖೀಯ ಸಂಬಂಧವಿರದಿರಬಹುದು, ಆದರೆ ನಾವು ಇನ್ನೂ ಫಲಿತಾಂಶವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ನಮಗೆ ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ರೇಖೀಯವಲ್ಲದ ಸಂಬಂಧಗಳಿಗೆ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಸಹಾಯ ಮಾಡಬಹುದು.\n", + "\n", + "ಉದಾಹರಣೆಗೆ, ನಮ್ಮ ಕಂಬಳಿಗಳ ಡೇಟಾ ಸೆಟ್‌ನ ಪ್ಯಾಕೇಜ್ ಮತ್ತು ಬೆಲೆಯ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ. ಕೆಲವೊಮ್ಮೆ ಚರಗಳ ನಡುವೆ ರೇಖೀಯ ಸಂಬಂಧವಿರುತ್ತದೆ - ಕಂಬಳಿಯ ವಾಲ್ಯೂಮ್ ದೊಡ್ಡದಾದಂತೆ ಬೆಲೆ ಹೆಚ್ಚಾಗುತ್ತದೆ - ಆದರೆ ಕೆಲವೊಮ್ಮೆ ಈ ಸಂಬಂಧಗಳನ್ನು ಸಮತಲ ಅಥವಾ ಸರಳ ರೇಖೆಯಾಗಿ ಚಿತ್ರಿಸಲಾಗುವುದಿಲ್ಲ.\n", + "\n", + "> ✅ ಇಲ್ಲಿ [ಇನ್ನಷ್ಟು ಉದಾಹರಣೆಗಳು](https://online.stat.psu.edu/stat501/lesson/9/9.8) ಇವೆ, ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಬಳಸಬಹುದಾದ ಡೇಟಾಗಳಿಗೆ\n", + ">\n", + "> ಹಿಂದಿನ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ವೈವಿಧ್ಯದಿಂದ ಬೆಲೆಯ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಮತ್ತೊಮ್ಮೆ ನೋಡಿ. ಈ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ಅನ್ನು ಅವಶ್ಯಕವಾಗಿ ಸರಳ ರೇಖೆಯಿಂದ ವಿಶ್ಲೇಷಿಸಬೇಕೆಂದು ತೋರುತ್ತದೆಯೇ? ಬಹುಶಃ ಅಲ್ಲ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಪ್ರಯತ್ನಿಸಬಹುದು.\n", + ">\n", + "> ✅ ಬಹುಪದೀಯಗಳು ಗಣಿತೀಯ ಅಭಿವ್ಯಕ್ತಿಗಳು, ಅವು ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಚರಗಳು ಮತ್ತು ಗುಣಾಂಕಗಳನ್ನು ಹೊಂದಿರಬಹುದು\n", + "\n", + "#### ತರಬೇತಿ ಸೆಟ್ ಬಳಸಿ ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ\n", + "\n", + "ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ *ವಕ್ರ ರೇಖೆ* ರಚಿಸಿ ರೇಖೀಯವಲ್ಲದ ಡೇಟಾಗೆ ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಯನ್ನು ನೀಡುತ್ತದೆ.\n", + "\n", + "ಬಹುಪದೀಯ ಮಾದರಿ ಭವಿಷ್ಯವಾಣಿಯಲ್ಲಿ ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ತೋರಿಸುವುದೇ ಎಂದು ನೋಡೋಣ. ನಾವು ಹಿಂದಿನಂತೆ ಸ್ವಲ್ಪ ಸಮಾನ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಅನುಸರಿಸುವೆವು:\n", + "\n", + "- ನಮ್ಮ ಡೇಟಾವನ್ನು ಮಾದರಿಗಾಗಿ ಸಿದ್ಧಪಡಿಸಲು ಮಾಡಬೇಕಾದ ಪೂರ್ವಪ್ರಕ್ರಿಯೆಗಳ ಹಂತಗಳನ್ನು ಸೂಚಿಸುವ ರೆಸಿಪಿ ರಚಿಸಿ, ಅಂದರೆ: ಭವಿಷ್ಯವಾಣಿಕಾರರನ್ನು ಎನ್‌ಕೋಡ್ ಮಾಡುವುದು ಮತ್ತು ಡಿಗ್ರಿ *n* ರ ಬಹುಪದೀಯಗಳನ್ನು ಲೆಕ್ಕಹಾಕುವುದು\n", + "\n", + "- ಮಾದರಿ ನಿರ್ದಿಷ್ಟೀಕರಣವನ್ನು ನಿರ್ಮಿಸಿ\n", + "\n", + "- ರೆಸಿಪಿ ಮತ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟೀಕರಣವನ್ನು ವರ್ಕ್‌ಫ್ಲೋದಲ್ಲಿ ಸಂಯೋಜಿಸಿ\n", + "\n", + "- ವರ್ಕ್‌ಫ್ಲೋವನ್ನು ಹೊಂದಿಸಿ ಮಾದರಿಯನ್ನು ರಚಿಸಿ\n", + "\n", + "- ಪರೀಕ್ಷಾ ಡೇಟಾದ ಮೇಲೆ ಮಾದರಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ\n", + "\n", + "ನೇರವಾಗಿ ಪ್ರಾರಂಭಿಸೋಣ!\n" + ], + "metadata": { + "id": "VcEIpRV9wzYr" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Specify a recipe\r\n", + "poly_pumpkins_recipe <-\r\n", + " recipe(price ~ package, data = pumpkins_train) %>%\r\n", + " step_integer(all_predictors(), zero_based = TRUE) %>% \r\n", + " step_poly(all_predictors(), degree = 4)\r\n", + "\r\n", + "\r\n", + "# Create a model specification\r\n", + "poly_spec <- linear_reg() %>% \r\n", + " set_engine(\"lm\") %>% \r\n", + " set_mode(\"regression\")\r\n", + "\r\n", + "\r\n", + "# Bundle recipe and model spec into a workflow\r\n", + "poly_wf <- workflow() %>% \r\n", + " add_recipe(poly_pumpkins_recipe) %>% \r\n", + " add_model(poly_spec)\r\n", + "\r\n", + "\r\n", + "# Create a model\r\n", + "poly_wf_fit <- poly_wf %>% \r\n", + " fit(data = pumpkins_train)\r\n", + "\r\n", + "\r\n", + "# Print learned model coefficients\r\n", + "poly_wf_fit\r\n", + "\r\n", + " " + ], + "outputs": [], + "metadata": { + "id": "63n_YyRXw3CC" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ\n", + "\n", + "👏👏ನೀವು ಒಂದು ಬಹುಪದ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಬನ್ನಿ ಪರೀಕ್ಷಾ ಸೆಟ್ ಮೇಲೆ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡೋಣ!\n" + ], + "metadata": { + "id": "-LHZtztSxDP0" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make price predictions on test data\r\n", + "poly_results <- poly_wf_fit %>% predict(new_data = pumpkins_test) %>% \r\n", + " bind_cols(pumpkins_test %>% select(c(package, price))) %>% \r\n", + " relocate(.pred, .after = last_col())\r\n", + "\r\n", + "\r\n", + "# Print the results\r\n", + "poly_results %>% \r\n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "YUFpQ_dKxJGx" + } + }, + { + "cell_type": "markdown", + "source": [ + "ವು-ಹೂ, ನಾವು `yardstick::metrics()` ಬಳಸಿ ಮಾದರಿಯು test_set ಮೇಲೆ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಿತು ಎಂದು ಮೌಲ್ಯಮಾಪನ ಮಾಡೋಣ.\n" + ], + "metadata": { + "id": "qxdyj86bxNGZ" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "metrics(data = poly_results, truth = price, estimate = .pred)" + ], + "outputs": [], + "metadata": { + "id": "8AW5ltkBxXDm" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤩🤩 ಬಹಳ ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆ.\n", + "\n", + "`rmse` ಸುಮಾರು 7 ರಿಂದ ಸುಮಾರು 3 ಕ್ಕೆ ಇಳಿದಿದೆ, ಇದು ನಿಜವಾದ ಬೆಲೆ ಮತ್ತು ಊಹಿಸಲಾದ ಬೆಲೆಯ ನಡುವೆ ಕಡಿಮೆ ದೋಷವಿರುವ ಸೂಚನೆ. ನೀವು ಇದನ್ನು *ಸಡಿಲವಾಗಿ* ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದು ಎಂದರೆ ಸರಾಸರಿಯಾಗಿ, ತಪ್ಪು ಊಹೆಗಳು ಸುಮಾರು \\$3 ದಿಂದ ತಪ್ಪಾಗಿವೆ. `rsq` ಸುಮಾರು 0.4 ರಿಂದ 0.8 ಕ್ಕೆ ಏರಿದೆ.\n", + "\n", + "ಈ ಎಲ್ಲಾ ಅಳತೆಗಳು ಬಹುಪದ ಮಾದರಿ ರೇಖೀಯ ಮಾದರಿಗಿಂತ ಬಹಳ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಸೂಚಿಸುತ್ತವೆ. ಚೆನ್ನಾಗಿದೆ!\n", + "\n", + "ನಾವು ಇದನ್ನು ದೃಶ್ಯೀಕರಿಸಬಹುದೇ ನೋಡೋಣ!\n" + ], + "metadata": { + "id": "6gLHNZDwxYaS" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Bind encoded package column to the results\r\n", + "poly_results <- poly_results %>% \r\n", + " bind_cols(package_encode %>% \r\n", + " rename(package_integer = package)) %>% \r\n", + " relocate(package_integer, .after = package)\r\n", + "\r\n", + "\r\n", + "# Print new results data frame\r\n", + "poly_results %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "\r\n", + "# Make a scatter plot\r\n", + "poly_results %>% \r\n", + " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n", + " geom_point(size = 1.6) +\r\n", + " # Overlay a line of best fit\r\n", + " geom_line(aes(y = .pred), color = \"midnightblue\", size = 1.2) +\r\n", + " xlab(\"package\")\r\n" + ], + "outputs": [], + "metadata": { + "id": "A83U16frxdF1" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನೀವು ನಿಮ್ಮ ಡೇಟಾಗೆ ಉತ್ತಮವಾಗಿ ಹೊಂದಿಕೊಳ್ಳುವ ವಕ್ರ ರೇಖೆಯನ್ನು ನೋಡಬಹುದು! 🤩\n", + "\n", + "ನೀವು ಇದನ್ನು ಇನ್ನಷ್ಟು ಸ್ಮೂತ್ ಆಗಿಸಲು `geom_smooth` ಗೆ ಪೋಲಿನೋಮಿಯಲ್ ಸೂತ್ರವನ್ನು ಹೀಗೆ ಪಾಸ್ ಮಾಡಬಹುದು:\n" + ], + "metadata": { + "id": "4U-7aHOVxlGU" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make a scatter plot\r\n", + "poly_results %>% \r\n", + " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n", + " geom_point(size = 1.6) +\r\n", + " # Overlay a line of best fit\r\n", + " geom_smooth(method = lm, formula = y ~ poly(x, degree = 4), color = \"midnightblue\", size = 1.2, se = FALSE) +\r\n", + " xlab(\"package\")" + ], + "outputs": [], + "metadata": { + "id": "5vzNT0Uexm-w" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಮೃದುವಾದ ವಕ್ರರೇಖೆಯಂತೆ!🤩\n", + "\n", + "ಹೊಸ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವ ವಿಧಾನ ಇಲ್ಲಿದೆ:\n" + ], + "metadata": { + "id": "v9u-wwyLxq4G" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make a hypothetical data frame\r\n", + "hypo_tibble <- tibble(package = \"bushel baskets\")\r\n", + "\r\n", + "# Make predictions using linear model\r\n", + "lm_pred <- lm_wf_fit %>% predict(new_data = hypo_tibble)\r\n", + "\r\n", + "# Make predictions using polynomial model\r\n", + "poly_pred <- poly_wf_fit %>% predict(new_data = hypo_tibble)\r\n", + "\r\n", + "# Return predictions in a list\r\n", + "list(\"linear model prediction\" = lm_pred, \r\n", + " \"polynomial model prediction\" = poly_pred)\r\n" + ], + "outputs": [], + "metadata": { + "id": "jRPSyfQGxuQv" + } + }, + { + "cell_type": "markdown", + "source": [ + "`ಪಾಲಿನೋಮಿಯಲ್ ಮಾದರಿ` ಭವಿಷ್ಯವಾಣಿ ಅರ್ಥಪೂರ್ಣವಾಗಿದೆ, `ಬೆಲೆ` ಮತ್ತು `ಪ್ಯಾಕೇಜ್`ಗಳ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್‌ಗಳನ್ನು ಗಮನಿಸಿದರೆ! ಮತ್ತು, ಇದು ಹಿಂದಿನ ಮಾದರಿಗಿಂತ ಉತ್ತಮ ಮಾದರಿ ಆಗಿದ್ದರೆ, ಅದೇ ಡೇಟಾವನ್ನು ನೋಡಿದಾಗ, ನೀವು ಈ ಹೆಚ್ಚು ದುಬಾರಿ ಕಂಬಳಿಗಳನ್ನು ಬಜೆಟ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ!\n", + "\n", + "🏆 ಚೆನ್ನಾಗಿದೆ! ನೀವು ಒಂದು ಪಾಠದಲ್ಲಿ ಎರಡು ರಿಗ್ರೆಷನ್ ಮಾದರಿಗಳನ್ನು ರಚಿಸಿದ್ದೀರಿ. ರಿಗ್ರೆಷನ್‌ನ ಅಂತಿಮ ವಿಭಾಗದಲ್ಲಿ, ವರ್ಗಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಷನ್ ಬಗ್ಗೆ ತಿಳಿಯುತ್ತೀರಿ.\n", + "\n", + "## **🚀ಸವಾಲು**\n", + "\n", + "ಈ ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ವಿವಿಧ ಚರಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ, ಸಹಸಂಬಂಧವು ಮಾದರಿ ನಿಖರತೆಗೆ ಹೇಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ ಎಂದು ನೋಡಿ.\n", + "\n", + "## [**ಪಾಠೋತ್ತರ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)\n", + "\n", + "## **ಪುನರ್ ಪರಿಶೀಲನೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ**\n", + "\n", + "ಈ ಪಾಠದಲ್ಲಿ ನಾವು ಲೀನಿಯರ್ ರಿಗ್ರೆಷನ್ ಬಗ್ಗೆ ಕಲಿತೆವು. ಇನ್ನೂ ಕೆಲವು ಪ್ರಮುಖ ರಿಗ್ರೆಷನ್ ಪ್ರಕಾರಗಳಿವೆ. ಸ್ಟೆಪ್ವೈಸ್, ರಿಡ್ಜ್, ಲಾಸ್ಸೋ ಮತ್ತು ಎಲಾಸ್ಟಿಕ್‌ನೆಟ್ ತಂತ್ರಗಳನ್ನು ಓದಿ ತಿಳಿಯಿರಿ. ಹೆಚ್ಚಿನ ಅಧ್ಯಯನಕ್ಕೆ ಉತ್ತಮ ಕೋರ್ಸ್ [ಸ್ಟ್ಯಾನ್‌ಫರ್ಡ್ ಸ್ಟಾಟಿಸ್ಟಿಕಲ್ ಲರ್ನಿಂಗ್ ಕೋರ್ಸ್](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ಆಗಿದೆ.\n", + "\n", + "ಅದ್ಭುತ ಟಿಡಿಮೋಡಲ್ಸ್ ಫ್ರೇಮ್ವರ್ಕ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದನ್ನು ಇನ್ನಷ್ಟು ತಿಳಿಯಲು, ದಯವಿಟ್ಟು ಕೆಳಗಿನ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಪರಿಶೀಲಿಸಿ:\n", + "\n", + "- ಟಿಡಿಮೋಡಲ್ಸ್ ವೆಬ್‌ಸೈಟ್: [ಟಿಡಿಮೋಡಲ್ಸ್‌ನೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ](https://www.tidymodels.org/start/)\n", + "\n", + "- ಮ್ಯಾಕ್ಸ್ ಕುಹ್ನ್ ಮತ್ತು ಜೂಲಿಯಾ ಸಿಲ್ಜ್, [*R ನೊಂದಿಗೆ ಟಿಡಿ ಮಾದರೀಕರಣ*](https://www.tmwr.org/)*.*\n", + "\n", + "###### **ಧನ್ಯವಾದಗಳು:**\n", + "\n", + "[ಅಲಿಸನ್ ಹೋರ್ಸ್ಟ್](https://twitter.com/allison_horst?lang=en) ಅವರಿಗೆ, R ಅನ್ನು ಹೆಚ್ಚು ಆತಿಥ್ಯಪೂರ್ಣ ಮತ್ತು ಆಕರ್ಷಕವಾಗಿಸುವ ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ. ಅವರ ಇನ್ನಷ್ಟು ಚಿತ್ರಣಗಳನ್ನು ಅವರ [ಗ್ಯಾಲರಿ](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) ನಲ್ಲಿ ಕಂಡುಹಿಡಿಯಿರಿ.\n" + ], + "metadata": { + "id": "8zOLOWqMxzk5" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/2-Regression/3-Linear/solution/notebook.ipynb b/translations/kn/2-Regression/3-Linear/solution/notebook.ipynb new file mode 100644 index 000000000..9f35d1479 --- /dev/null +++ b/translations/kn/2-Regression/3-Linear/solution/notebook.ipynb @@ -0,0 +1,1117 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಕಂಬಳಿಯ ಬೆಲೆಗೆ ರೇಖೀಯ ಮತ್ತು ಬಹುಪದ ರಿಗ್ರೆಷನ್ - ಪಾಠ 3\n", + "\n", + "ಅಗತ್ಯ ಲೈಬ್ರರಿಗಳು ಮತ್ತು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. ಡೇಟಾವನ್ನು ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಪರಿವರ್ತಿಸಿ, ಡೇಟಾದ ಉಪಸಮೂಹವನ್ನು ಒಳಗೊಂಡಂತೆ:\n", + "\n", + "- ಬಸ್ಸೆಲ್ ಪ್ರಕಾರ ಬೆಲೆಯಾದ ಕಂಬಳಿಗಳನ್ನು ಮಾತ್ರ ಪಡೆಯಿರಿ\n", + "- ದಿನಾಂಕವನ್ನು ತಿಂಗಳಿಗೆ ಪರಿವರ್ತಿಸಿ\n", + "- ಬೆಲೆಯನ್ನು ಉನ್ನತ ಮತ್ತು ಕಡಿಮೆ ಬೆಲೆಯ ಸರಾಸರಿ ಎಂದು ಲೆಕ್ಕಿಸಿ\n", + "- ಬೆಲೆಯನ್ನು ಬಸ್ಸೆಲ್ ಪ್ರಮಾಣದ ಪ್ರಕಾರ ಪ್ರತಿಬಿಂಬಿಸುವಂತೆ ಪರಿವರ್ತಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
0BALTIMORENaN24 inch binsNaNNaNNaN4/29/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
1BALTIMORENaN24 inch binsNaNNaNNaN5/6/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
2BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
3BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
4BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN11/5/1690.0100.090.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade Date \\\n", + "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n", + "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n", + "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n", + "\n", + " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n", + "0 270.0 280.0 270.0 ... NaN NaN NaN \n", + "1 270.0 280.0 270.0 ... NaN NaN NaN \n", + "2 160.0 160.0 160.0 ... NaN NaN NaN \n", + "3 160.0 160.0 160.0 ... NaN NaN NaN \n", + "4 90.0 100.0 90.0 ... NaN NaN NaN \n", + "\n", + " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n", + "0 NaN NaN NaN E NaN NaN NaN \n", + "1 NaN NaN NaN E NaN NaN NaN \n", + "2 NaN NaN NaN N NaN NaN NaN \n", + "3 NaN NaN NaN N NaN NaN NaN \n", + "4 NaN NaN NaN N NaN NaN NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from datetime import datetime\n", + "\n", + "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n", + "pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MonthDayOfYearVarietyCityPackageLow PriceHigh PricePrice
709267PIE TYPEBALTIMORE1 1/9 bushel cartons15.015.013.636364
719267PIE TYPEBALTIMORE1 1/9 bushel cartons18.018.016.363636
7210274PIE TYPEBALTIMORE1 1/9 bushel cartons18.018.016.363636
7310274PIE TYPEBALTIMORE1 1/9 bushel cartons17.017.015.454545
7410281PIE TYPEBALTIMORE1 1/9 bushel cartons15.015.013.636364
\n", + "
" + ], + "text/plain": [ + " Month DayOfYear Variety City Package Low Price \\\n", + "70 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 \n", + "71 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 \n", + "72 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 \n", + "73 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 17.0 \n", + "74 10 281 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 \n", + "\n", + " High Price Price \n", + "70 15.0 13.636364 \n", + "71 18.0 16.363636 \n", + "72 18.0 16.363636 \n", + "73 17.0 15.454545 \n", + "74 15.0 13.636364 " + ] + }, + "execution_count": 168, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "\n", + "new_columns = ['Package', 'Variety', 'City Name', 'Month', 'Low Price', 'High Price', 'Date']\n", + "pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)\n", + "\n", + "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n", + "\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n", + "\n", + "new_pumpkins = pd.DataFrame(\n", + " {'Month': month, \n", + " 'DayOfYear' : day_of_year, \n", + " 'Variety': pumpkins['Variety'], \n", + " 'City': pumpkins['City Name'], \n", + " 'Package': pumpkins['Package'], \n", + " 'Low Price': pumpkins['Low Price'],\n", + " 'High Price': pumpkins['High Price'], \n", + " 'Price': price})\n", + "\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n", + "\n", + "new_pumpkins.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಒಂದು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ನಮಗೆ ಆಗಸ್ಟ್‌ನಿಂದ ಡಿಸೆಂಬರ್‌ವರೆಗೆ ಮಾತ್ರ ತಿಂಗಳ ಡೇಟಾ ಇದೆ ಎಂದು ನೆನಪಿಸುತ್ತದೆ. ರೇಖೀಯ ರೀತಿಯಲ್ಲಿ ನಿರ್ಣಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ನಾವು ಬಹುಶಃ ಹೆಚ್ಚು ಡೇಟಾ ಬೇಕಾಗಬಹುದು.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 169, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "new_pumpkins.plot.scatter('Month','Price')" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 170, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "new_pumpkins.plot.scatter('DayOfYear','Price')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನೋಡೋಣ ಇದರಲ್ಲಿ ಸಂಬಂಧವಿದೆಯೇ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.14878293554077535\n", + "-0.16673322492745407\n" + ] + } + ], + "source": [ + "print(new_pumpkins['Month'].corr(new_pumpkins['Price']))\n", + "print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಸಂಬಂಧವು ತುಂಬಾ ಸಣ್ಣದಾಗಿರುವಂತೆ ಕಾಣುತ್ತದೆ, ಆದರೆ ಇನ್ನೊಂದು ಹೆಚ್ಚು ಪ್ರಮುಖ ಸಂಬಂಧವಿದೆ - ಏಕೆಂದರೆ ಮೇಲಿನ ಚಿತ್ರದಲ್ಲಿ ಬೆಲೆ ಬಿಂದುಗಳು ಹಲವಾರು ವಿಭಿನ್ನ ಗುಂಪುಗಳನ್ನು ಹೊಂದಿವೆ ಎಂದು ತೋರುತ್ತದೆ. ಬೇರೆಯಾದ ಹಬ್ಬುಗಳ ವಿವಿಧ ಪ್ರಭೇದಗಳನ್ನು ತೋರಿಸುವ ಚಿತ್ರವನ್ನು ಮಾಡೋಣ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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5sxSZs68nu9975ccemg3RBzH3RbOOOMMrr32Wh577DHASb8sEnpOPGmZVRv1hg8/kZqaLyPqff755yxbtozbbrutwTZt2jSWLl3KF198wbx58zj55JMZP348AB07duThhx9ueNIAOPXUU1m8eDH79u1jx44dfP755xQWFja7V5cuXTjttNNYsGBBg+2pp55q+Fs/99xznHfeeVxyySURZ0kfffTRdOzYkc2bN0f7Z4mJDRs20KdPn4bjEfE+ymKO30gCBQXN/+H37XPsXjF5cnT21ojUqnfs5UB/YJy7bz1u1bKeQ72z2b17NytWrOCEE06IqHfZZcVs27aZnTu3ce65TohI1Vl0/eabb24IF0yZMiWixvHHH88nn3wCOD/MwZP4y8vv55JLCjnpJEdn/fr1De8Fp5AuLCxk/vz5zbRFGvXee+9VvvnNyRHTPK9evbohDFJPfUhk1apVrFq1ilGjRoVcM3DgQHbs2MG2bdvc+wljx47ltdde48UXX2TixIkR611cXNzg1NevX8+aNWsa0krX/+AWFxdHXAPhgw8+4Oijj+awww4L+/6UKVMa/jY333xzxHKEI9xnd/3111NSUsIZZ5zBHXfcEfJZxIqFeoyEk5/vxN1LSpyW/r59zrGXyyxMmODE+INWG2T48NjCPOA45EAgNDwTCEC3bjVACVDnbrjHY4HIFYqs13g8YsQIKisrKS8vbzWOu3HjOrZu/TcHDgh79uwgEOhM//6O448U6mlKcLqW3Fyn76WqynHal156I7fddhM9ezrvFwT9Src11HPDDWfw739vpEePw7j++hkR0zyrKtL0cSPIHul9IMR+ySWX8OCDD7J161buvfdefv3rX4e9ZsKECVx33XVs27aNp59+mosuuoicnBw2btzI559/zimnnIKI0L59e1auXMmwYcMAJzfR448/zj/+8Q9effXViPUOF+ppK+E+u29961sN93zllVc47rjjWLlyJfGsU2ItfiMpFBc7TmXhQmcfIYoRFytWwIIFzg/MggXOcTwceywMGuQsjj5okHMMlUDTZmuua49FL5SJEydy0003RQzz1DN16lR++cvpFBdfzDPP/BfDh9PgpNvKhx9+GJLbpWdPGnR6945eryl//esiKiurGDnyWJ59dlpEvWOPPZYPP/yQg0FxqoMHD/LRRx8xZMgQjj32WJrm6vrH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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax=None\n", + "colors = ['red','blue','green','yellow']\n", + "for i,var in enumerate(new_pumpkins['Variety'].unique()):\n", + " ax = new_pumpkins[new_pumpkins['Variety']==var].plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಈ ಸಮಯದಲ್ಲಿ, ನಾವು ಕೇವಲ ಒಂದು ಪ್ರಕಾರ - **ಪೈ ಪ್ರಕಾರ** ಮೇಲೆ ಮಾತ್ರ ಗಮನಹರಿಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.2669192282197318\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 174, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']\n", + "print(pie_pumpkins['DayOfYear'].corr(pie_pumpkins['Price']))\n", + "pie_pumpkins.plot.scatter('DayOfYear','Price')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ರೇಖೀಯ ರಿಗ್ರೆಷನ್\n", + "\n", + "ನಾವು ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ Scikit Learn ಅನ್ನು ಬಳಸಲಿದ್ದೇವೆ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.77 (17.2%)\n" + ] + } + ], + "source": [ + "X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)\n", + "y = pie_pumpkins['Price']\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", + "lin_reg = LinearRegression()\n", + "lin_reg.fit(X_train,y_train)\n", + "\n", + "pred = lin_reg.predict(X_test)\n", + "\n", + "mse = np.sqrt(mean_squared_error(y_test,pred))\n", + "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_test,y_test)\n", + "plt.plot(X_test,pred)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಗುಣಾಂಕಗಳಿಂದ ರೇಖೆಯ ತಿರುವು ನಿರ್ಧರಿಸಬಹುದು:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.01751876]), 21.133734359909326)" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lin_reg.coef_, lin_reg.intercept_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನಾವು ತರಬೇತುಗೊಂಡ ಮಾದರಿಯನ್ನು ಬೆಲೆ ಊಹಿಸಲು ಬಳಸಬಹುದು:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([16.64893156])" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Pumpkin price on programmer's day\n", + "\n", + "lin_reg.predict([[256]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ಬಹುಪದ ರಿಗ್ರೆಷನ್\n", + "\n", + "ಕೆಲವೊಮ್ಮೆ ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಫಲಿತಾಂಶಗಳ ನಡುವಿನ ಸಂಬಂಧ ಸ್ವಭಾವತಃ ರೇಖೀಯವಲ್ಲ. ಉದಾಹರಣೆಗೆ, ಹಬ್ಬದ ಬೆಲೆಗಳು ಚಳಿಗಾಲದಲ್ಲಿ (ತಿಂಗಳು=1,2) ಹೆಚ್ಚು ಇರಬಹುದು, ನಂತರ ಬೇಸಿಗೆ (ತಿಂಗಳು=5-7) ಸಮಯದಲ್ಲಿ ಇಳಿಯಬಹುದು, ಮತ್ತು ನಂತರ ಮತ್ತೆ ಏರಬಹುದು. ರೇಖೀಯ ರಿಗ್ರೆಷನ್ ಈ ಸಂಬಂಧವನ್ನು ಸರಿಯಾಗಿ ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಿಲ್ಲ.\n", + "\n", + "ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನಾವು ಹೆಚ್ಚುವರಿ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಸೇರಿಸುವುದನ್ನು ಪರಿಗಣಿಸಬಹುದು. ಸರಳ ವಿಧಾನವೆಂದರೆ ಇನ್‌ಪುಟ್ ವೈಶಿಷ್ಟ್ಯಗಳಿಂದ ಬಹುಪದಗಳನ್ನು ಬಳಸುವುದು, ಇದರಿಂದ **ಬಹುಪದ ರಿಗ್ರೆಷನ್** ಆಗುತ್ತದೆ. ಸ್ಕಿಕಿಟ್ ಲರ್ನ್‌ನಲ್ಲಿ, ನಾವು ಪೈಪ್ಲೈನ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬಹುಪದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪೂರ್ವಗಣನೆ ಮಾಡಬಹುದು: \n" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.73 (17.0%)\n", + "Model determination: 0.07639977655280217\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.pipeline import make_pipeline\n", + "\n", + "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n", + "\n", + "pipeline.fit(X_train,y_train)\n", + "\n", + "pred = pipeline.predict(X_test)\n", + "\n", + "mse = np.sqrt(mean_squared_error(y_test,pred))\n", + "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n", + "\n", + "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)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ಎನ್‌ಕೋಡಿಂಗ್ ವೈವಿಧ್ಯಗಳು\n", + "\n", + "ಆದರ್ಶ ಜಗತ್ತಿನಲ್ಲಿ, ನಾವು ಒಂದೇ ಮಾದರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ವಿಭಿನ್ನ ಕಂಬಳಿಯ ವೈವಿಧ್ಯಗಳ ಬೆಲೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಯಸುತ್ತೇವೆ. ವೈವಿಧ್ಯವನ್ನು ಪರಿಗಣಿಸಲು, ಮೊದಲು ಅದನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ರೂಪಕ್ಕೆ ಪರಿವರ್ತಿಸಬೇಕಾಗುತ್ತದೆ, ಅಥವಾ **ಎನ್‌ಕೋಡ್** ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಇದನ್ನು ಮಾಡಲು ಹಲವಾರು ವಿಧಾನಗಳಿವೆ:\n", + "\n", + "* ಸರಳ ಸಂಖ್ಯಾತ್ಮಕ ಎನ್‌ಕೋಡಿಂಗ್, ಇದು ವಿಭಿನ್ನ ವೈವಿಧ್ಯಗಳ ಟೇಬಲ್ ಅನ್ನು ನಿರ್ಮಿಸಿ, ನಂತರ ಆ ಟೇಬಲ್‌ನಲ್ಲಿ ವೈವಿಧ್ಯ ಹೆಸರನ್ನು ಸೂಚ್ಯಂಕದಿಂದ ಬದಲಾಯಿಸುತ್ತದೆ. ಇದು ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ಗೆ ಉತ್ತಮ ಐಡಿಯಾ ಅಲ್ಲ, ಏಕೆಂದರೆ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಸೂಚ್ಯಂಕದ ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯವನ್ನು ಪರಿಗಣಿಸುತ್ತದೆ, ಮತ್ತು ಆ ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯವು ಬೆಲೆಯೊಂದಿಗೆ ಸಂಖ್ಯಾತ್ಮಕವಾಗಿ ಹೊಂದಾಣಿಕೆ ಹೊಂದಿರುವುದಿಲ್ಲ.\n", + "* ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡಿಂಗ್, ಇದು `Variety` ಕಾಲಮ್ ಅನ್ನು 4 ವಿಭಿನ್ನ ಕಾಲಮ್‌ಗಳ ಮೂಲಕ ಬದಲಾಯಿಸುತ್ತದೆ, ಪ್ರತಿ ವೈವಿಧ್ಯಕ್ಕೆ ಒಂದು ಕಾಲಮ್, ಅದು ನೀಡಲಾದ ಸಾಲು ಆ ವೈವಿಧ್ಯಕ್ಕೆ ಸೇರಿದರೆ 1 ಇರುತ್ತದೆ, ಇಲ್ಲದಿದ್ದರೆ 0 ಇರುತ್ತದೆ.\n", + "\n", + "ಕೆಳಗಿನ ಕೋಡ್ ಒಂದು ವೈವಿಧ್ಯವನ್ನು ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡ್ ಮಾಡುವ ವಿಧಾನವನ್ನು ತೋರಿಸುತ್ತದೆ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FAIRYTALEMINIATUREMIXED HEIRLOOM VARIETIESPIE TYPE
700001
710001
720001
730001
740001
...............
17380100
17390100
17400100
17410100
17420100
\n", + "

415 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " FAIRYTALE MINIATURE MIXED HEIRLOOM VARIETIES PIE TYPE\n", + "70 0 0 0 1\n", + "71 0 0 0 1\n", + "72 0 0 0 1\n", + "73 0 0 0 1\n", + "74 0 0 0 1\n", + "... ... ... ... ...\n", + "1738 0 1 0 0\n", + "1739 0 1 0 0\n", + "1740 0 1 0 0\n", + "1741 0 1 0 0\n", + "1742 0 1 0 0\n", + "\n", + "[415 rows x 4 columns]" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.get_dummies(new_pumpkins['Variety'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ವೈವಿಧ್ಯದಲ್ಲಿ ರೇಖೀಯ ರಿಗ್ರೆಷನ್\n", + "\n", + "ನಾವು ಈಗ ಮೇಲಿನ ಅದೇ ಕೋಡ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ, ಆದರೆ `DayOfYear` ಬದಲು ನಾವು ನಮ್ಮ ಒನ್-ಹಾಟ್-ಎನ್‌ಕೋಡ್ ಮಾಡಿದ ವೈವಿಧ್ಯವನ್ನು ಇನ್‌ಪುಟ್ ಆಗಿ ಬಳಸುತ್ತೇವೆ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": {}, + "outputs": [], + "source": [ + "X = pd.get_dummies(new_pumpkins['Variety'])\n", + "y = new_pumpkins['Price']" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 5.24 (19.7%)\n", + "Model determination: 0.774085281105197\n" + ] + } + ], + "source": [ + "def run_linear_regression(X,y):\n", + " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", + " lin_reg = LinearRegression()\n", + " lin_reg.fit(X_train,y_train)\n", + "\n", + " pred = lin_reg.predict(X_test)\n", + "\n", + " mse = np.sqrt(mean_squared_error(y_test,pred))\n", + " print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n", + "\n", + " score = lin_reg.score(X_train,y_train)\n", + " print('Model determination: ', score)\n", + "\n", + "run_linear_regression(X,y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನಾವು ಅದೇ ರೀತಿಯಲ್ಲಿ ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು ಮತ್ತು ಅವುಗಳನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ವೈಶಿಷ್ಟ್ಯಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ `Month` ಅಥವಾ `DayOfYear`:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.84 (10.5%)\n", + "Model determination: 0.9401096672643048\n" + ] + } + ], + "source": [ + "X = pd.get_dummies(new_pumpkins['Variety']) \\\n", + " .join(new_pumpkins['Month']) \\\n", + " .join(pd.get_dummies(new_pumpkins['City'])) \\\n", + " .join(pd.get_dummies(new_pumpkins['Package']))\n", + "y = new_pumpkins['Price']\n", + "\n", + "run_linear_regression(X,y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ಬಹುಪದ ರಿಗ್ರೆಷನ್\n", + "\n", + "ಬಹುಪದ ರಿಗ್ರೆಷನ್ ಅನ್ನು ಒನ್-ಹಾಟ್-ಎನ್‌ಕೋಡ್ ಮಾಡಲಾದ ವರ್ಗೀಕೃತ ಲಕ್ಷಣಗಳೊಂದಿಗೆ ಕೂಡ ಬಳಸಬಹುದು. ಬಹುಪದ ರಿಗ್ರೆಷನ್ ತರಬೇತಿಗೆ ಬೇಕಾದ ಕೋಡ್ ಮೂಲತಃ ನಾವು ಮೇಲ್ನೋಟದಲ್ಲಿ ನೋಡಿದಂತೆಯೇ ಇರುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.23 (8.25%)\n", + "Model determination: 0.9652870784724543\n" + ] + } + ], + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.pipeline import make_pipeline\n", + "\n", + "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", + "\n", + "pipeline.fit(X_train,y_train)\n", + "\n", + "pred = pipeline.predict(X_test)\n", + "\n", + "mse = np.sqrt(mean_squared_error(y_test,pred))\n", + "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n", + "\n", + "score = pipeline.score(X_train,y_train)\n", + "print('Model determination: ', score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5" + }, + "kernelspec": { + "display_name": "Python 3.7.0 64-bit ('3.7')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.5" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", + "translation_date": "2025-12-19T16:20:25+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/4-Logistic/README.md b/translations/kn/2-Regression/4-Logistic/README.md new file mode 100644 index 000000000..905e1f172 --- /dev/null +++ b/translations/kn/2-Regression/4-Logistic/README.md @@ -0,0 +1,409 @@ + +# ವರ್ಗಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ + +![ಲಾಜಿಸ್ಟಿಕ್ ವಿರುದ್ಧ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.kn.png) + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +> ### [ಈ ಪಾಠ R ನಲ್ಲಿ ಲಭ್ಯವಿದೆ!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## ಪರಿಚಯ + +ರಿಗ್ರೆಶನ್ ಕುರಿತು ಈ ಅಂತಿಮ ಪಾಠದಲ್ಲಿ, ಮೂಲ _ಕ್ಲಾಸಿಕ್_ ಎಂಎಲ್ ತಂತ್ರಗಳಲ್ಲಿ ಒಂದಾದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅನ್ನು ನೋಡೋಣ. ನೀವು ಈ ತಂತ್ರವನ್ನು ದ್ವಿಮೂಲ್ಯ ವರ್ಗಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಬಳಸುತ್ತೀರಿ. ಈ ಕ್ಯಾಂಡಿ ಚಾಕೊಲೇಟ್ ಆಗಿದೆಯೇ ಅಥವಾ ಇಲ್ಲವೇ? ಈ ರೋಗ ಸಂಕ್ರಾಮಕವೇ ಅಥವಾ ಇಲ್ಲವೇ? ಈ ಗ್ರಾಹಕ ಈ ಉತ್ಪನ್ನವನ್ನು ಆರಿಸುವನೋ ಅಥವಾ ಇಲ್ಲವೇ? + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು ಕಲಿಯುವಿರಿ: + +- ಡೇಟಾ ದೃಶ್ಯೀಕರಣಕ್ಕಾಗಿ ಹೊಸ ಗ್ರಂಥಾಲಯ +- ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ತಂತ್ರಗಳು + +✅ ಈ ರೀತಿಯ ರಿಗ್ರೆಶನ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುವುದರ ಬಗ್ಗೆ ನಿಮ್ಮ ಅರ್ಥವನ್ನು ಗಾಢಗೊಳಿಸಿ ಈ [ಕಲಿಕೆ ಘಟಕದಲ್ಲಿ](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## ಪೂರ್ವಾಪೇಕ್ಷಿತ + +ಪಂಪ್ಕಿನ್ ಡೇಟಾ ಜೊತೆ ಕೆಲಸ ಮಾಡಿದ ನಂತರ, ನಾವು ಈಗ ಅದರಲ್ಲಿ ಒಂದು ದ್ವಿಮೂಲ್ಯ ವರ್ಗವಿದೆ ಎಂದು ತಿಳಿದುಕೊಂಡಿದ್ದೇವೆ: `Color`. + +ನಾವು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸೋಣ, ಕೆಲವು ಚರಗಳನ್ನು ನೀಡಿದಾಗ, _ಒಂದು ಪಂಪ್ಕಿನ್ ಯಾವ ಬಣ್ಣದಾಗಿರಬಹುದು_ (ಕಿತ್ತಳೆ 🎃 ಅಥವಾ ಬಿಳಿ 👻). + +> ನಾವು ರಿಗ್ರೆಶನ್ ಕುರಿತು ಪಾಠ ಗುಂಪಿನಲ್ಲಿ ದ್ವಿಮೂಲ್ಯ ವರ್ಗೀಕರಣವನ್ನು ಏಕೆ ಚರ್ಚಿಸುತ್ತಿದ್ದೇವೆ? ಭಾಷಾಶೈಲಿಯ ಅನುಕೂಲಕ್ಕಾಗಿ ಮಾತ್ರ, ಏಕೆಂದರೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ [ನಿಜವಾಗಿಯೂ ವರ್ಗೀಕರಣ ವಿಧಾನವಾಗಿದೆ](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), ಆದರೂ ಲೀನಿಯರ್ ಆಧಾರಿತದಾಗಿದೆ. ಮುಂದಿನ ಪಾಠ ಗುಂಪಿನಲ್ಲಿ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ ಇತರ ವಿಧಾನಗಳನ್ನು ತಿಳಿಯಿರಿ. + +## ಪ್ರಶ್ನೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ + +ನಮ್ಮ ಉದ್ದೇಶಕ್ಕಾಗಿ, ನಾವು ಇದನ್ನು ದ್ವಿಮೂಲ್ಯವಾಗಿ ವ್ಯಕ್ತಪಡಿಸುತ್ತೇವೆ: 'ಬಿಳಿ' ಅಥವಾ 'ಬಿಳಿಯಲ್ಲ'. ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ 'ಸ್ಟ್ರೈಪ್ಡ್' ಎಂಬ ವರ್ಗವೂ ಇದೆ ಆದರೆ ಅದರ ಉದಾಹರಣೆಗಳು ಕಡಿಮೆ, ಆದ್ದರಿಂದ ನಾವು ಅದನ್ನು ಬಳಸುವುದಿಲ್ಲ. ಡೇಟಾಸೆಟ್‌ನಿಂದ ನಲ್ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದ ಮೇಲೆ ಅದು ಅಳಿದುಹೋಗುತ್ತದೆ. + +> 🎃 ಮನರಂಜನೆಯ ವಿಷಯ, ನಾವು ಕೆಲವೊಮ್ಮೆ ಬಿಳಿ ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು 'ಭೂತ' ಪಂಪ್ಕಿನ್‌ಗಳು ಎಂದು ಕರೆಯುತ್ತೇವೆ. ಅವುಗಳನ್ನು ಕತ್ತರಿಸುವುದು ಸುಲಭವಲ್ಲ, ಆದ್ದರಿಂದ ಅವು ಕಿತ್ತಳೆ ಪಂಪ್ಕಿನ್‌ಗಳಷ್ಟು ಜನಪ್ರಿಯವಲ್ಲ ಆದರೆ ಅವು ಚೆನ್ನಾಗಿ ಕಾಣುತ್ತವೆ! ಆದ್ದರಿಂದ ನಾವು ನಮ್ಮ ಪ್ರಶ್ನೆಯನ್ನು 'ಭೂತ' ಅಥವಾ 'ಭೂತವಲ್ಲ' ಎಂದು ಮರುರೂಪಿಸಬಹುದು. 👻 + +## ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ + +ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ನಿಂದ, ನೀವು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಕಲಿತಿದ್ದೀರಿ, ಕೆಲವು ಪ್ರಮುಖ ರೀತಿಗಳಲ್ಲಿ ಭಿನ್ನವಾಗಿದೆ. + +[![ಎಂಎಲ್ ಆರಂಭಿಕರಿಗೆ - ಯಂತ್ರ ಅಧ್ಯಯನ ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ಎಂಎಲ್ ಆರಂಭಿಕರಿಗೆ - ಯಂತ್ರ ಅಧ್ಯಯನ ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು") + +> 🎥 ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಕುರಿತು ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +### ದ್ವಿಮೂಲ್ಯ ವರ್ಗೀಕರಣ + +ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ನಂತೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀಡುವುದಿಲ್ಲ. ಮೊದಲದು ದ್ವಿಮೂಲ್ಯ ವರ್ಗದ ಬಗ್ಗೆ ಭವಿಷ್ಯವಾಣಿ ನೀಡುತ್ತದೆ ("ಬಿಳಿ ಅಥವಾ ಬಿಳಿಯಲ್ಲ") ಆದರೆ ಎರಡನೆಯದು ನಿರಂತರ ಮೌಲ್ಯಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು, ಉದಾಹರಣೆಗೆ ಪಂಪ್ಕಿನ್ ಮೂಲ ಮತ್ತು ಹಾರ್ವೆಸ್ಟ್ ಸಮಯ ನೀಡಿದಾಗ, _ಅದರ ಬೆಲೆ ಎಷ್ಟು ಏರಬಹುದು_. + +![ಪಂಪ್ಕಿನ್ ವರ್ಗೀಕರಣ ಮಾದರಿ](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.kn.png) +> ಇನ್ಫೋಗ್ರಾಫಿಕ್: [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](https://twitter.com/dasani_decoded) + +### ಇತರ ವರ್ಗೀಕರಣಗಳು + +ಮಲ್ಟಿನೋಮಿಯಲ್ ಮತ್ತು ಆರ್ಡಿನಲ್ ಸೇರಿದಂತೆ ಇತರ ವಿಧದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ಗಳಿವೆ: + +- **ಮಲ್ಟಿನೋಮಿಯಲ್**, ಇದು ಒಂದುಕ್ಕಿಂತ ಹೆಚ್ಚು ವರ್ಗಗಳನ್ನು ಹೊಂದಿದೆ - "ಕಿತ್ತಳೆ, ಬಿಳಿ ಮತ್ತು ಸ್ಟ್ರೈಪ್ಡ್". +- **ಆರ್ಡಿನಲ್**, ಇದು ಕ್ರಮಬದ್ಧ ವರ್ಗಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ಉದಾಹರಣೆಗೆ ನಮ್ಮ ಪಂಪ್ಕಿನ್‌ಗಳು ಸಣ್ಣ, ಮಧ್ಯಮ, ದೊಡ್ಡ ಇತ್ಯಾದಿ ಗಾತ್ರಗಳಲ್ಲಿ ಕ್ರಮಬದ್ಧವಾಗಿದ್ದರೆ. + +![ಮಲ್ಟಿನೋಮಿಯಲ್ ವಿರುದ್ಧ ಆರ್ಡಿನಲ್ ರಿಗ್ರೆಶನ್](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.kn.png) + +### ಚರಗಳು ಹೊಂದಾಣಿಕೆ ಹೊಂದಬೇಕಾಗಿಲ್ಲ + +ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಹೆಚ್ಚು ಹೊಂದಾಣಿಕೆಯ ಚರಗಳೊಂದಿಗೆ ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿತ್ತು ಎಂದು ನೆನಪಿಸಿಕೊಳ್ಳಿ? ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿದೆ - ಚರಗಳು ಹೊಂದಾಣಿಕೆ ಹೊಂದಬೇಕಾಗಿಲ್ಲ. ಇದು ಸ್ವಲ್ಪ ದುರ್ಬಲ ಹೊಂದಾಣಿಕೆ ಇರುವ ಈ ಡೇಟಾಗೆ ಸೂಕ್ತವಾಗಿದೆ. + +### ನಿಮಗೆ ಬಹಳಷ್ಟು ಸ್ವಚ್ಛ ಡೇಟಾ ಬೇಕು + +ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಹೆಚ್ಚು ಡೇಟಾ ಬಳಸಿದರೆ ಹೆಚ್ಚು ನಿಖರ ಫಲಿತಾಂಶ ನೀಡುತ್ತದೆ; ನಮ್ಮ ಸಣ್ಣ ಡೇಟಾಸೆಟ್ ಈ ಕಾರ್ಯಕ್ಕೆ ಸೂಕ್ತವಲ್ಲ, ಅದನ್ನು ಗಮನದಲ್ಲಿಡಿ. + +[![ಎಂಎಲ್ ಆರಂಭಿಕರಿಗೆ - ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ಗೆ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ತಯಾರಿ](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ಎಂಎಲ್ ಆರಂಭಿಕರಿಗೆ - ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ಗೆ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ತಯಾರಿ") + +> 🎥 ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ಗೆ ಡೇಟಾ ತಯಾರಿಕೆ ಕುರಿತು ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ + +✅ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ಗೆ ಸೂಕ್ತವಾಗುವ ಡೇಟಾ ಪ್ರಕಾರಗಳ ಬಗ್ಗೆ ಯೋಚಿಸಿ + +## ಅಭ್ಯಾಸ - ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ + +ಮೊದಲು, ಡೇಟಾವನ್ನು ಸ್ವಲ್ಪ ಸ್ವಚ್ಛಗೊಳಿಸಿ, ನಲ್ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಮತ್ತು ಕೆಲವು ಕಾಲಮ್‌ಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆಮಾಡಿ: + +1. ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + ನೀವು ಯಾವಾಗಲೂ ನಿಮ್ಮ ಹೊಸ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ನೋಡಬಹುದು: + + ```python + pumpkins.info + ``` + +### ದೃಶ್ಯೀಕರಣ - ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್ + +ಈಗ ನೀವು ಮತ್ತೆ [ಸ್ಟಾರ್ಟರ್ ನೋಟ್ಬುಕ್](./notebook.ipynb) ಅನ್ನು ಪಂಪ್ಕಿನ್ ಡೇಟಾ ಜೊತೆಗೆ ಲೋಡ್ ಮಾಡಿ ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸಿದ್ದೀರಿ, ಇದರಲ್ಲಿ ಕೆಲವು ಚರಗಳೊಂದಿಗೆ `Color` ಕೂಡ ಇದೆ. ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಬೇರೆ ಗ್ರಂಥಾಲಯ ಬಳಸಿ ದೃಶ್ಯೀಕರಿಸೋಣ: [Seaborn](https://seaborn.pydata.org/index.html), ಇದು Matplotlib ಮೇಲೆ ನಿರ್ಮಿತವಾಗಿದೆ, ನಾವು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಬಳಸಿದ್ದೇವೆ. + +Seaborn ನಿಮ್ಮ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಕೆಲವು ಚೆನ್ನಾದ ವಿಧಾನಗಳನ್ನು ನೀಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ಪ್ರತಿ `Variety` ಮತ್ತು `Color` ಗೆ ಡೇಟಾ ವಿತರಣೆಗಳನ್ನು ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ಹೋಲಿಸಬಹುದು. + +1. `catplot` ಫಂಕ್ಷನ್ ಬಳಸಿ, ನಮ್ಮ ಪಂಪ್ಕಿನ್ ಡೇಟಾ `pumpkins` ಮತ್ತು ಪ್ರತಿ ಪಂಪ್ಕಿನ್ ವರ್ಗಕ್ಕೆ ಬಣ್ಣ ನಕ್ಷೆ (ಕಿತ್ತಳೆ ಅಥವಾ ಬಿಳಿ) ಸೂಚಿಸಿ, ಇಂತಹ ಪ್ಲಾಟ್ ರಚಿಸಿ: + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![ದೃಶ್ಯೀಕರಿಸಿದ ಡೇಟಾದ ಗ್ರಿಡ್](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.kn.png) + + ಡೇಟಾವನ್ನು ಗಮನಿಸಿದರೆ, ಬಣ್ಣ ಡೇಟಾ `Variety` ಗೆ ಹೇಗೆ ಸಂಬಂಧಿಸಿದೆ ಎಂದು ಕಾಣಬಹುದು. + + ✅ ಈ ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್ ನೀಡಿದಾಗ, ನೀವು ಯಾವ ರೀತಿ ಆಸಕ್ತಿದಾಯಕ ಅನ್ವೇಷಣೆಗಳನ್ನು ಕಲ್ಪಿಸಬಹುದು? + +### ಡೇಟಾ ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆ: ವೈಶಿಷ್ಟ್ಯ ಮತ್ತು ಲೇಬಲ್ ಎನ್ಕೋಡಿಂಗ್ +ನಮ್ಮ ಪಂಪ್ಕಿನ್ ಡೇಟಾಸೆಟ್‌ನ ಎಲ್ಲಾ ಕಾಲಮ್‌ಗಳಲ್ಲಿ ಸ್ಟ್ರಿಂಗ್ ಮೌಲ್ಯಗಳಿವೆ. ವರ್ಗೀಕೃತ ಡೇಟಾ ಮಾನವರಿಗೆ ಸುಲಭ ಆದರೆ ಯಂತ್ರಗಳಿಗೆ ಅಲ್ಲ. ಯಂತ್ರ ಅಧ್ಯಯನ ಆಲ್ಗಾರಿದಮ್ಗಳು ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತವೆ. ಆದ್ದರಿಂದ ಎನ್ಕೋಡಿಂಗ್ ಡೇಟಾ ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆಯ ಅತ್ಯಂತ ಮುಖ್ಯ ಹಂತವಾಗಿದೆ, ಇದು ವರ್ಗೀಕೃತ ಡೇಟಾವನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾಗೆ ಪರಿವರ್ತಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಯಾವುದೇ ಮಾಹಿತಿ ಕಳೆದುಕೊಳ್ಳದೆ. ಉತ್ತಮ ಎನ್ಕೋಡಿಂಗ್ ಉತ್ತಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಕಾರಣವಾಗುತ್ತದೆ. + +ವೈಶಿಷ್ಟ್ಯ ಎನ್ಕೋಡಿಂಗ್‌ಗೆ ಎರಡು ಪ್ರಮುಖ ಎನ್ಕೋಡರ್ ಪ್ರಕಾರಗಳಿವೆ: + +1. ಆರ್ಡಿನಲ್ ಎನ್ಕೋಡರ್: ಇದು ಆರ್ಡಿನಲ್ ಚರಗಳಿಗೆ ಸೂಕ್ತ, ಅಂದರೆ ಅವುಗಳ ಡೇಟಾ ತರ್ಕಬದ್ಧ ಕ್ರಮವನ್ನು ಅನುಸರಿಸುವ ವರ್ಗೀಕೃತ ಚರಗಳು, ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ `Item Size` ಕಾಲಮ್‌ನಂತೆ. ಇದು ಪ್ರತಿ ವರ್ಗವನ್ನು ಸಂಖ್ಯೆಯಿಂದ ಪ್ರತಿನಿಧಿಸುವ ನಕ್ಷೆಯನ್ನು ರಚಿಸುತ್ತದೆ, ಅದು ಕಾಲಮ್‌ನಲ್ಲಿ ವರ್ಗದ ಕ್ರಮವಾಗಿದೆ. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. ವರ್ಗೀಕೃತ ಎನ್ಕೋಡರ್: ಇದು ನಾಮಮಾತ್ರ ಚರಗಳಿಗೆ ಸೂಕ್ತ, ಅಂದರೆ ಅವುಗಳ ಡೇಟಾ ತರ್ಕಬದ್ಧ ಕ್ರಮವನ್ನು ಅನುಸರಿಸುವುದಿಲ್ಲ, ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ `Item Size` ಹೊರತುಪಡಿಸಿ ಎಲ್ಲಾ ವೈಶಿಷ್ಟ್ಯಗಳಿಗೆ. ಇದು ಒನ್-ಹಾಟ್ ಎನ್ಕೋಡಿಂಗ್ ಆಗಿದ್ದು, ಪ್ರತಿ ವರ್ಗವನ್ನು ಬೈನರಿ ಕಾಲಮ್ ಮೂಲಕ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ: ಪಂಪ್ಕಿನ್ ಆ ವರ್ಗಕ್ಕೆ ಸೇರಿದರೆ ಎನ್ಕೋಡಿಂಗ್ ಮೌಲ್ಯ 1, ಇಲ್ಲದಿದ್ದರೆ 0. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` +ನಂತರ, `ColumnTransformer` ಅನ್ನು ಬಳಸಿಕೊಂಡು ಹಲವಾರು ಎನ್ಕೋಡರ್‌ಗಳನ್ನು ಒಂದೇ ಹಂತದಲ್ಲಿ ಸಂಯೋಜಿಸಿ ಸೂಕ್ತ ಕಾಲಮ್‌ಗಳಿಗೆ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` +ಮತ್ತೊಂದೆಡೆ, ಲೇಬಲ್ ಎನ್ಕೋಡಿಂಗ್ ಮಾಡಲು, ನಾವು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನ `LabelEncoder` ವರ್ಗವನ್ನು ಬಳಸುತ್ತೇವೆ, ಇದು ಲೇಬಲ್‌ಗಳನ್ನು 0 ರಿಂದ n_classes-1 (ಇಲ್ಲಿ 0 ಮತ್ತು 1) ಮೌಲ್ಯಗಳ ನಡುವೆ ಸಾಮಾನ್ಯೀಕರಿಸಲು ಸಹಾಯ ಮಾಡುವ ಉಪಯುಕ್ತ ವರ್ಗ. + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` +ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಲೇಬಲ್ ಅನ್ನು ಎನ್ಕೋಡ್ ಮಾಡಿದ ನಂತರ, ಅವುಗಳನ್ನು ಹೊಸ ಡೇಟಾಫ್ರೇಮ್ `encoded_pumpkins` ಗೆ ಮರ್ಜ್ ಮಾಡಬಹುದು. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` +✅ `Item Size` ಕಾಲಮ್‌ಗೆ ಆರ್ಡಿನಲ್ ಎನ್ಕೋಡರ್ ಬಳಸುವುದರಿಂದ ಏನು ಲಾಭಗಳಿವೆ? + +### ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ + +ಈಗ ನಾವು ಡೇಟಾವನ್ನು ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆ ಮಾಡಿದ್ದೇವೆ, ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಲೇಬಲ್ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ, ಮಾದರಿ ಲೇಬಲ್ ಅನ್ನು ವೈಶಿಷ್ಟ್ಯಗಳ ಆಧಾರದ ಮೇಲೆ ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದು. +ಈ ರೀತಿಯ ವಿಶ್ಲೇಷಣೆಗೆ ಉತ್ತಮ ವಿಧಾನ ಡೇಟಾವನ್ನು ಪ್ಲಾಟ್ ಮಾಡುವುದು. ನಾವು ಮತ್ತೆ Seaborn `catplot` ಫಂಕ್ಷನ್ ಬಳಸಿ, `Item Size`, `Variety` ಮತ್ತು `Color` ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ದೃಶ್ಯೀಕರಿಸುವೆವು. ಉತ್ತಮವಾಗಿ ಪ್ಲಾಟ್ ಮಾಡಲು ನಾವು ಎನ್ಕೋಡ್ ಮಾಡಿದ `Item Size` ಕಾಲಮ್ ಮತ್ತು ಎನ್ಕೋಡ್ ಮಾಡದ `Variety` ಕಾಲಮ್ ಬಳಸುತ್ತೇವೆ. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` +![ದೃಶ್ಯೀಕರಿಸಿದ ಡೇಟಾದ ಕ್ಯಾಟ್‌ಪ್ಲಾಟ್](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.kn.png) + +### ಸ್ವಾರ್ಮ್ ಪ್ಲಾಟ್ ಬಳಸಿ + +ಬಣ್ಣವು ದ್ವಿಮೂಲ್ಯ ವರ್ಗ (ಬಿಳಿ ಅಥವಾ ಬಿಳಿಯಲ್ಲ) ಆಗಿರುವುದರಿಂದ, ಅದನ್ನು ದೃಶ್ಯೀಕರಿಸಲು 'ವಿಶೇಷ ವಿಧಾನ' ಬೇಕಾಗುತ್ತದೆ. ಈ ವರ್ಗದ ಸಂಬಂಧವನ್ನು ಇತರ ಚರಗಳೊಂದಿಗೆ ದೃಶ್ಯೀಕರಿಸುವ ಇನ್ನೂ ಕೆಲವು ವಿಧಾನಗಳಿವೆ. + +ನೀವು Seaborn ಪ್ಲಾಟ್‌ಗಳೊಂದಿಗೆ ಚರಗಳನ್ನು ಪಕ್ಕಪಕ್ಕವಾಗಿ ದೃಶ್ಯೀಕರಿಸಬಹುದು. + +1. ಮೌಲ್ಯಗಳ ವಿತರಣೆ ತೋರಿಸಲು 'ಸ್ವಾರ್ಮ್' ಪ್ಲಾಟ್ ಪ್ರಯತ್ನಿಸಿ: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![ದೃಶ್ಯೀಕರಿಸಿದ ಡೇಟಾದ ಸ್ವಾರ್ಮ್](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.kn.png) + +**ಎಚ್ಚರಿಕೆ**: ಮೇಲಿನ ಕೋಡ್ ಎಚ್ಚರಿಕೆ ನೀಡಬಹುದು, ಏಕೆಂದರೆ Seaborn ಇಷ್ಟು ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಸ್ವಾರ್ಮ್ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲು ವಿಫಲವಾಗಬಹುದು. ಒಂದು ಪರಿಹಾರವೆಂದರೆ 'size' ಪರಿಮಾಣವನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು. ಆದರೆ ಇದು ಪ್ಲಾಟ್ ಓದಲು ಕಷ್ಟವಾಗಬಹುದು. + +> **🧮 ಗಣಿತವನ್ನು ತೋರಿಸಿ** +> +> ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ 'ಗರಿಷ್ಠ ಸಾಧ್ಯತೆ' ಎಂಬ ತತ್ವವನ್ನು [ಸಿಗ್ಮಾಯ್ಡ್ ಫಂಕ್ಷನ್‌ಗಳು](https://wikipedia.org/wiki/Sigmoid_function) ಬಳಸಿ ಅವಲಂಬಿಸುತ್ತದೆ. ಪ್ಲಾಟ್‌ನಲ್ಲಿ 'ಸಿಗ್ಮಾಯ್ಡ್ ಫಂಕ್ಷನ್' 'S' ಆಕಾರದಂತೆ ಕಾಣುತ್ತದೆ. ಇದು ಒಂದು ಮೌಲ್ಯವನ್ನು ತೆಗೆದು ಅದನ್ನು 0 ಮತ್ತು 1 ನಡುವೆ ನಕ್ಷೆ ಮಾಡುತ್ತದೆ. ಇದರ ವಕ್ರವನ್ನು 'ಲಾಜಿಸ್ಟಿಕ್ ವಕ್ರ' ಎಂದು ಕರೆಯುತ್ತಾರೆ. ಇದರ ಸೂತ್ರ ಹೀಗಿದೆ: +> +> ![ಲಾಜಿಸ್ಟಿಕ್ ಫಂಕ್ಷನ್](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.kn.png) +> +> ಇಲ್ಲಿ ಸಿಗ್ಮಾಯ್ಡ್‌ನ ಮಧ್ಯಬಿಂದುವು x ರ 0 ಬಿಂದುವಿನಲ್ಲಿ ಇರುತ್ತದೆ, L ವಕ್ರದ ಗರಿಷ್ಠ ಮೌಲ್ಯ, ಮತ್ತು k ವಕ್ರದ ತೀವ್ರತೆ. ಫಂಕ್ಷನ್ ಫಲಿತಾಂಶ 0.5 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಇದ್ದರೆ, ಆ ಲೇಬಲ್ '1' ವರ್ಗಕ್ಕೆ ನೀಡಲಾಗುತ್ತದೆ. ಇಲ್ಲದಿದ್ದರೆ, '0' ಎಂದು ವರ್ಗೀಕರಿಸಲಾಗುತ್ತದೆ. + +## ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ + +ಈ ದ್ವಿಮೂಲ್ಯ ವರ್ಗೀಕರಣವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸುವುದು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನಲ್ಲಿ ಆಶ್ಚರ್ಯಕರವಾಗಿ ಸರಳವಾಗಿದೆ. + +[![ಎಂಎಲ್ ಆರಂಭಿಕರಿಗೆ - ಡೇಟಾ ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ಎಂಎಲ್ ಆರಂಭಿಕರಿಗೆ - ಡೇಟಾ ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್") + +> 🎥 ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿ ನಿರ್ಮಾಣದ ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ + +1. ನಿಮ್ಮ ವರ್ಗೀಕರಣ ಮಾದರಿಯಲ್ಲಿ ಬಳಸಬೇಕಾದ ಚರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗಳನ್ನು `train_test_split()` ಕರೆ ಮಾಡಿ ವಿಭಜಿಸಿ: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. ಈಗ ನೀವು `fit()` ಅನ್ನು ನಿಮ್ಮ ತರಬೇತಿ ಡೇಟಾ ಜೊತೆ ಕರೆಸಿ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಬಹುದು ಮತ್ತು ಅದರ ಫಲಿತಾಂಶವನ್ನು ಮುದ್ರಿಸಿ: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + ನಿಮ್ಮ ಮಾದರಿಯ ಸ್ಕೋರ್ಬೋರ್ಡ್ ಅನ್ನು ನೋಡಿ. ಇದು ಕೆಟ್ಟದಾಗಿಲ್ಲ, ನೀವು ಸುಮಾರು 1000 ಸಾಲುಗಳ ಡೇಟಾ ಹೊಂದಿದ್ದೀರಿ ಎಂದು ಪರಿಗಣಿಸಿದರೆ: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮೂಲಕ ಉತ್ತಮ ಅರ್ಥಮಾಡಿಕೆ + +ನೀವು ಮೇಲಿನ ಐಟಂಗಳನ್ನು ಮುದ್ರಿಸುವ ಮೂಲಕ ಸ್ಕೋರ್ಬೋರ್ಡ್ ವರದಿಯನ್ನು ಪಡೆಯಬಹುದು, ಆದರೆ ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ಹೆಚ್ಚು ಸುಲಭವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು [ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) ಅನ್ನು ಬಳಸಬಹುದು, ಇದು ಮಾದರಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ ಎಂಬುದನ್ನು ತಿಳಿಸುತ್ತದೆ. + +> 🎓 '[ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್](https://wikipedia.org/wiki/Confusion_matrix)' (ಅಥವಾ 'ದೋಷ ಮ್ಯಾಟ್ರಿಕ್ಸ್') ಒಂದು ಟೇಬಲ್ ಆಗಿದ್ದು, ನಿಮ್ಮ ಮಾದರಿಯ ನಿಜವಾದ ಮತ್ತು ತಪ್ಪು ಧನಾತ್ಮಕ ಮತ್ತು ನಕಾರಾತ್ಮಕಗಳನ್ನು ತೋರಿಸುತ್ತದೆ, ಹೀಗಾಗಿ ಭವಿಷ್ಯವಾಣಿಗಳ ನಿಖರತೆಯನ್ನು ಅಳೆಯುತ್ತದೆ. + +1. ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಬಳಸಲು, `confusion_matrix()` ಅನ್ನು ಕರೆ ಮಾಡಿ: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + ನಿಮ್ಮ ಮಾದರಿಯ ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ನೋಡಿ: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +ಸ್ಕಿಕಿಟ್-ಲರ್ನ್‌ನಲ್ಲಿ, ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಸಾಲುಗಳು (ಅಕ್ಷ 0) ನಿಜವಾದ ಲೇಬಲ್‌ಗಳು ಮತ್ತು ಕಾಲಮ್‌ಗಳು (ಅಕ್ಷ 1) ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಲೇಬಲ್‌ಗಳು. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ? ನಮ್ಮ ಮಾದರಿಯನ್ನು ಎರಡು ದ್ವಿಮೂಲ್ಯ ವರ್ಗಗಳಾದ 'ಬಿಳಿ' ಮತ್ತು 'ಬಿಳಿಯಲ್ಲ' ಪಂಪ್ಕಿನ್‌ಗಳನ್ನು ವರ್ಗೀಕರಿಸಲು ಕೇಳಲಾಗಿದೆ ಎಂದು ಹೇಳೋಣ. + +- ನಿಮ್ಮ ಮಾದರಿ ಪಂಪ್ಕಿನ್ ಅನ್ನು ಬಿಳಿಯಲ್ಲ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ನಿಜವಾಗಿಯೂ 'ಬಿಳಿಯಲ್ಲ' ವರ್ಗಕ್ಕೆ ಸೇರಿದರೆ, ಅದನ್ನು ನಿಜ ನಕಾರಾತ್ಮಕ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಇದು ಮೇಲಿನ ಎಡ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ. +- ನಿಮ್ಮ ಮಾದರಿ ಪಂಪ್ಕಿನ್ ಅನ್ನು ಬಿಳಿ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ನಿಜವಾಗಿಯೂ 'ಬಿಳಿಯಲ್ಲ' ವರ್ಗಕ್ಕೆ ಸೇರಿದರೆ, ಅದನ್ನು ತಪ್ಪು ಧನಾತ್ಮಕ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಇದು ಕೆಳಗಿನ ಎಡ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ. +- ನಿಮ್ಮ ಮಾದರಿ ಪಂಪ್ಕಿನ್ ಅನ್ನು ಬಿಳಿಯಲ್ಲ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ನಿಜವಾಗಿಯೂ 'ಬಿಳಿ' ವರ್ಗಕ್ಕೆ ಸೇರಿದರೆ, ಅದನ್ನು ತಪ್ಪು ಧನಾತ್ಮಕ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಇದು ಮೇಲಿನ ಬಲ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ. +- ನಿಮ್ಮ ಮಾದರಿ ಪಂಪ್ಕಿನ್ ಅನ್ನು ಬಿಳಿ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ನಿಜವಾಗಿಯೂ 'ಬಿಳಿ' ವರ್ಗಕ್ಕೆ ಸೇರಿದರೆ, ಅದನ್ನು ನಿಜ ಧನಾತ್ಮಕ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಇದು ಕೆಳಗಿನ ಬಲ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ. +ನೀವು ಊಹಿಸಿದ್ದಂತೆ, ಹೆಚ್ಚು ಸಂಖ್ಯೆಯ ಸತ್ಯ ಧನಾತ್ಮಕಗಳು ಮತ್ತು ಸತ್ಯ ನಕಾರಾತ್ಮಕಗಳನ್ನು ಹೊಂದಿರುವುದು ಮತ್ತು ಕಡಿಮೆ ಸಂಖ್ಯೆಯ ತಪ್ಪು ಧನಾತ್ಮಕಗಳು ಮತ್ತು ತಪ್ಪು ನಕಾರಾತ್ಮಕಗಳನ್ನು ಹೊಂದಿರುವುದು ಇಷ್ಟಕರ, ಇದು ಮಾದರಿ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. + +ಸಂಕುಚಿತ ಮ್ಯಾಟ್ರಿಕ್ಸ್ precision ಮತ್ತು recall ಗೆ ಹೇಗೆ ಸಂಬಂಧಿಸಿದೆ? ಮೇಲಿನ ವರ್ಗೀಕರಣ ವರದಿ precision (0.85) ಮತ್ತು recall (0.67) ಅನ್ನು ತೋರಿಸಿತು ಎಂದು ನೆನಪಿಡಿ. + +Precision = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Recall = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ ಪ್ರಶ್ನೆ: ಸಂಕುಚಿತ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಪ್ರಕಾರ, ಮಾದರಿ ಹೇಗೆ ಮಾಡಿತು? ಉತ್ತರ: ಕೆಟ್ಟದಿಲ್ಲ; ಸತ್ಯ ನಕಾರಾತ್ಮಕಗಳ ಸಂಖ್ಯೆ ಚೆನ್ನಾಗಿದೆ ಆದರೆ ಕೆಲವು ತಪ್ಪು ನಕಾರಾತ್ಮಕಗಳೂ ಇದ್ದವು. + +ನಾವು ಮೊದಲು ನೋಡಿದ ಪದಗಳನ್ನು ಸಂಕುಚಿತ ಮ್ಯಾಟ್ರಿಕ್ಸ್‌ನ TP/TN ಮತ್ತು FP/FN ನ ನಕ್ಷೆ ಸಹಾಯದಿಂದ ಮತ್ತೆ ಪರಿಶೀಲಿಸೋಣ: + +🎓 Precision: TP/(TP + FP) ಪಡೆದ ಉದಾಹರಣೆಗಳಲ್ಲಿ ಸಂಬಂಧಿತ ಉದಾಹರಣೆಗಳ ಭಾಗ (ಉದಾ: ಯಾವ ಲೇಬಲ್ಗಳು ಚೆನ್ನಾಗಿ ಲೇಬಲ್ ಮಾಡಲಾಯಿತು) + +🎓 Recall: TP/(TP + FN) ಪಡೆದ ಸಂಬಂಧಿತ ಉದಾಹರಣೆಗಳ ಭಾಗ, ಚೆನ್ನಾಗಿ ಲೇಬಲ್ ಮಾಡಲಾದವು ಅಥವಾ ಇಲ್ಲದವು + +🎓 f1-score: (2 * precision * recall)/(precision + recall) precision ಮತ್ತು recall ನ ತೂಕಿತ ಸರಾಸರಿ, ಉತ್ತಮ 1 ಮತ್ತು ಕೆಟ್ಟ 0 + +🎓 Support: ಪ್ರತಿಯೊಂದು ಲೇಬಲ್ಗೆ ಪಡೆದ ಸಂಭವಗಳ ಸಂಖ್ಯೆ + +🎓 Accuracy: (TP + TN)/(TP + TN + FP + FN) ಮಾದರಿ ನಿಖರವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಲೇಬಲ್ಗಳ ಶೇಕಡಾವಾರು + +🎓 Macro Avg: ಲೇಬಲ್ ಅಸಮತೋಲನವನ್ನು ಪರಿಗಣಿಸದೆ ಪ್ರತಿಯೊಂದು ಲೇಬಲ್ಗೆ ಅತೂಕವಿಲ್ಲದ ಸರಾಸರಿ ಮೌಲ್ಯಗಳ ಲೆಕ್ಕಾಚಾರ + +🎓 Weighted Avg: ಲೇಬಲ್ ಅಸಮತೋಲನವನ್ನು ಪರಿಗಣಿಸಿ, ಪ್ರತಿಯೊಂದು ಲೇಬಲ್ಗೆ ಸತ್ಯ ಉದಾಹರಣೆಗಳ ಸಂಖ್ಯೆಯ ಮೂಲಕ ತೂಕ ನೀಡುವ ಮೂಲಕ ಸರಾಸರಿ ಮೌಲ್ಯಗಳ ಲೆಕ್ಕಾಚಾರ + +✅ ನೀವು ನಿಮ್ಮ ಮಾದರಿ ತಪ್ಪು ನಕಾರಾತ್ಮಕಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಬಯಸಿದರೆ ಯಾವ ಮೌಲ್ಯವನ್ನು ಗಮನಿಸಬೇಕು ಎಂದು ನೀವು ಯೋಚಿಸಬಹುದೇ? + +## ಈ ಮಾದರಿಯ ROC ವಕ್ರವನ್ನು ದೃಶ್ಯೀಕರಿಸಿ + +[![ML for beginners - Analyzing Logistic Regression Performance with ROC Curves](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML for beginners - Analyzing Logistic Regression Performance with ROC Curves") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ROC ವಕ್ರಗಳ ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೋ ಅವಲೋಕನಕ್ಕಾಗಿ + +ನಾವು 'ROC' ವಕ್ರವನ್ನು ನೋಡಲು ಇನ್ನೊಂದು ದೃಶ್ಯೀಕರಣ ಮಾಡೋಣ: + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Matplotlib ಬಳಸಿ, ಮಾದರಿಯ [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ಅಥವಾ ROC ಅನ್ನು ರೇಖಾಚಿತ್ರಗೊಳಿಸಿ. ROC ವಕ್ರಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ವರ್ಗೀಕರಿಸುವವರ ಸತ್ಯ ಮತ್ತು ತಪ್ಪು ಧನಾತ್ಮಕಗಳ ದೃಷ್ಟಿಕೋನದಿಂದ ಫಲಿತಾಂಶವನ್ನು ನೋಡಲು ಬಳಸಲಾಗುತ್ತದೆ. "ROC ವಕ್ರಗಳು ಸಾಮಾನ್ಯವಾಗಿ Y ಅಕ್ಷದಲ್ಲಿ ಸತ್ಯ ಧನಾತ್ಮಕ ದರ ಮತ್ತು X ಅಕ್ಷದಲ್ಲಿ ತಪ್ಪು ಧನಾತ್ಮಕ ದರವನ್ನು ಹೊಂದಿರುತ್ತವೆ." ಆದ್ದರಿಂದ, ವಕ್ರದ ತೀವ್ರತೆ ಮತ್ತು ಮಧ್ಯರೇಖೆ ಮತ್ತು ವಕ್ರದ ನಡುವಿನ ಸ್ಥಳವು ಮಹತ್ವಪೂರ್ಣ: ನೀವು ವಕ್ರವು ಶೀಘ್ರವಾಗಿ ಮೇಲಕ್ಕೆ ಹೋಗಿ ರೇಖೆಯನ್ನು ಮೀರಿ ಹೋಗುವಂತೆ ಬಯಸುತ್ತೀರಿ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಆರಂಭದಲ್ಲಿ ತಪ್ಪು ಧನಾತ್ಮಕಗಳಿವೆ, ನಂತರ ರೇಖೆ ಸರಿಯಾಗಿ ಮೇಲಕ್ಕೆ ಹೋಗುತ್ತದೆ: + +![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.kn.png) + +ಕೊನೆಗೆ, Scikit-learn ನ [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) ಬಳಸಿ ನಿಜವಾದ 'ವಕ್ರದ ಕೆಳಗಿನ ಪ್ರದೇಶ' (AUC) ಅನ್ನು ಲೆಕ್ಕಿಸಿ: + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +ಫಲಿತಾಂಶ `0.9749908725812341`. AUC 0 ರಿಂದ 1 ರವರೆಗೆ ಇರುತ್ತದೆ, ನೀವು ದೊಡ್ಡ ಅಂಕೆಯನ್ನು ಬಯಸುತ್ತೀರಿ, ಏಕೆಂದರೆ 100% ನಿಖರ ಭವಿಷ್ಯವಾಣಿಯನ್ನು ಮಾಡುವ ಮಾದರಿಯ AUC 1 ಆಗಿರುತ್ತದೆ; ಈ ಪ್ರಕರಣದಲ್ಲಿ, ಮಾದರಿ _ಚೆನ್ನಾಗಿದೆ_. + +ಭವಿಷ್ಯದಲ್ಲಿ ವರ್ಗೀಕರಣ ಪಾಠಗಳಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಮಾದರಿಯ ಅಂಕೆಗಳನ್ನು ಸುಧಾರಿಸಲು ಹೇಗೆ ಪುನರಾವರ್ತನೆ ಮಾಡಬೇಕೆಂದು ಕಲಿಯುತ್ತೀರಿ. ಆದರೆ ಈಗ, ಅಭಿನಂದನೆಗಳು! ನೀವು ಈ ರಿಗ್ರೆಶನ್ ಪಾಠಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ! + +--- +## 🚀ಸವಾಲು + +ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಅನೇಕ ವಿಷಯಗಳಿವೆ! ಆದರೆ ಕಲಿಯಲು ಉತ್ತಮ ಮಾರ್ಗ ಪ್ರಯೋಗ ಮಾಡುವುದು. ಈ ರೀತಿಯ ವಿಶ್ಲೇಷಣೆಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಹುಡುಕಿ ಮತ್ತು ಅದರಿಂದ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ. ನೀವು ಏನು ಕಲಿತೀರಿ? ಸಲಹೆ: ಆಸಕ್ತಿದಾಯಕ ಡೇಟಾಸೆಟ್‌ಗಳಿಗಾಗಿ [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) ಪ್ರಯತ್ನಿಸಿ. + +## [ಪಾಠೋತ್ತರ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ನ ಕೆಲವು ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಗಳ ಕುರಿತು [ಸ್ಟ್ಯಾನ್‌ಫರ್ಡ್‌ನ ಈ ಪೇಪರ್](https://web.stanford.edu/~jurafsky/slp3/5.pdf) ನ ಮೊದಲ ಕೆಲವು ಪುಟಗಳನ್ನು ಓದಿ. ನಾವು ಈವರೆಗೆ ಅಧ್ಯಯನ ಮಾಡಿದ ರಿಗ್ರೆಶನ್ ಕಾರ್ಯಗಳಿಗೆ ಯಾವುದು ಉತ್ತಮ ಎಂದು ಯೋಚಿಸಿ. ಯಾವುದು ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ? + +## ನಿಯೋಜನೆ + +[ಈ ರಿಗ್ರೆಶನ್ ಅನ್ನು ಮರುಪ್ರಯತ್ನಿಸುವುದು](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/4-Logistic/assignment.md b/translations/kn/2-Regression/4-Logistic/assignment.md new file mode 100644 index 000000000..e9902906d --- /dev/null +++ b/translations/kn/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,27 @@ + +# ಕೆಲವು ರಿಗ್ರೆಶನ್ ಮರುಪ್ರಯತ್ನ + +## ಸೂಚನೆಗಳು + +ಪಾಠದಲ್ಲಿ, ನೀವು ಕಂಬಳಿಯ ಡೇಟಾದ ಉಪಸಮೂಹವನ್ನು ಬಳಸಿದ್ದೀರಿ. ಈಗ, ಮೂಲ ಡೇಟಾಕ್ಕೆ ಹಿಂತಿರುಗಿ, ಅದನ್ನು ಶುದ್ಧೀಕರಿಸಿ ಮತ್ತು ಮಾನಕೀಕೃತಗೊಳಿಸಿ, ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿ. + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾತ್ತ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | ಚೆನ್ನಾಗಿ ವಿವರಿಸಲ್ಪಟ್ಟ ಮತ್ತು ಉತ್ತಮ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಮಾದರಿಯೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಕನಿಷ್ಠ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಮಾದರಿಯೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಕಡಿಮೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಮಾದರಿಯೊಂದಿಗೆ ಅಥವಾ ಯಾವುದೇ ಮಾದರಿಯಿಲ್ಲದ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/4-Logistic/notebook.ipynb b/translations/kn/2-Regression/4-Logistic/notebook.ipynb new file mode 100644 index 000000000..5f9102ea7 --- /dev/null +++ b/translations/kn/2-Regression/4-Logistic/notebook.ipynb @@ -0,0 +1,269 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಕಂಬಳಿಯ ಪ್ರಭೇದಗಳು ಮತ್ತು ಬಣ್ಣ\n", + "\n", + "ಅಗತ್ಯವಾದ ಗ್ರಂಥಾಲಯಗಳು ಮತ್ತು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. ಡೇಟಾವನ್ನು ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಪರಿವರ್ತಿಸಿ, ಡೇಟಾದ ಉಪಸಮೂಹವನ್ನು ಒಳಗೊಂಡಂತೆ:\n", + "\n", + "ಬಣ್ಣ ಮತ್ತು ಪ್ರಭೇದದ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ನೋಡೋಣ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
0BALTIMORENaN24 inch binsNaNNaNNaN4/29/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
1BALTIMORENaN24 inch binsNaNNaNNaN5/6/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
2BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
3BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
4BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN11/5/1690.0100.090.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade Date \\\n", + "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n", + "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n", + "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n", + "\n", + " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n", + "0 270.0 280.0 270.0 ... NaN NaN NaN \n", + "1 270.0 280.0 270.0 ... NaN NaN NaN \n", + "2 160.0 160.0 160.0 ... NaN NaN NaN \n", + "3 160.0 160.0 160.0 ... NaN NaN NaN \n", + "4 90.0 100.0 90.0 ... NaN NaN NaN \n", + "\n", + " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n", + "0 NaN NaN NaN E NaN NaN NaN \n", + "1 NaN NaN NaN E NaN NaN NaN \n", + "2 NaN NaN NaN N NaN NaN NaN \n", + "3 NaN NaN NaN N NaN NaN NaN \n", + "4 NaN NaN NaN N NaN NaN NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "full_pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n", + "\n", + "full_pumpkins.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕಾರ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "dee08c2b49057b0de8b6752c4dbca368", + "translation_date": "2025-12-19T16:18:37+00:00", + "source_file": "2-Regression/4-Logistic/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/4-Logistic/solution/Julia/README.md b/translations/kn/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 000000000..d0dec7c81 --- /dev/null +++ b/translations/kn/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb b/translations/kn/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb new file mode 100644 index 000000000..fa5120cc6 --- /dev/null +++ b/translations/kn/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb @@ -0,0 +1,686 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ - ಪಾಠ 4\n", + "\n", + "![ಲಾಜಿಸ್ಟಿಕ್ ವಿರುದ್ಧ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.kn.png)\n", + "\n", + "#### **[ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)**\n", + "\n", + "#### ಪರಿಚಯ\n", + "\n", + "ರಿಗ್ರೆಶನ್ ಕುರಿತು ಈ ಅಂತಿಮ ಪಾಠದಲ್ಲಿ, ಮೂಲ *ಕ್ಲಾಸಿಕ್* ಎಂಎಲ್ ತಂತ್ರಜ್ಞಾನಗಳಲ್ಲಿ ಒಂದಾದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅನ್ನು ನೋಡೋಣ. ನೀವು ಈ ತಂತ್ರಜ್ಞಾನವನ್ನು ದ್ವಿಪದ ವರ್ಗಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಬಳಸುತ್ತೀರಿ. ಈ ಕ್ಯಾಂಡಿ ಚಾಕೊಲೇಟ್ ಆಗಿದೆಯೇ ಅಥವಾ ಇಲ್ಲವೇ? ಈ ರೋಗ ಸಂಕ್ರಾಮಕವೇ ಅಥವಾ ಇಲ್ಲವೇ? ಈ ಗ್ರಾಹಕ ಈ ಉತ್ಪನ್ನವನ್ನು ಆರಿಸುವನೋ ಅಥವಾ ಇಲ್ಲವೇ?\n", + "\n", + "ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಕಲಿಯುವಿರಿ:\n", + "\n", + "- ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ತಂತ್ರಗಳು\n", + "\n", + "✅ ಈ ರೀತಿಯ ರಿಗ್ರೆಶನ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುವುದರ ಬಗ್ಗೆ ನಿಮ್ಮ ಅರ್ಥವನ್ನು ಗಾಢಗೊಳಿಸಿ ಈ [ಕಲಿಕೆ ಘಟಕದಲ್ಲಿ](https://learn.microsoft.com/training/modules/introduction-classification-models/?WT.mc_id=academic-77952-leestott)\n", + "\n", + "## ಪೂರ್ವಾಪೇಕ್ಷಿತ\n", + "\n", + "ಪಂಪ್ಕಿನ್ ಡೇಟಾ ಜೊತೆ ಕೆಲಸ ಮಾಡಿದ ನಂತರ, ನಾವು ಈಗ ಅದರಲ್ಲಿ ಒಂದು ದ್ವಿಪದ ವರ್ಗವಿದೆ ಎಂದು ತಿಳಿದುಕೊಂಡಿದ್ದೇವೆ: `ಬಣ್ಣ`.\n", + "\n", + "ನಾವು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸೋಣ, ಕೆಲವು ಚರಗಳನ್ನು ನೀಡಿದಾಗ, *ಒಂದು ಪಂಪ್ಕಿನ್ ಯಾವ ಬಣ್ಣದಾಗಿರಬಹುದು* ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು (ಕಿತ್ತಳೆ 🎃 ಅಥವಾ ಬಿಳಿ 👻).\n", + "\n", + "> ರಿಗ್ರೆಶನ್ ಕುರಿತು ಪಾಠ ಗುಂಪಿನಲ್ಲಿ ದ್ವಿಪದ ವರ್ಗೀಕರಣದ ಬಗ್ಗೆ ನಾವು ಏಕೆ ಮಾತನಾಡುತ್ತಿದ್ದೇವೆ? ಭಾಷಾಶೈಲಿಯ ಅನುಕೂಲಕ್ಕಾಗಿ ಮಾತ್ರ, ಏಕೆಂದರೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ [ನಿಜವಾಗಿಯೂ ವರ್ಗೀಕರಣ ವಿಧಾನವಾಗಿದೆ](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), ಆದರೂ ಲೀನಿಯರ್ ಆಧಾರಿತದಾಗಿದೆ. ಮುಂದಿನ ಪಾಠ ಗುಂಪಿನಲ್ಲಿ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ ಇತರ ವಿಧಾನಗಳನ್ನು ತಿಳಿಯಿರಿ.\n", + "\n", + "ಈ ಪಾಠಕ್ಕಾಗಿ, ನಾವು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಬೇಕಾಗುತ್ತದೆ:\n", + "\n", + "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಮನರಂಜನೆಯಾಗಿ ಮಾಡುತ್ತದೆ!\n", + "\n", + "- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ.\n", + "\n", + "- `janitor`: [janitor ಪ್ಯಾಕೇಜ್](https://github.com/sfirke/janitor) ಕಳಪೆ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಲು ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಸರಳ ಸಾಧನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "- `ggbeeswarm`: [ggbeeswarm ಪ್ಯಾಕೇಜ್](https://github.com/eclarke/ggbeeswarm) ggplot2 ಬಳಸಿ ಬೀಸ್ವಾರ್ಮ್ ಶೈಲಿಯ ಪ್ಲಾಟ್‌ಗಳನ್ನು ರಚಿಸುವ ವಿಧಾನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"ggbeeswarm\"))`\n", + "\n", + "ಬದಲಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಬೇಕಾದ ಪ್ಯಾಕೇಜುಗಳಿದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ, ಅವು ಇಲ್ಲದಿದ್ದರೆ ನಿಮ್ಮಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load(tidyverse, tidymodels, janitor, ggbeeswarm)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## **ಪ್ರಶ್ನೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ**\n", + "\n", + "ನಮ್ಮ ಉದ್ದೇಶಗಳಿಗೆ, ನಾವು ಇದನ್ನು ದ್ವಿಮೂಲ್ಯವಾಗಿ ವ್ಯಕ್ತಪಡಿಸುವೆವು: 'ಬಿಳಿ' ಅಥವಾ 'ಬಿಳಿಯಲ್ಲದ'. ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ 'ಪಟ್ಟೆ' ಎಂಬ ವರ್ಗವೂ ಇದೆ ಆದರೆ ಅದರ ಕೆಲವು ಉದಾಹರಣೆಗಳಿವೆ, ಆದ್ದರಿಂದ ನಾವು ಅದನ್ನು ಬಳಸುವುದಿಲ್ಲ. ಡೇಟಾಸೆಟ್‌ನಿಂದ ನಲ್ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದ ನಂತರ ಅದು ಅಳಿದುಹೋಗುತ್ತದೆ.\n", + "\n", + "> 🎃 ಮನರಂಜನೆಯ ಸಂಗತಿ, ನಾವು ಕೆಲವೊಮ್ಮೆ ಬಿಳಿ ಕಂಬಳಿಗಳನ್ನು 'ಭೂತ' ಕಂಬಳಿಗಳು ಎಂದು ಕರೆಯುತ್ತೇವೆ. ಅವುಗಳನ್ನು ಕತ್ತರಿಸುವುದು ಸುಲಭವಲ್ಲ, ಆದ್ದರಿಂದ ಅವು ಕಿತ್ತಳೆ ಬಣ್ಣದ ಕಂಬಳಿಗಳಂತೆ ಜನಪ್ರಿಯವಾಗಿಲ್ಲ ಆದರೆ ಅವು ಚೆನ್ನಾಗಿ ಕಾಣುತ್ತವೆ! ಆದ್ದರಿಂದ ನಾವು ನಮ್ಮ ಪ್ರಶ್ನೆಯನ್ನು 'ಭೂತ' ಅಥವಾ 'ಭೂತವಲ್ಲ' ಎಂದು ಮರುರೂಪಿಸಬಹುದು. 👻\n", + "\n", + "## **ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ**\n", + "\n", + "ನೀವು ಹಿಂದಿನ ಅಧ್ಯಯನದಲ್ಲಿ ಕಲಿತ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ನಿಂದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಕೆಲವು ಪ್ರಮುಖ ರೀತಿಗಳಲ್ಲಿ ಭಿನ್ನವಾಗಿದೆ.\n", + "\n", + "#### **ದ್ವಿಮೂಲ್ಯ ವರ್ಗೀಕರಣ**\n", + "\n", + "ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್‌ನಂತೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀಡುವುದಿಲ್ಲ. ಮೊದಲದು `ದ್ವಿಮೂಲ್ಯ ವರ್ಗ` (\"ಕಿತ್ತಳೆ ಅಥವಾ ಕಿತ್ತಳೆಯಲ್ಲ\") ಬಗ್ಗೆ ಭವಿಷ್ಯವಾಣಿ ನೀಡುತ್ತದೆ, ಆದರೆ ನಂತರದದು `ನಿರಂತರ ಮೌಲ್ಯಗಳನ್ನು` ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಸಾಧ್ಯ, ಉದಾಹರಣೆಗೆ ಕಂಬಳಿಯ ಮೂಲ ಮತ್ತು ಹಾರ್ವೆಸ್ಟ್ ಸಮಯವನ್ನು ನೀಡಿದಾಗ, *ಅದರ ಬೆಲೆ ಎಷ್ಟು ಏರಲಿದೆ* ಎಂದು.\n", + "\n", + "![Infographic by Dasani Madipalli](../../../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.kn.png)\n", + "\n", + "### ಇತರೆ ವರ್ಗೀಕರಣಗಳು\n", + "\n", + "ಮಲ್ಟಿನೋಮಿಯಲ್ ಮತ್ತು ಆರ್ಡಿನಲ್ ಸೇರಿದಂತೆ ಇತರೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಪ್ರಕಾರಗಳಿವೆ:\n", + "\n", + "- **ಮಲ್ಟಿನೋಮಿಯಲ್**, ಇದು ಒಂದುಕ್ಕಿಂತ ಹೆಚ್ಚು ವರ್ಗಗಳನ್ನು ಹೊಂದಿರುವುದು - \"ಕಿತ್ತಳೆ, ಬಿಳಿ ಮತ್ತು ಪಟ್ಟೆ\".\n", + "\n", + "- **ಆರ್ಡಿನಲ್**, ಇದು ಕ್ರಮಬದ್ಧ ವರ್ಗಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ನಮ್ಮ ಫಲಿತಾಂಶಗಳನ್ನು ತಾರ್ಕಿಕವಾಗಿ ಕ್ರಮಬದ್ಧಗೊಳಿಸಲು ಉಪಯುಕ್ತ, ಉದಾಹರಣೆಗೆ ನಮ್ಮ ಕಂಬಳಿಗಳು ಸಣ್ಣ, ಸ್ಮಾಲ್, ಮಧ್ಯಮ, ದೊಡ್ಡ, ಎಕ್ಸ್ಎಲ್, ಎಕ್ಸ್ಎಕ್ಸ್ಎಲ್ ಎಂಬ ನಿರ್ದಿಷ್ಟ ಗಾತ್ರಗಳ ಮೂಲಕ ಕ್ರಮಬದ್ಧವಾಗಿವೆ.\n", + "\n", + "![Multinomial vs ordinal regression](../../../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.kn.png)\n", + "\n", + "#### **ಚರಗಳು ಹೊಂದಾಣಿಕೆ ಹೊಂದಿರಬೇಕಾಗಿಲ್ಲ**\n", + "\n", + "ಲೀನಿಯರ್ ರಿಗ್ರೆಶನ್ ಹೆಚ್ಚು ಹೊಂದಾಣಿಕೆಯ ಚರಗಳೊಂದಿಗೆ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ನೆನಪಿಡಿ? ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿದೆ - ಚರಗಳು ಹೊಂದಾಣಿಕೆ ಹೊಂದಿರಬೇಕಾಗಿಲ್ಲ. ಇದು ಸ್ವಲ್ಪ ದುರ್ಬಲ ಹೊಂದಾಣಿಕೆಗಳಿರುವ ಈ ಡೇಟಾಗೆ ಸೂಕ್ತವಾಗಿದೆ.\n", + "\n", + "#### **ನೀವು ಹೆಚ್ಚಿನ ಸ್ವಚ್ಛ ಡೇಟಾವನ್ನು ಬೇಕಾಗುತ್ತದೆ**\n", + "\n", + "ನೀವು ಹೆಚ್ಚು ಡೇಟಾವನ್ನು ಬಳಸಿದರೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಹೆಚ್ಚು ನಿಖರ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡುತ್ತದೆ; ನಮ್ಮ ಸಣ್ಣ ಡೇಟಾಸೆಟ್ ಈ ಕಾರ್ಯಕ್ಕೆ ಸೂಕ್ತವಲ್ಲ, ಆದ್ದರಿಂದ ಅದನ್ನು ಗಮನದಲ್ಲಿಡಿ.\n", + "\n", + "✅ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ಗೆ ಸೂಕ್ತವಾಗುವ ಡೇಟಾ ಪ್ರಕಾರಗಳ ಬಗ್ಗೆ ಯೋಚಿಸಿ\n", + "\n", + "## ಅಭ್ಯಾಸ - ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ\n", + "\n", + "ಮೊದಲು, ಡೇಟಾವನ್ನು ಸ್ವಲ್ಪ ಸ್ವಚ್ಛಗೊಳಿಸಿ, ನಲ್ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಮತ್ತು ಕೆಲವು ಕಾಲಮ್‌ಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆಮಾಡಿ:\n", + "\n", + "1. ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಸೇರಿಸಿ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Load the core tidyverse packages\n", + "library(tidyverse)\n", + "\n", + "# Import the data and clean column names\n", + "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\") %>% \n", + " clean_names()\n", + "\n", + "# Select desired columns\n", + "pumpkins_select <- pumpkins %>% \n", + " select(c(city_name, package, variety, origin, item_size, color)) \n", + "\n", + "# Drop rows containing missing values and encode color as factor (category)\n", + "pumpkins_select <- pumpkins_select %>% \n", + " drop_na() %>% \n", + " mutate(color = factor(color))\n", + "\n", + "# View the first few rows\n", + "pumpkins_select %>% \n", + " slice_head(n = 5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನೀವು ಯಾವಾಗಲೂ ನಿಮ್ಮ ಹೊಸ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಕೆಳಗಿನಂತೆ [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) ಫಂಕ್ಷನ್ ಬಳಸಿ ಒಂದು ನೋಟವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "pumpkins_select %>% \n", + " glimpse()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನಾವು ನಿಜವಾಗಿಯೂ ಬೈನರಿ ವರ್ಗೀಕರಣ ಸಮಸ್ಯೆಯನ್ನು ಮಾಡುತ್ತಿರುವುದನ್ನು ದೃಢೀಕರಿಸೋಣ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Subset distinct observations in outcome column\n", + "pumpkins_select %>% \n", + " distinct(color)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ದೃಶ್ಯೀಕರಣ - ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್\n", + "ಈಗಾಗಲೇ ನೀವು ಪುನಃ ಪಂಪ್ಕಿನ್ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ ಸ್ವಚ್ಛಗೊಳಿಸಿದ್ದೀರಿ, ಇದರಿಂದ ಕೆಲವು ಚರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಡೇಟಾಸೆಟ್ ಉಳಿಯುತ್ತದೆ, ಅದರಲ್ಲಿ ಬಣ್ಣವೂ ಸೇರಿದೆ. ggplot ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿ ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ದೃಶ್ಯೀಕರಿಸೋಣ.\n", + "\n", + "ggplot ಲೈಬ್ರರಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಕೆಲವು ಚೆನ್ನಾದ ವಿಧಾನಗಳನ್ನು ನೀಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ಪ್ರತಿ Variety ಮತ್ತು ಬಣ್ಣದ ಡೇಟಾ ವಿತರಣೆಗಳನ್ನು ಹೋಲಿಸಬಹುದು.\n", + "\n", + "1. geombar ಫಂಕ್ಷನ್ ಬಳಸಿ, ನಮ್ಮ ಪಂಪ್ಕಿನ್ ಡೇಟಾವನ್ನು ಉಪಯೋಗಿಸಿ, ಮತ್ತು ಪ್ರತಿ ಪಂಪ್ಕಿನ್ ವರ್ಗಕ್ಕೆ (ಕಿತ್ತಳೆ ಅಥವಾ ಬಿಳಿ) ಬಣ್ಣ ನಕ್ಷೆಗಳನ್ನು ಸೂಚಿಸಿ, ಇಂತಹ ಪ್ಲಾಟ್ ಅನ್ನು ರಚಿಸಿ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "# Specify colors for each value of the hue variable\n", + "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n", + "\n", + "# Create the bar plot\n", + "ggplot(pumpkins_select, aes(y = variety, fill = color)) +\n", + " geom_bar(position = \"dodge\") +\n", + " scale_fill_manual(values = palette) +\n", + " labs(y = \"Variety\", fill = \"Color\") +\n", + " theme_minimal()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಡೇಟಾವನ್ನು ಗಮನಿಸುವ ಮೂಲಕ, ನೀವು ಬಣ್ಣದ ಡೇಟಾ ವೈವಿಧ್ಯಕ್ಕೆ ಹೇಗೆ ಸಂಬಂಧಿಸಿದೆ ಎಂದು ನೋಡಬಹುದು.\n", + "\n", + "✅ ಈ ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್ ನೀಡಿರುವಾಗ, ನೀವು ಯಾವಂತಹ ಆಸಕ್ತಿದಾಯಕ ಅನ್ವೇಷಣೆಗಳನ್ನು ಕಲ್ಪಿಸಬಹುದು?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ಡೇಟಾ ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆ: ವೈಶಿಷ್ಟ್ಯ ಎನ್‌ಕೋಡಿಂಗ್\n", + "\n", + "ನಮ್ಮ ಕಂಬಳಿಯ ಡೇಟಾಸೆಟ್‌ನ ಎಲ್ಲಾ ಕಾಲಮ್‌ಗಳಿಗೆ ಸ್ಟ್ರಿಂಗ್ ಮೌಲ್ಯಗಳಿವೆ. ವರ್ಗೀಕೃತ ಡೇಟಾ ಮಾನವರಿಗೆ ಸುಲಭವಾಗಿದ್ದರೂ ಯಂತ್ರಗಳಿಗೆ ಅಲ್ಲ. ಯಂತ್ರ ಕಲಿಕೆ ಆಲ್ಗಾರಿದಮ್‌ಗಳು ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಚೆನ್ನಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತವೆ. ಅದಕ್ಕಾಗಿ ಎನ್‌ಕೋಡಿಂಗ್ ಡೇಟಾ ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆ ಹಂತದಲ್ಲಿ ಅತ್ಯಂತ ಪ್ರಮುಖ ಹಂತವಾಗಿದೆ, ಏಕೆಂದರೆ ಇದು ವರ್ಗೀಕೃತ ಡೇಟಾವನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾಗಾಗಿ ಪರಿವರ್ತಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಯಾವುದೇ ಮಾಹಿತಿಯನ್ನು ಕಳೆದುಕೊಳ್ಳದೆ. ಉತ್ತಮ ಎನ್‌ಕೋಡಿಂಗ್ ಉತ್ತಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಲು ಕಾರಣವಾಗುತ್ತದೆ.\n", + "\n", + "ವೈಶಿಷ್ಟ್ಯ ಎನ್‌ಕೋಡಿಂಗ್‌ಗೆ ಎರಡು ಪ್ರಮುಖ ಎನ್‌ಕೋಡರ್‌ಗಳಿವೆ:\n", + "\n", + "1. ಆರ್ಡಿನಲ್ ಎನ್‌ಕೋಡರ್: ಇದು ಆರ್ಡಿನಲ್ ಚರಗಳಿಗಾಗಿ ಸೂಕ್ತವಾಗಿದೆ, ಅವು ವರ್ಗೀಕೃತ ಚರಗಳು ಆಗಿದ್ದು, ಅವುಗಳ ಡೇಟಾ ತಾರ್ಕಿಕ ಕ್ರಮವನ್ನು ಅನುಸರಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ `item_size` ಕಾಲಮ್. ಇದು ಪ್ರತಿ ವರ್ಗವನ್ನು ಒಂದು ಸಂಖ್ಯೆಯಿಂದ ಪ್ರತಿನಿಧಿಸುವ ಮ್ಯಾಪಿಂಗ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ, ಅದು ಕಾಲಮ್‌ನಲ್ಲಿನ ವರ್ಗದ ಕ್ರಮವಾಗಿದೆ.\n", + "\n", + "2. ವರ್ಗೀಕೃತ ಎನ್‌ಕೋಡರ್: ಇದು ನಾಮಮಾತ್ರ ಚರಗಳಿಗಾಗಿ ಸೂಕ್ತವಾಗಿದೆ, ಅವು ವರ್ಗೀಕೃತ ಚರಗಳು ಆಗಿದ್ದು, ಅವುಗಳ ಡೇಟಾ ತಾರ್ಕಿಕ ಕ್ರಮವನ್ನು ಅನುಸರಿಸುವುದಿಲ್ಲ, ಉದಾಹರಣೆಗೆ ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ `item_size` ಹೊರತುಪಡಿಸಿದ ಎಲ್ಲಾ ವೈಶಿಷ್ಟ್ಯಗಳು. ಇದು ಒನ್-ಹಾಟ್ ಎನ್‌ಕೋಡಿಂಗ್ ಆಗಿದ್ದು, ಪ್ರತಿ ವರ್ಗವನ್ನು ಒಂದು ಬೈನರಿ ಕಾಲಮ್ ಮೂಲಕ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ: ಎನ್‌ಕೋಡಿಂಗ್ ಮಾಡಿದ ಚರವು 1 ಆಗಿರುತ್ತದೆ, ಅಂದರೆ ಕಂಬಳಿಯು ಆ ವೈವಿಧ್ಯಕ್ಕೆ ಸೇರಿದ್ದರೆ ಮತ್ತು ಇಲ್ಲದಿದ್ದರೆ 0.\n", + "\n", + "ಟೈಡಿಮೋಡಲ್ಸ್ ಇನ್ನೊಂದು ಚೆನ್ನಾದ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ: [recipes](https://recipes.tidymodels.org/) - ಡೇಟಾ ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆಗಾಗಿ ಪ್ಯಾಕೇಜ್. ನಾವು ಒಂದು `recipe` ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವೆವು, ಅದು ಎಲ್ಲಾ ಭವಿಷ್ಯವಾಣಿ ಕಾಲಮ್‌ಗಳನ್ನು ಪೂರ್ಣಾಂಕಗಳ ಸರಣಿಯಾಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡಬೇಕು ಎಂದು ಸೂಚಿಸುತ್ತದೆ, ಅದನ್ನು `prep` ಮೂಲಕ ಅಗತ್ಯವಿರುವ ಪ್ರಮಾಣಗಳು ಮತ್ತು ಅಂಕಿಅಂಶಗಳನ್ನು ಅಂದಾಜಿಸುತ್ತದೆ ಮತ್ತು ಕೊನೆಗೆ `bake` ಮೂಲಕ ಹೊಸ ಡೇಟಾಗೆ ಗಣನೆಗಳನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.\n", + "\n", + "> ಸಾಮಾನ್ಯವಾಗಿ, recipes ಅನ್ನು ಮಾದರೀಕರಣಕ್ಕಾಗಿ ಪೂರ್ವಪ್ರಕ್ರಿಯೆಕಾರಿಯಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ, ಅದು ಡೇಟಾ ಸೆಟ್‌ಗೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ, ಅದನ್ನು ಮಾದರೀಕರಣಕ್ಕೆ ಸಿದ್ಧಗೊಳಿಸಲು. ಆ ಸಂದರ್ಭದಲ್ಲಿ ನೀವು `workflow()` ಅನ್ನು ಕೈಯಿಂದ prep ಮತ್ತು bake ಬಳಸಿ recipe ಅಂದಾಜಿಸುವುದರ ಬದಲು **ತೀವ್ರವಾಗಿ ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ**. ನಾವು ಇದನ್ನು ಕ್ಷಣದಲ್ಲೇ ನೋಡುತ್ತೇವೆ.\n", + ">\n", + "> ಆದರೆ ಈಗ, ನಾವು recipes + prep + bake ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೇವೆ, ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ಸಿದ್ಧಗೊಳಿಸಲು ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ಸೂಚಿಸಲು ಮತ್ತು ನಂತರ ಅನ್ವಯಿಸಿದ ಹಂತಗಳೊಂದಿಗೆ ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆ ಮಾಡಿದ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯಲು.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Preprocess and extract data to allow some data analysis\n", + "baked_pumpkins <- recipe(color ~ ., data = pumpkins_select) %>%\n", + " # Define ordering for item_size column\n", + " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n", + " # Convert factors to numbers using the order defined above (Ordinal encoding)\n", + " step_integer(item_size, zero_based = F) %>%\n", + " # Encode all other predictors using one hot encoding\n", + " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE) %>%\n", + " prep(data = pumpkin_select) %>%\n", + " bake(new_data = NULL)\n", + "\n", + "# Display the first few rows of preprocessed data\n", + "baked_pumpkins %>% \n", + " slice_head(n = 5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ ಐಟಂ ಗಾತ್ರ ಕಾಲಮ್‌ಗೆ ಆರ್ಡಿನಲ್ ಎನ್‌ಕೋಡರ್ ಬಳಸುವುದರಿಂದ ಏನು ಲಾಭಗಳಿವೆ?\n", + "\n", + "### ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ\n", + "\n", + "ನಾವು ಈಗಾಗಲೇ ನಮ್ಮ ಡೇಟಾವನ್ನು ಪೂರ್ವ-ಪ್ರಕ್ರಿಯೆ ಮಾಡಿರುವುದರಿಂದ, ನಾವು ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಲೇಬಲ್ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ, ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀಡಿದಾಗ ಮಾದರಿ ಲೇಬಲ್ ಅನ್ನು ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು ಎಂಬುದರ ಬಗ್ಗೆ ಒಂದು ಕಲ್ಪನೆ ಪಡೆಯಬಹುದು. ಈ ರೀತಿಯ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಮಾಡಲು ಅತ್ಯುತ್ತಮ ವಿಧಾನ ಡೇಟಾವನ್ನು ಪ್ಲಾಟ್ ಮಾಡುವುದು. \n", + "ನಾವು ಮತ್ತೆ ggplot ನ geom_boxplot_ ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ, ಐಟಂ ಗಾತ್ರ, ವೈವಿಧ್ಯ ಮತ್ತು ಬಣ್ಣಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವರ್ಗೀಕೃತ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ದೃಶ್ಯೀಕರಿಸಲು. ಡೇಟಾವನ್ನು ಉತ್ತಮವಾಗಿ ಪ್ಲಾಟ್ ಮಾಡಲು ನಾವು ಎನ್‌ಕೋಡ್ ಮಾಡಲಾದ ಐಟಂ ಗಾತ್ರ ಕಾಲಮ್ ಮತ್ತು ಎನ್‌ಕೋಡ್ ಮಾಡದ ವೈವಿಧ್ಯ ಕಾಲಮ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Define the color palette\n", + "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n", + "\n", + "# We need the encoded Item Size column to use it as the x-axis values in the plot\n", + "pumpkins_select_plot<-pumpkins_select\n", + "pumpkins_select_plot$item_size <- baked_pumpkins$item_size\n", + "\n", + "# Create the grouped box plot\n", + "ggplot(pumpkins_select_plot, aes(x = `item_size`, y = color, fill = color)) +\n", + " geom_boxplot() +\n", + " facet_grid(variety ~ ., scales = \"free_x\") +\n", + " scale_fill_manual(values = palette) +\n", + " labs(x = \"Item Size\", y = \"\") +\n", + " theme_minimal() +\n", + " theme(strip.text = element_text(size = 12)) +\n", + " theme(axis.text.x = element_text(size = 10)) +\n", + " theme(axis.title.x = element_text(size = 12)) +\n", + " theme(axis.title.y = element_blank()) +\n", + " theme(legend.position = \"bottom\") +\n", + " guides(fill = guide_legend(title = \"Color\")) +\n", + " theme(panel.spacing = unit(0.5, \"lines\"))+\n", + " theme(strip.text.y = element_text(size = 4, hjust = 0)) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ಸ್ವಾರ್ಮ್ ಪ್ಲಾಟ್ ಬಳಸಿ\n", + "\n", + "ಬಣ್ಣವು ದ್ವಿಮೂಲ ವರ್ಗ (ಬಿಳಿ ಅಥವಾ ಅಲ್ಲ) ಆಗಿರುವುದರಿಂದ, ಅದನ್ನು ದೃಶ್ಯೀಕರಣಕ್ಕೆ 'ವಿಶೇಷ ವಿಧಾನ' ಬೇಕಾಗುತ್ತದೆ.\n", + "\n", + "ಐಟಂ_ಗಾತ್ರದ ಸಂಬಂಧದಲ್ಲಿ ಬಣ್ಣದ ವಿತರಣೆ ತೋರಿಸಲು `ಸ್ವಾರ್ಮ್ ಪ್ಲಾಟ್` ಪ್ರಯತ್ನಿಸಿ.\n", + "\n", + "ನಾವು [ggbeeswarm ಪ್ಯಾಕೇಜ್](https://github.com/eclarke/ggbeeswarm) ಅನ್ನು ಬಳಸುತ್ತೇವೆ, ಇದು ggplot2 ಬಳಸಿ ಬೀಸ್ವಾರ್ಮ್ ಶೈಲಿಯ ಪ್ಲಾಟ್‌ಗಳನ್ನು ರಚಿಸುವ ವಿಧಾನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಬೀಸ್ವಾರ್ಮ್ ಪ್ಲಾಟ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಒಟ್ಟಿಗೆ ಮಿಲಿತವಾಗುವ ಬಿಂದುಗಳನ್ನು ಪರಸ್ಪರ ಪಕ್ಕದಲ್ಲಿ ಬಿದ್ದಂತೆ ಚಿತ್ರಿಸುವ ವಿಧಾನವಾಗಿದೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Create beeswarm plots of color and item_size\n", + "baked_pumpkins %>% \n", + " mutate(color = factor(color)) %>% \n", + " ggplot(mapping = aes(x = color, y = item_size, color = color)) +\n", + " geom_quasirandom() +\n", + " scale_color_brewer(palette = \"Dark2\", direction = -1) +\n", + " theme(legend.position = \"none\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಈಗ ನಾವು ಬಣ್ಣದ ದ್ವಿಪದ ವರ್ಗಗಳ ಮತ್ತು ದೊಡ್ಡ ಗಾತ್ರಗಳ ಗುಂಪಿನ ನಡುವಿನ ಸಂಬಂಧದ ಬಗ್ಗೆ ಒಂದು ಕಲ್ಪನೆ ಹೊಂದಿದ್ದೇವೆ, ಬರುವುದಾಗಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿ ನೀಡಲಾದ ಕಂಬಳಿಯ ಸಾಧ್ಯತೆಯ ಬಣ್ಣವನ್ನು ನಿರ್ಧರಿಸೋಣ.\n", + "\n", + "## ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ\n", + "\n", + "ನೀವು ನಿಮ್ಮ ವರ್ಗೀಕರಣ ಮಾದರಿಯಲ್ಲಿ ಬಳಸಲು ಬಯಸುವ ಚರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಡೇಟಾವನ್ನು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗಳಾಗಿ ವಿಭಜಿಸಿ. [rsample](https://rsample.tidymodels.org/), Tidymodels ನಲ್ಲಿ ಒಂದು ಪ್ಯಾಕೇಜ್, ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಡೇಟಾ ವಿಭಜನೆ ಮತ್ತು ಮರುನಮೂನೆಗಾಗಿ ಮೂಲಸೌಕರ್ಯವನ್ನು ಒದಗಿಸುತ್ತದೆ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Split data into 80% for training and 20% for testing\n", + "set.seed(2056)\n", + "pumpkins_split <- pumpkins_select %>% \n", + " initial_split(prop = 0.8)\n", + "\n", + "# Extract the data in each split\n", + "pumpkins_train <- training(pumpkins_split)\n", + "pumpkins_test <- testing(pumpkins_split)\n", + "\n", + "# Print out the first 5 rows of the training set\n", + "pumpkins_train %>% \n", + " slice_head(n = 5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "🙌 ನಾವು ಈಗ ತರಬೇತಿ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ತರಬೇತಿ ಲೇಬಲ್ (ಬಣ್ಣ) ಗೆ ಹೊಂದಿಸುವ ಮೂಲಕ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೇವೆ.\n", + "\n", + "ನಮ್ಮ ಡೇಟಾವನ್ನು ಮಾದರಿಗಾಗಿ ಸಿದ್ಧಗೊಳಿಸಲು ಮಾಡಬೇಕಾದ ಪೂರ್ವಪ್ರಕ್ರಿಯೆ ಹಂತಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಒಂದು ರೆಸಿಪಿಯನ್ನು ರಚಿಸುವುದರಿಂದ ನಾವು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ ಅಂದರೆ: ವರ್ಗೀಕೃತ ಚರಗಳನ್ನು ಪೂರ್ಣಾಂಕಗಳ ಸರಣಿಯಾಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡುವುದು. `baked_pumpkins` ನಂತೆ, ನಾವು `pumpkins_recipe` ಅನ್ನು ರಚಿಸುತ್ತೇವೆ ಆದರೆ ಅದನ್ನು `prep` ಮತ್ತು `bake` ಮಾಡುತ್ತಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ವರ್ಕ್‌ಫ್ಲೋದಲ್ಲಿ ಸೇರಿಸಲಾಗುತ್ತದೆ, ನೀವು ಕೆಲವು ಹಂತಗಳಲ್ಲಿ ಅದನ್ನು ನೋಡುತ್ತೀರಿ.\n", + "\n", + "Tidymodels ನಲ್ಲಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಹಲವಾರು ವಿಧಾನಗಳಿವೆ. `?logistic_reg()` ಅನ್ನು ನೋಡಿ. ಈಗಾಗಲೇ, ನಾವು ಡೀಫಾಲ್ಟ್ `stats::glm()` ಎಂಜಿನ್ ಮೂಲಕ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತೇವೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Create a recipe that specifies preprocessing steps for modelling\n", + "pumpkins_recipe <- recipe(color ~ ., data = pumpkins_train) %>% \n", + " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n", + " step_integer(item_size, zero_based = F) %>% \n", + " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE)\n", + "\n", + "# Create a logistic model specification\n", + "log_reg <- logistic_reg() %>% \n", + " set_engine(\"glm\") %>% \n", + " set_mode(\"classification\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಈಗ ನಮಗೆ ಒಂದು ರೆಸಿಪಿ ಮತ್ತು ಒಂದು ಮಾದರಿ ನಿರ್ದಿಷ್ಟತೆ ಇದ್ದು, ಅವುಗಳನ್ನು ಒಟ್ಟಿಗೆ ಒಂದು ವಸ್ತುವಾಗಿ ಪ್ಯಾಕೇಜ್ ಮಾಡುವ ಮಾರ್ಗವನ್ನು ಕಂಡುಹಿಡಿಯಬೇಕಾಗಿದೆ, ಅದು ಮೊದಲು ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧತೆ ಮಾಡುತ್ತದೆ (ಹಿನ್ನೆಲೆದಲ್ಲಿ prep+bake), ಪೂರ್ವಸಿದ್ಧತೆ ಮಾಡಲಾದ ಡೇಟಾದ ಮೇಲೆ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸುತ್ತದೆ ಮತ್ತು ಸಾಧ್ಯವಾದ ನಂತರದ ಪ್ರಕ್ರಿಯೆಗಳಿಗೂ ಅವಕಾಶ ನೀಡುತ್ತದೆ.\n", + "\n", + "Tidymodels ನಲ್ಲಿ, ಈ ಅನುಕೂಲಕರ ವಸ್ತುವನ್ನು [`workflow`](https://workflows.tidymodels.org/) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಇದು ನಿಮ್ಮ ಮಾದರಿ ಘಟಕಗಳನ್ನು ಅನುಕೂಲಕರವಾಗಿ ಹಿಡಿದಿಡುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Bundle modelling components in a workflow\n", + "log_reg_wf <- workflow() %>% \n", + " add_recipe(pumpkins_recipe) %>% \n", + " add_model(log_reg)\n", + "\n", + "# Print out the workflow\n", + "log_reg_wf\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಒಂದು ವರ್ಕ್‌ಫ್ಲೋವನ್ನು *ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ* ನಂತರ, ಮಾದರಿಯನ್ನು [`fit()`](https://tidymodels.github.io/parsnip/reference/fit.html) ಫಂಕ್ಷನ್ ಬಳಸಿ `ಪ್ರಶಿಕ್ಷಣ` ಮಾಡಬಹುದು. ವರ್ಕ್‌ಫ್ಲೋವು ತರಬೇತಿಗೆ ಮುನ್ನ ರೆಸಿಪಿ ಅಂದಾಜು ಮಾಡುತ್ತದೆ ಮತ್ತು ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ನಾವು ಅದನ್ನು ಕೈಯಿಂದ prep ಮತ್ತು bake ಬಳಸಿ ಮಾಡಲು ಅಗತ್ಯವಿಲ್ಲ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Train the model\n", + "wf_fit <- log_reg_wf %>% \n", + " fit(data = pumpkins_train)\n", + "\n", + "# Print the trained workflow\n", + "wf_fit\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಮಾದರಿ ಮುದ್ರಣವು ತರಬೇತಿ ಸಮಯದಲ್ಲಿ ಕಲಿತ ಸಹಗುಣಾಂಕಗಳನ್ನು ತೋರಿಸುತ್ತದೆ.\n", + "\n", + "ಈಗ ನಾವು ತರಬೇತಿ ಡೇಟಾವನ್ನು ಬಳಸಿ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿದ್ದೇವೆ, ನಾವು [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) ಅನ್ನು ಬಳಸಿ ಪರೀಕ್ಷಾ ಡೇಟಾದ ಮೇಲೆ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು. ನಮ್ಮ ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗೆ ಲೇಬಲ್ಗಳನ್ನು ಮತ್ತು ಪ್ರತಿ ಲೇಬಲ್ಗಾಗಿ ಸಾಧ್ಯತೆಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಮಾದರಿಯನ್ನು ಬಳಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ. ಸಾಧ್ಯತೆ 0.5 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಇದ್ದಾಗ, predict ವರ್ಗ `WHITE` ಆಗಿರುತ್ತದೆ ಇಲ್ಲದಿದ್ದರೆ `ORANGE`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Make predictions for color and corresponding probabilities\n", + "results <- pumpkins_test %>% select(color) %>% \n", + " bind_cols(wf_fit %>% \n", + " predict(new_data = pumpkins_test)) %>%\n", + " bind_cols(wf_fit %>%\n", + " predict(new_data = pumpkins_test, type = \"prob\"))\n", + "\n", + "# Compare predictions\n", + "results %>% \n", + " slice_head(n = 10)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಬಹಳ ಚೆನ್ನಾಗಿದೆ! ಇದು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಒಳನೋಟಗಳನ್ನು ನೀಡುತ್ತದೆ.\n", + "\n", + "### ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮೂಲಕ ಉತ್ತಮ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ\n", + "\n", + "ಪ್ರತಿ ಭವಿಷ್ಯವಾಣಿ ಮತ್ತು ಅದರ ಸಂಬಂಧಿಸಿದ \"ಭೂಮಿಯ ಸತ್ಯ\" ನಿಜವಾದ ಮೌಲ್ಯವನ್ನು ಹೋಲಿಸುವುದು ಮಾದರಿ ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತಿದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಬಹಳ ಪರಿಣಾಮಕಾರಿಯಾದ ವಿಧಾನವಲ್ಲ. ಭಾಗ್ಯವಶಾತ್, Tidymodels ನಲ್ಲಿ ಇನ್ನಷ್ಟು ತಂತ್ರಗಳು ಇವೆ: [`yardstick`](https://yardstick.tidymodels.org/) - ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಮಾಪನಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಮಾದರಿಗಳ ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಅಳೆಯಲು ಬಳಸುವ ಪ್ಯಾಕೇಜ್.\n", + "\n", + "ವರ್ಗೀಕರಣ ಸಮಸ್ಯೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಒಂದು ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಮಾಪನವು [`confusion matrix`](https://wikipedia.org/wiki/Confusion_matrix). ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಒಂದು ವರ್ಗೀಕರಣ ಮಾದರಿ ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತದೆ. ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಪ್ರತಿ ವರ್ಗದಲ್ಲಿ ಎಷ್ಟು ಉದಾಹರಣೆಗಳನ್ನು ಮಾದರಿ ಸರಿಯಾಗಿ ವರ್ಗೀಕರಿಸಿದೆ ಎಂಬುದನ್ನು ಟ್ಯಾಬುಲೇಟು ಮಾಡುತ್ತದೆ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಇದು ನಿಮಗೆ ಎಷ್ಟು ಕಿತ್ತಳೆ ಕಂಬಳಿಗಳನ್ನು ಕಿತ್ತಳೆ ಎಂದು ವರ್ಗೀಕರಿಸಲಾಗಿದೆ ಮತ್ತು ಎಷ್ಟು ಬಿಳಿ ಕಂಬಳಿಗಳನ್ನು ಬಿಳಿ ಎಂದು ವರ್ಗೀಕರಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ; ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ನಿಮಗೆ ಎಷ್ಟು **ತಪ್ಪು** ವರ್ಗಗಳಲ್ಲಿ ವರ್ಗೀಕರಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನೂ ತೋರಿಸುತ್ತದೆ.\n", + "\n", + "yardstick ನಿಂದ [**`conf_mat()`**](https://tidymodels.github.io/yardstick/reference/conf_mat.html) ಫಂಕ್ಷನ್ ಈ ಗಮನಿಸಿದ ಮತ್ತು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ವರ್ಗಗಳ ಕ್ರಾಸ್-ಟ್ಯಾಬ್ಯುಲೇಶನ್ ಅನ್ನು ಲೆಕ್ಕಹಾಕುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Confusion matrix for prediction results\n", + "conf_mat(data = results, truth = color, estimate = .pred_class)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನಾವು ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳೋಣ. ನಮ್ಮ ಮಾದರಿಯನ್ನು ಎರಡು ದ್ವಿಮೂಲ್ಯ ವರ್ಗಗಳಾದ `white` ಮತ್ತು `not-white` ವರ್ಗಗಳ ನಡುವೆ ಕಂಬಳಿಗಳನ್ನು ವರ್ಗೀಕರಿಸಲು ಕೇಳಲಾಗಿದೆ\n", + "\n", + "- ನಿಮ್ಮ ಮಾದರಿ ಒಂದು ಕಂಬಳಿಯನ್ನು white ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ವಾಸ್ತವದಲ್ಲಿ 'white' ವರ್ಗಕ್ಕೆ ಸೇರಿದ್ದರೆ, ಅದನ್ನು ನಾವು `true positive` ಎಂದು ಕರೆಯುತ್ತೇವೆ, ಇದು ಮೇಲಿನ ಎಡಭಾಗದ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ.\n", + "\n", + "- ನಿಮ್ಮ ಮಾದರಿ ಒಂದು ಕಂಬಳಿಯನ್ನು not white ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ವಾಸ್ತವದಲ್ಲಿ 'white' ವರ್ಗಕ್ಕೆ ಸೇರಿದ್ದರೆ, ಅದನ್ನು ನಾವು `false negative` ಎಂದು ಕರೆಯುತ್ತೇವೆ, ಇದು ಕೆಳಗಿನ ಎಡಭಾಗದ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ.\n", + "\n", + "- ನಿಮ್ಮ ಮಾದರಿ ಒಂದು ಕಂಬಳಿಯನ್ನು white ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ವಾಸ್ತವದಲ್ಲಿ 'not-white' ವರ್ಗಕ್ಕೆ ಸೇರಿದ್ದರೆ, ಅದನ್ನು ನಾವು `false positive` ಎಂದು ಕರೆಯುತ್ತೇವೆ, ಇದು ಮೇಲಿನ ಬಲಭಾಗದ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ.\n", + "\n", + "- ನಿಮ್ಮ ಮಾದರಿ ಒಂದು ಕಂಬಳಿಯನ್ನು not white ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದರೆ ಮತ್ತು ಅದು ವಾಸ್ತವದಲ್ಲಿ 'not-white' ವರ್ಗಕ್ಕೆ ಸೇರಿದ್ದರೆ, ಅದನ್ನು ನಾವು `true negative` ಎಂದು ಕರೆಯುತ್ತೇವೆ, ಇದು ಕೆಳಗಿನ ಬಲಭಾಗದ ಸಂಖ್ಯೆಯಿಂದ ತೋರಿಸಲಾಗಿದೆ.\n", + "\n", + "| Truth |\n", + "|:-----:|\n", + "\n", + "\n", + "| | | |\n", + "|---------------|--------|-------|\n", + "| **Predicted** | WHITE | ORANGE |\n", + "| WHITE | TP | FP |\n", + "| ORANGE | FN | TN |\n", + "\n", + "ನೀವು ಊಹಿಸಿದ್ದಂತೆ, ಹೆಚ್ಚು true positives ಮತ್ತು true negatives ಸಂಖ್ಯೆಯನ್ನು ಹೊಂದಿರುವುದು ಮತ್ತು ಕಡಿಮೆ false positives ಮತ್ತು false negatives ಸಂಖ್ಯೆಯನ್ನು ಹೊಂದಿರುವುದು ಇಷ್ಟಕರ, ಇದು ಮಾದರಿ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ.\n", + "\n", + "ಗೊಂದಲ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಉಪಯುಕ್ತವಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಇತರ ಮೆಟ್ರಿಕ್ಸ್ ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ, ಅವುಗಳು ವರ್ಗೀಕರಣ ಮಾದರಿಯ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮವಾಗಿ ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ಕೆಲವು ಮೆಟ್ರಿಕ್ಸ್ ಗಳನ್ನು ನೋಡೋಣ:\n", + "\n", + "🎓 Precision: `TP/(TP + FP)` ಇದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಧನಾತ್ಮಕಗಳಲ್ಲಿನ ನಿಜವಾದ ಧನಾತ್ಮಕಗಳ ಅನುಪಾತವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ಇದನ್ನು [positive predictive value](https://en.wikipedia.org/wiki/Positive_predictive_value \"Positive predictive value\") ಎಂದೂ ಕರೆಯುತ್ತಾರೆ\n", + "\n", + "🎓 Recall: `TP/(TP + FN)` ಇದು ನಿಜವಾಗಿಯೂ ಧನಾತ್ಮಕವಾಗಿದ್ದ ಮಾದರಿಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿನ ಧನಾತ್ಮಕ ಫಲಿತಾಂಶಗಳ ಅನುಪಾತವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ಇದನ್ನು `sensitivity` ಎಂದೂ ಕರೆಯುತ್ತಾರೆ.\n", + "\n", + "🎓 Specificity: `TN/(TN + FP)` ಇದು ನಿಜವಾಗಿಯೂ ನಕಾರಾತ್ಮಕವಾಗಿದ್ದ ಮಾದರಿಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿನ ನಕಾರಾತ್ಮಕ ಫಲಿತಾಂಶಗಳ ಅನುಪಾತವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ.\n", + "\n", + "🎓 Accuracy: `TP + TN/(TP + TN + FP + FN)` ಮಾದರಿಯು ನಿಖರವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಲೇಬಲ್ ಗಳ ಶೇಕಡಾವಾರು.\n", + "\n", + "🎓 F Measure: precision ಮತ್ತು recall ನ ತೂಕಿತ ಸರಾಸರಿ, ಉತ್ತಮವಾದುದು 1 ಮತ್ತು ಕೆಟ್ಟದಾದುದು 0.\n", + "\n", + "ಈ ಮೆಟ್ರಿಕ್ಸ್ ಗಳನ್ನು ಲೆಕ್ಕಹಾಕೋಣ!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Combine metric functions and calculate them all at once\n", + "eval_metrics <- metric_set(ppv, recall, spec, f_meas, accuracy)\n", + "eval_metrics(data = results, truth = color, estimate = .pred_class)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಈ ಮಾದರಿಯ ROC ವಕ್ರವನ್ನು ದೃಶ್ಯೀಕರಿಸಿ\n", + "\n", + "ಹೆಸರಾಗಿರುವ [`ROC ವಕ್ರ`](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) ಅನ್ನು ನೋಡಲು ಇನ್ನೊಂದು ದೃಶ್ಯೀಕರಣ ಮಾಡೋಣ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Make a roc_curve\n", + "results %>% \n", + " roc_curve(color, .pred_ORANGE) %>% \n", + " autoplot()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ROC ವಕ್ರಗಳು ಸಾಮಾನ್ಯವಾಗಿ ವರ್ಗೀಕರಿಸುವ ಯಂತ್ರದ ನಿಜವಾದ ಮತ್ತು ತಪ್ಪು ಧನಾತ್ಮಕಗಳ ದೃಷ್ಟಿಕೋನದಲ್ಲಿ ಔಟ್‌ಪುಟ್ ಅನ್ನು ನೋಡಲು ಬಳಸಲಾಗುತ್ತವೆ. ROC ವಕ್ರಗಳು ಸಾಮಾನ್ಯವಾಗಿ Y ಅಕ್ಷದಲ್ಲಿ `ನಿಜವಾದ ಧನಾತ್ಮಕ ದರ`/ಸಂವೇದನಶೀಲತೆ ಮತ್ತು X ಅಕ್ಷದಲ್ಲಿ `ತಪ್ಪು ಧನಾತ್ಮಕ ದರ`/1-ವಿಶಿಷ್ಟತೆ ಹೊಂದಿರುತ್ತವೆ. ಆದ್ದರಿಂದ, ವಕ್ರದ ತೀವ್ರತೆ ಮತ್ತು ಮಧ್ಯರೇಖೆ ಮತ್ತು ವಕ್ರದ ನಡುವೆ ಇರುವ ಸ್ಥಳವು ಮಹತ್ವಪೂರ್ಣ: ನೀವು ವಕ್ರವು ತ್ವರಿತವಾಗಿ ಮೇಲಕ್ಕೆ ಹೋಗಿ ರೇಖೆಯನ್ನು ದಾಟುವಂತೆ ಬಯಸುತ್ತೀರಿ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಪ್ರಾರಂಭದಲ್ಲಿ ತಪ್ಪು ಧನಾತ್ಮಕಗಳಿವೆ, ನಂತರ ರೇಖೆ ಸರಿಯಾಗಿ ಮೇಲಕ್ಕೆ ಹೋಗುತ್ತದೆ ಮತ್ತು ದಾಟುತ್ತದೆ.\n", + "\n", + "ಕೊನೆಗೆ, ನಿಜವಾದ ವಕ್ರದ ಕೆಳಗಿನ ಪ್ರದೇಶವನ್ನು ಲೆಕ್ಕಿಸಲು `yardstick::roc_auc()` ಅನ್ನು ಬಳಸೋಣ. AUC ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಒಂದು ವಿಧಾನವೆಂದರೆ, ಮಾದರಿ ಯಾದೃಚ್ಛಿಕ ಧನಾತ್ಮಕ ಉದಾಹರಣೆಯನ್ನು ಯಾದೃಚ್ಛಿಕ ನಕಾರಾತ್ಮಕ ಉದಾಹರಣೆಯಿಗಿಂತ ಹೆಚ್ಚು ಶ್ರೇಣೀಕರಿಸುವ ಸಾಧ್ಯತೆ ಎಂದು.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Calculate area under curve\n", + "results %>% \n", + " roc_auc(color, .pred_ORANGE)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಫಲಿತಾಂಶವು ಸುತ್ತಲೂ `0.975` ಇದೆ. AUC 0 ರಿಂದ 1 ರವರೆಗೆ ವ್ಯಾಪಿಸುತ್ತಿರುವುದರಿಂದ, ನೀವು ದೊಡ್ಡ ಸ್ಕೋರ್ ಅನ್ನು ಬಯಸುತ್ತೀರಿ, ಏಕೆಂದರೆ 100% ಸರಿಯಾದ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಮಾಡುವ ಮಾದರಿಯು 1 ರ AUC ಹೊಂದಿರುತ್ತದೆ; ಈ ಪ್ರಕರಣದಲ್ಲಿ, ಮಾದರಿ *ಚೆನ್ನಾಗಿದೆ*.\n", + "\n", + "ಭವಿಷ್ಯದಲ್ಲಿ ವರ್ಗೀಕರಣಗಳ ಪಾಠಗಳಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಮಾದರಿಯ ಸ್ಕೋರ್‌ಗಳನ್ನು ಸುಧಾರಿಸುವುದನ್ನು ಕಲಿಯುತ್ತೀರಿ (ಈ ಪ್ರಕರಣದಲ್ಲಿ ಅಸಮತೋಲನ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸುವಂತಹ).\n", + "\n", + "## 🚀ಸವಾಲು\n", + "\n", + "ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ಇನ್ನೂ ಬಹಳವಿದೆ ಅನ್ವೇಷಿಸಲು! ಆದರೆ ಕಲಿಯಲು ಉತ್ತಮ ಮಾರ್ಗವು ಪ್ರಯೋಗ ಮಾಡುವುದು. ಈ ರೀತಿಯ ವಿಶ್ಲೇಷಣೆಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಹುಡುಕಿ ಮತ್ತು ಅದರಿಂದ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ. ನೀವು ಏನು ಕಲಿತೀರಿ? ಸೂಚನೆ: ಆಸಕ್ತಿದಾಯಕ ಡೇಟಾಸೆಟ್‌ಗಳಿಗೆ [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ.\n", + "\n", + "## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ\n", + "\n", + "ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ನ ಕೆಲವು ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಗಳ ಕುರಿತು [ಸ್ಟ್ಯಾನ್‌ಫರ್ಡ್‌ನ ಈ ಪೇಪರ್](https://web.stanford.edu/~jurafsky/slp3/5.pdf) ನ ಮೊದಲ ಕೆಲವು ಪುಟಗಳನ್ನು ಓದಿ. ನಾವು ಈವರೆಗೆ ಅಧ್ಯಯನ ಮಾಡಿದ ರಿಗ್ರೆಶನ್ ಕಾರ್ಯಗಳ ಒಂದರ ಅಥವಾ ಇನ್ನೊಂದರಿಗಾಗಿ ಉತ್ತಮವಾಗಿ ಹೊಂದಿಕೊಳ್ಳುವ ಕಾರ್ಯಗಳ ಬಗ್ಗೆ ಯೋಚಿಸಿ. ಯಾವುದು ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "anaconda-cloud": "", + "kernelspec": { + "display_name": "R", + "langauge": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.1" + }, + "coopTranslator": { + "original_hash": "feaf125f481a89c468fa115bf2aed580", + "translation_date": "2025-12-19T16:47:45+00:00", + "source_file": "2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/4-Logistic/solution/notebook.ipynb b/translations/kn/2-Regression/4-Logistic/solution/notebook.ipynb new file mode 100644 index 000000000..f5fd9cdfc --- /dev/null +++ b/translations/kn/2-Regression/4-Logistic/solution/notebook.ipynb @@ -0,0 +1,1261 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ - ಪಾಠ 4\n", + "\n", + "ಅಗತ್ಯವಾದ ಲೈಬ್ರರಿಗಳು ಮತ್ತು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. ಡೇಟಾವನ್ನು ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಪರಿವರ್ತಿಸಿ, ಅದು ಡೇಟಾದ ಉಪಸಮೂಹವನ್ನು ಹೊಂದಿರುತ್ತದೆ:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
0BALTIMORENaN24 inch binsNaNNaNNaN4/29/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
1BALTIMORENaN24 inch binsNaNNaNNaN5/6/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
2BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
3BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
4BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN11/5/1690.0100.090.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade Date \n", + "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \\\n", + "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n", + "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n", + "\n", + " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \n", + "0 270.0 280.0 270.0 ... NaN NaN NaN \\\n", + "1 270.0 280.0 270.0 ... NaN NaN NaN \n", + "2 160.0 160.0 160.0 ... NaN NaN NaN \n", + "3 160.0 160.0 160.0 ... NaN NaN NaN \n", + "4 90.0 100.0 90.0 ... NaN NaN NaN \n", + "\n", + " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n", + "0 NaN NaN NaN E NaN NaN NaN \n", + "1 NaN NaN NaN E NaN NaN NaN \n", + "2 NaN NaN NaN N NaN NaN NaN \n", + "3 NaN NaN NaN N NaN NaN NaN \n", + "4 NaN NaN NaN N NaN NaN NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "full_pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n", + "\n", + "full_pumpkins.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
City NamePackageVarietyOriginItem SizeColor
2BALTIMORE24 inch binsHOWDEN TYPEDELAWAREmedORANGE
3BALTIMORE24 inch binsHOWDEN TYPEVIRGINIAmedORANGE
4BALTIMORE24 inch binsHOWDEN TYPEMARYLANDlgeORANGE
5BALTIMORE24 inch binsHOWDEN TYPEMARYLANDlgeORANGE
6BALTIMORE36 inch binsHOWDEN TYPEMARYLANDmedORANGE
\n", + "
" + ], + "text/plain": [ + " City Name Package Variety Origin Item Size Color\n", + "2 BALTIMORE 24 inch bins HOWDEN TYPE DELAWARE med ORANGE\n", + "3 BALTIMORE 24 inch bins HOWDEN TYPE VIRGINIA med ORANGE\n", + "4 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n", + "5 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n", + "6 BALTIMORE 36 inch bins HOWDEN TYPE MARYLAND med ORANGE" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Select the columns we want to use\n", + "columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']\n", + "pumpkins = full_pumpkins.loc[:, columns_to_select]\n", + "\n", + "# Drop rows with missing values\n", + "pumpkins.dropna(inplace=True)\n", + "\n", + "pumpkins.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ನಮ್ಮ ಡೇಟಾವನ್ನು ನೋಡೋಣ!\n", + "\n", + "Seaborn ಬಳಸಿ ಅದನ್ನು ದೃಶ್ಯೀಕರಿಸುವ ಮೂಲಕ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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S0tLab1CCxcuxAcffIBXXnkFbm5uGDZsGF555RW89dZbBtd1cnLCjBkzMGjQIFy6dAleXl4AYHDuomRnZyM7O1t6nJ6eXqJxRERU/THQEMzMzHD79u2nuuaQIUOwefNmDB06FL1798bp06dx5syZYseYmZkBAHJycsq0Znh4OD755BO9dssOi2BlaQ7bBv5lmpeIiKoe76F5jomiiN27d+PXX39F586di+1br149affFwsICPj4+5V5/+fLlOH36NMaOHYvly5fDwcGhyL4pKSn44osvULduXWl3BgCmTJkiq8vCwgIHDhwwOEdoaCjS0tKk4/r16+W+BiIiqh64Q/Mc2rFjBywsLJCbm4uCggK8+eabmDVrVrFjDhw4ILs3pUaNGuWuw9HREe+99x62bNmCnj17GuxTr149iKKI//77D82aNcPGjRthYmIinZ80aRKCg4NlY+rWrWtwLrVaDbVaXe66iYio+mGgeQ5ptVpERkbCxMQEderUgUr15B8Dd3f3Et1DU1oqlarY9Q8cOAArKys4OjoavNnX3t4eHh4eFV4XEREpCwPNc8jc3FwxIaCyghQRET1bGGioRG7duoWsrCxZm52dXYW89FQeGRkZep+HU7NmTb23mBMR0bONNwVTiXh5ecHJyUl2/PHHH1VdFmbMmKFX1+TJk6u6LCIiesoEURTFqi6CqCqkp6fD2toaV05u4du2iYgUjjs0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/LZteu7Z1tfy27mJiBSOOzRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/KRgeu5dXdUElmYlz/Zuw65UYjVERFQW3KEhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCml4OBgCIIgHXZ2dggMDMSpU6dk/QRBwJYtW2RtcXFxeO211+Dg4ABTU1M0aNAAAwYMwP79+4td083NDYIgYO3atXrnfHx8IAgCVq5cqXcu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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "# Specify colors for each values of the hue variable\n", + "palette = {\n", + " 'ORANGE': 'orange',\n", + " 'WHITE': 'wheat',\n", + "}\n", + "# Plot a bar plot to visualize how many pumpkins of each variety are orange or white\n", + "sns.catplot(\n", + " data=pumpkins, y=\"Variety\", hue=\"Color\", kind=\"count\",\n", + " palette=palette, \n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ಡೇಟಾ ಪೂರ್ವ ಪ್ರಕ್ರಿಯೆ\n", + "\n", + "ಡೇಟಾವನ್ನು ಉತ್ತಮವಾಗಿ ಚಿತ್ರಿಸಲು ಮತ್ತು ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಫೀಚರ್‌ಗಳು ಮತ್ತು ಲೇಬಲ್‌ಗಳನ್ನು ಎನ್‌ಕೋಡ್ ಮಾಡೋಣ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['med', 'lge', 'sml', 'xlge', 'med-lge', 'jbo', 'exjbo'],\n", + " dtype=object)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's look at the different values of the 'Item Size' column\n", + "pumpkins['Item Size'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import OrdinalEncoder\n", + "# Encode the 'Item Size' column using ordinal encoding\n", + "item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']]\n", + "ordinal_features = ['Item Size']\n", + "ordinal_encoder = OrdinalEncoder(categories=item_size_categories)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import OneHotEncoder\n", + "# Encode all the other features using one-hot encoding\n", + "categorical_features = ['City Name', 'Package', 'Variety', 'Origin']\n", + "categorical_encoder = OneHotEncoder(sparse_output=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ord__Item Sizecat__City Name_ATLANTAcat__City Name_BALTIMOREcat__City Name_BOSTONcat__City Name_CHICAGOcat__City Name_COLUMBIAcat__City Name_DALLAScat__City Name_DETROITcat__City Name_LOS ANGELEScat__City Name_MIAMI...cat__Origin_MICHIGANcat__Origin_NEW JERSEYcat__Origin_NEW YORKcat__Origin_NORTH CAROLINAcat__Origin_OHIOcat__Origin_PENNSYLVANIAcat__Origin_TENNESSEEcat__Origin_TEXAScat__Origin_VERMONTcat__Origin_VIRGINIA
21.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
31.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.01.0
43.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
53.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
61.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n", + "

5 rows × 48 columns

\n", + "
" + ], + "text/plain": [ + " ord__Item Size cat__City Name_ATLANTA cat__City Name_BALTIMORE \n", + "2 1.0 0.0 1.0 \\\n", + "3 1.0 0.0 1.0 \n", + "4 3.0 0.0 1.0 \n", + "5 3.0 0.0 1.0 \n", + "6 1.0 0.0 1.0 \n", + "\n", + " cat__City Name_BOSTON cat__City Name_CHICAGO cat__City Name_COLUMBIA \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_DALLAS cat__City Name_DETROIT cat__City Name_LOS ANGELES \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_MIAMI ... cat__Origin_MICHIGAN cat__Origin_NEW JERSEY \n", + "2 0.0 ... 0.0 0.0 \\\n", + "3 0.0 ... 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 \n", + "5 0.0 ... 0.0 0.0 \n", + "6 0.0 ... 0.0 0.0 \n", + "\n", + " cat__Origin_NEW YORK cat__Origin_NORTH CAROLINA cat__Origin_OHIO \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_PENNSYLVANIA cat__Origin_TENNESSEE cat__Origin_TEXAS \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_VERMONT cat__Origin_VIRGINIA \n", + "2 0.0 0.0 \n", + "3 0.0 1.0 \n", + "4 0.0 0.0 \n", + "5 0.0 0.0 \n", + "6 0.0 0.0 \n", + "\n", + "[5 rows x 48 columns]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.compose import ColumnTransformer\n", + "ct = ColumnTransformer(transformers=[\n", + " ('ord', ordinal_encoder, ordinal_features),\n", + " ('cat', categorical_encoder, categorical_features)\n", + " ])\n", + "# Get the encoded features as a pandas DataFrame\n", + "ct.set_output(transform='pandas')\n", + "encoded_features = ct.fit_transform(pumpkins)\n", + "encoded_features.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ord__Item Sizecat__City Name_ATLANTAcat__City Name_BALTIMOREcat__City Name_BOSTONcat__City Name_CHICAGOcat__City Name_COLUMBIAcat__City Name_DALLAScat__City Name_DETROITcat__City Name_LOS ANGELEScat__City Name_MIAMI...cat__Origin_NEW JERSEYcat__Origin_NEW YORKcat__Origin_NORTH CAROLINAcat__Origin_OHIOcat__Origin_PENNSYLVANIAcat__Origin_TENNESSEEcat__Origin_TEXAScat__Origin_VERMONTcat__Origin_VIRGINIAColor
21.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
31.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.01.00
43.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
53.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
61.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
\n", + "

5 rows × 49 columns

\n", + "
" + ], + "text/plain": [ + " ord__Item Size cat__City Name_ATLANTA cat__City Name_BALTIMORE \n", + "2 1.0 0.0 1.0 \\\n", + "3 1.0 0.0 1.0 \n", + "4 3.0 0.0 1.0 \n", + "5 3.0 0.0 1.0 \n", + "6 1.0 0.0 1.0 \n", + "\n", + " cat__City Name_BOSTON cat__City Name_CHICAGO cat__City Name_COLUMBIA \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_DALLAS cat__City Name_DETROIT cat__City Name_LOS ANGELES \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_MIAMI ... cat__Origin_NEW JERSEY cat__Origin_NEW YORK \n", + "2 0.0 ... 0.0 0.0 \\\n", + "3 0.0 ... 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 \n", + "5 0.0 ... 0.0 0.0 \n", + "6 0.0 ... 0.0 0.0 \n", + "\n", + " cat__Origin_NORTH CAROLINA cat__Origin_OHIO cat__Origin_PENNSYLVANIA \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_TENNESSEE cat__Origin_TEXAS cat__Origin_VERMONT \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_VIRGINIA Color \n", + "2 0.0 0 \n", + "3 1.0 0 \n", + "4 0.0 0 \n", + "5 0.0 0 \n", + "6 0.0 0 \n", + "\n", + "[5 rows x 49 columns]" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.preprocessing import LabelEncoder\n", + "# Encode the 'Color' column using label encoding\n", + "label_encoder = LabelEncoder()\n", + "encoded_label = label_encoder.fit_transform(pumpkins['Color'])\n", + "encoded_pumpkins = encoded_features.assign(Color=encoded_label)\n", + "encoded_pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ORANGE', 'WHITE']" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's look at the mapping between the encoded values and the original values\n", + "list(label_encoder.inverse_transform([0, 1]))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ಲಕ್ಷಣಗಳು ಮತ್ತು ಲೇಬಲ್ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ವಿಶ್ಲೇಷಣೆ ಮಾಡುವುದು\n" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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drtdw4cPN7s0t/DII4+oZ8+eeuaZZzR06FBt27ZNixcv1uLFi8vdp4eHh373u99p0KBBGj58uPLz87V06VI9+OCDrndioFxeeeUVo1mzZoanp6fRtWtXY+vWrWaX5BYSEhIMSSW2UaNGmV3ar15p112SsWTJErNLcwtjxowxQkJCDE9PT6NRo0bGbbfdZnzxxRdml+XWIiMjjUmTJpldhlsYNmyYERgYaHh6ehpNmjQxhg0bZhw6dMjsstzKZ599ZrRv397w8vIyIiIijMWLF1e4z8zMTGPYsGFGw4YNjaCgIOPhhx828vLyXD6fdWIBAABgOUwnAAAAQJX74YcfXDrO1bm2jMQCAACgytntdscTuUqLn5f3FxcXu9QfI7EAAACoFuvWrVPDhg0lScePH9fQoUP11VdfSZLOnDmjvn37utwXIRYAAADVol27do6nnvr4+Mhmszme2pWZmVmmvlgnFgAAAJZDiAUAAECVq+zbsAixAAAAqHI2m+26+0o75moIsQDgBo4cOSKbzaaUlBSzSwHgppYtW6a6des63rdo0UI5OTmO9w0aNNCWLVtc7o8QCwDlMHr0aN11112O91FRUZo8ebJp9aSlpelPf/qTgoKC5O3traZNm2rw4ME6cOCAJCk4OFjp6ek8IhWAaYYOHSovL6+rttvtdnXt2tXl/lidAAAs7uLFi+rfv79at26tFStWKDAwUMePH9eqVat09uxZSZd+OAQEBJhbKABUIkZiAaCCRo8eraSkJL300kuy2Wyy2Ww6cuSIJGnPnj0aNGiQfHx81LhxY40cOVKnT592nBsVFaUJEyZo8uTJqlevnho3bqzXX39d586dU0xMjHx9fRUWFqZVq1Zd9fP37t2rw4cPa+HCherevbtCQkLUq1cvzZ49W927d5dUcjrB6NGjHbVeuSUmJkqSCgoKNHXqVDVp0kS1a9dWt27dHG0A8EtAiAWACnrppZfUo0cPjR07Vunp6UpPT1dwcLDOnj2rvn37qnPnzkpOTtbq1at18uRJDR061On8t956Sw0bNtS2bds0YcIEjRs3TkOGDFHPnj21c+dO3X777Ro5cqT++9//lvr5jRo1Uo0aNfThhx+qqKjI5Zov15qenq5JkybJ399fERERkqTx48dry5YtWr58ub799lsNGTJEAwcO1MGDByt2sQCgkvDYWQAoh9GjR+vs2bP6+OOPJV0aUe3UqZPmzZvnOGb27NnatGmT1qxZ49h3/PhxBQcHKzU1VeHh4YqKilJRUZE2bdokSSoqKpKfn5/uvvtuvf3225KkjIwMBQYGasuWLY6R1Z9bsGCBHnvsMdntdnXp0kV9+vTRiBEj1KJFC0mXRmKbN2+uXbt2qVOnTk7nrlixQiNGjNC6devUq1cvHT16VC1atNDRo0cVFBTkOK5fv37q2rWrnnnmmYpePgCoMEZiAaCKfPPNN0pISJCPj49juzzSefjwYcdxl59WI12au9qgQQPdcMMNjn2Xn25zrafZxMbGKiMjQ0uXLlWPHj30wQcfqF27dlq7du01a9y1a5dGjhyp+fPnq1evXpKk3bt3q6ioSOHh4U61JyUlOdUNAGbixi4AqCJ5eXmKjo7Ws88+W6ItMDDQ8bpmzZpObTabzWnf5XUTi4uLr/l5vr6+io6OVnR0tGbPnq0BAwZo9uzZ6t+/f6nHZ2Rk6M4779QDDzyg+++/36luu92uHTt2yG63O53j4+NzzRoAoLoQYgGgEnh6epaYj3rjjTfqo48+UmhoqDw8qvfbrc1mU0REhL766qtS2/Pz8zV48GBFREToxRdfdGrr3LmzioqKlJmZqVtvvbU6ygWAMmM6AQBUgtDQUH399dc6cuSITp8+reLiYsXGxurMmTMaPny4tm/frsOHD2vNmjWKiYlx+QYsV6SkpGjw4MH68MMPtW/fPh06dEjx8fF64403NHjw4FLPeeihh3Ts2DG9/PLLOnXqlDIyMpSRkaELFy4oPDxcI0aM0H333acVK1YoLS1N27ZtU1xcnP79739XWt0AUBGMxAJAJZg6dapGjRqltm3b6vz580pLS1NoaKg2b96sxx9/XLfffrsKCgoUEhKigQMHqkaNyhtDaNq0qUJDQzVr1izHUlqX3z/yyCOlnpOUlKT09HS1bdvWaX9CQoKioqK0ZMkSzZ49W3/5y1/0448/qmHDhurevbt+97vfVVrdAFARrE4AAAAAy2E6AQAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBwPswsAAADAr19MTIxLxy1ZssSl42yGYRgVKQgAAAC4nrvvvtvx+ty5c9qwYYOio6Md+woKCrRq1SoVFxe71B8hFgAAANUqLS1NHTp0UG5urmPfqVOnFBAQoKKiIpf6YE4sAAAAqlXNmjV18eJFp335+fny8HB9pishtpwMw1BOTo4YyAYAACiboKAgGYahdevWOfb95z//UbNmzVzugxu7yik3N1d+fn46efKk6tSpY3Y5bsUwDBUUFEiSvLy8ZLPZTK7IfXH9AQDlUaNGDY0YMULR0dEaMGCAzp8/r3Xr1mnmzJku98Gc2HLKycmRn5+fBgwYoJo1a5pdDmCKDz74QN7e3maXAQCwoPPnz2vWrFlav369PD09deedd+rRRx9VjRquTRRgJBYAAADVrlatWpozZ065zyfEVtCM/t+pvo/ZVbiXgkKbnlzdVpL09MB98vLgjwnV6UJRDT2xqo3ZZQAALCYpKcml4yIjI106jhBbQTVrFMvLgzmBZvHyMAix1c619fuAXxvm4wMV07dvXxmGcc3/dgzDcHmdWEJsBV0o4psYALiDgoICDRkyRBLzwYHy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I0NLly7VfffdV+rcUx8fH02aNElTp07Vrl27VFRUpLffflsvvPCCbr/9dqdj77rrLi1btkwPP/xwiX66du2qu+++W9OmTXPa37lzZ0VEROj555/X0KFDrzovtry8vLyu+R/NxIkT+VN2FbPb7ZowYYLmzZtXoo3rD6DKXfGjzdvbW97e3ubV4uZ40IG11atXTzabTd9884327Nmjd955RyNHjpS3t7diYmI0ffp0l/opc9KbP3++CgoKNGDAAG3cuFHHjh3T6tWr1b9/fzVp0kRPP/30Vc996KGH9N133+mjjz7S559/rqysLN1///1q376903bPPfdcdUqBJD399NPasGGDUlNTHftsNpuWLFmi1NRU9erVS59++qkOHjyoffv2adGiRTp16lSJkHP27FllZGQ4befOnSvrJVHDhg3Vt2/fMp+HsrvtttvUsGFDp31cfwAArKl9+/Z69tlnlZaWpiFDhrg8ZVQqR4ht1aqVkpOT1aJFCw0dOlQtW7bUgw8+qD59+mjLli2qX7/+Vc+tX7++7rvvPs2cOVPx8fHq169fqVMG7rnnHiUnJ+vbb78ttZ/w8HCNGTOmxJ2h3bt3144dO9S6dWvFxsaqbdu26tmzp5YtW6a5c+c6Le0lXVr2KzAw0Gm72o1D18KC+9Xr59eb6w8AgDV98803evTRRxUSEqKPP/64TD/Ty7xOrCSFhITozTffvOYxiYmJpe4v7WEHP9e1a1enm8dKu5Hstdde02uvvVZif3h4+HVru1qf5dGjR49S161F1fH399ctt9yiL7/8UrfccgvXH27lymlNV87RBH7tvLy89MEHHzhew7p++uknGYahG264QUePHtWQIUP04Ycfqnv37mXqp1whFv/zyCOPmF2CW3r88cdLPPQAcAdXzgVkWiDcyeXH2MO6nnvuOX300UdKTk5Wjx49NGbMGA0bNky/+c1vytUfIRYALOpCUQ1JxWaX4TYuFlXuDcOAu3nxxRc1cuRIvf322woPD69wf4RYALCoJ1aV/uAZAPglOn78uOMm+6ysLB08eFA2m01hYWGqV69emfvj10oAAABUObvdrrS0NP32t79Vw4YN1b17d3Xr1k0NGzbUb3/7W/3www9l6s9m8ADicsnJyZGfn5+ys7NVp04ds8sB4CYMw3B6BDaqz5XXvk6dOpW+Hjnwa3fy5EndeOON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dWulpKQoOztbH374oUaNGqWkpCSCbDU4duyYJk2apLVr18rb29vsctzOoEGDHK87dOigbt26KSQkRO+//z7TaapBcXGxunTpomeeeUaS1LlzZ+3Zs0eLFi3SqFGjXO4nJibmuscYhqE333zTpf4YiS2jhg0bym636+TJk077T548qYCAAJOqAqrP+PHj9fnnnyshIaFMf/ZBxXl6eiosLEw33XST4uLi1LFjR7300ktml+UWduzYoczMTN14443y8PCQh4eHkpKS9PLLL8vDw0NFRUVml+hW6tatq/DwcB06dMjsUtxCYGBgiV+W27RpU+YpHdnZ2Y7txIkT+te//uW0LzMzU2+//bbL/TESW0aenp666aabtH79escNRcXFxVq/fr3Gjx9vbnFAFTIMQxMmTNDKlSuVmJio5s2bm12S2ysuLlZBQYHZZbiF2267Tbt373baFxMTo4iICD3++OOy2+0mVeae8vLydPjwYY0cOdLsUtxCr169Siyp+N133ykkJKRM/axYscLxOi0tTR06dHDad+rUqTINCBJiy2HKlCkaNWqUunTpoq5du2revHk6d+6cS8PkqJi8vDyn37zT0tKUkpKi+vXrq1mzZiZW9usXGxurd999V5988ol8fX0dc8D9/PxUq1Ytk6v79Zs+fboGDRqkZs2aKTc3V++++64SExO1Zs0as0tzC76+viXmf9euXVsNGjRgXng1mDp1qqKjoxUSEqITJ05oxowZstvtGj58uNmluYVHHnlEPXv21DPPPKOhQ4dq27ZtWrx4sRYvXlzuPmvWrKmLFy867cvPzy/b0mkGyuWVV14xmjVrZnh6ehpdu3Y1tm7danZJbiEhIcGQVGIbNWqU2aX96pV23SUZS5YsMbs0tzBmzBgjJCTE8PT0NBo1amTcdtttxhdffGF2WW4tMjLSmDRpktlluIVhw4YZgYGBhqenp9GkSRNj2LBhxqFDh8wuy6189tlnRvv27Q0vLy8jIiLCWLx4cYX6KyoqMjw9PY21a9c69i1atMgICwtzuQ/WiQUAAEC1GzNmjJYtW6YBAwbo/PnzWrdunWbOnKm//vWvLp1PiAUAAEC1O3/+vGbNmqX169fL09NTd955px599FHVqOHaugOEWAAAAFgON3YBAACgyiUlJbl0XGRkpEvHMRILAACAKme322UYhmw2m2Nfae+Li4td6o+HHQAAAKBapKamKisrS1lZWdq1a5d8fHx05swZZWVl6bvvvnMKtNfDdAIAAABUizp16qhOnTqSJB8fHxmGIT8/P0mX1oktywQBRmIBAABgOYRYAAAAVLnKvg2LEAsAbuDIkSOy2WxKSUkxuxQAburn811r1qyp0NDQax5zLYRYACiH0aNH66677nK8j4qK0uTJk02rJy0tTX/6058UFBQkb29vNW3aVIMHD9aBAwckScHBwUpPT1f79u1NqxGAe9uyZYsaNGjgeB8cHKzdu3c73vv7+ys9Pd3l/rixCwAs7uLFi+rfv79at26tFStWKDAwUMePH9eqVat09uxZSZeWtgkICDC3UABurWvXrtc9xt/f3+X+GIkFgAoaPXq0kpKS9NJLL8lms8lms+nIkSOSpD179mjQoEHy8fFR48aNNXLkSJ0+fdpxblRUlCZMmKDJkyerXr16aty4sV5//XWdO3dOMTEx8vX1VVhYmFatWnXVz9+7d68OHz6shQsXqnv37goJCVGvXr00e/Zsde/eXVLJ6QSjR4921HrllpiYKEkqKCjQ1KlT1aRJE9WuXVvdunVztAHALwEhFgAq6KWXXlKPHj00duxYpaenKz09XcHBwTp79qz69u2rzp07Kzk5WatXr9bJkyc1dOhQp/PfeustNWzYUNu2bdOECRM0btw4DRkyRD179tTOnTt1++23a+TIkfrvf/9b6uc3atRINWrU0IcffqiioiKXa75ca3p6uiZNmiR/f39FRERIksaPH68tW7Zo+fLl+vbbbzVkyBANHDhQBw8erNjFAoBKwhO7AKAcRo8erbNnz+rjjz+WdGlEtVOnTpo3b57jmNmzZ2vTpk1as2aNY9/x48cVHBys1NRUhYeHKyoqSkVFRdq0aZMkqaioSH5+frr77rv19ttvS5IyMjIUGBioLVu2OEZWf27BggV67LHHZLfb1aVLF/Xp00cjRoxQixYtJF0aiW3evLl27dqlTp06OZ27YsUKjRgxQuvWrVOvXr109OhRtWjRQkePHlVQUJDjuH79+qlr16565plnKnr5AKDCGIkFgCryzTffKCEhQT4+Po7t8kjn4cOHHcd16NDB8dput6tBgwa64YYbHPsaN24sScrMzLzqZ8XGxiojI0NLly5Vjx499MEHH6hdu3Zau3btNWvctWuXRo4cqfnz56tX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69y5c2aX5haaNm2qOXPmaMeOHUpOTlbfvn01ePBg7d271+zS3M727dv12muvqUOHDmaX4lbatWun9PR0x/bll1+aXZLbyMrKUq9evVSzZk2tWrVK+/bt0wsvvKB69epV2mf8/ClgLj0VzECZde3a1YiNjXW8LyoqMoKCgoy4uDgTq3I/koyVK1eaXYbbyszMNCQZSUlJZpfiturVq2f885//NLsMt5Kbm2u0atXKWLt2rREZGWlMmjTJ7JLcwowZM4yOHTuaXYbbevzxx41bbrml0vpr06aNcfr0acf7rKwspwx19uxZY9CgQdfth5HYMrpw4YJ27Nihfv36OfbVqFFD/fr105YtW0ysDKhe2dnZkqT69eubXIn7KSoq0vLly3Xu3Dn16NHD7HLcSmxsrO644w6nnwGoHgcPHlRQUJBatGihESNG6OjRo2aX5DY+/fRTdenSRUOGDJG/v786d+6s119/vdz97du3Tw0aNHC8r1u3rqZNm+Z47+fnp//85z/X7YcQW0anT59WUVGR4466yxo3bqyMjAyTqgKqV3FxsSZPnqxevXqpffv2ZpfjNnbv3i0fHx95eXnp4Ycf1sqVK9W2bVuzy3Iby5cv186dOxUXF2d2KW6nW7duevPNN7V69Wq9+uqrSktL06233uq4mx1V6/vvv9err76qVq1aac2aNRo3bpwmTpyot956y9S6eNgBgDKLjY3Vnj17mJNWzVq3bq2UlBRlZ2frww8/1KhRo5SUlESQrQbHjh3TpEmTtHbtWnl7e5tdjtsZNGiQ43WHDh3UrVs3hYSE6P3339f9999vYmXuobi4WF26dNEzzzwjSercubP27NmjRYsWadSoUabVxUhsGTVs2FB2u10nT5502n/y5EkFBASYVBVQfcaPH6/PP/9cCQkJatq0qdnluBVPT0+FhYXppptuUlxcnDp27KiXXnrJ7LLcwo4dO5SZmakbb7xRHh4e8vDwUFJSkl5++WV5eHhcdz1LVK66desqPDxchw4dMrsUtxAYGFjil+U2bdqYPqWDEFtGnp6euummm7R+/XrHvuLiYq1fv565afhVMwxD48eP18qVK7VhwwY1b97c7JLcXnFxsQoKCswuwy3cdttt2r17t1JSUhxbly5dNGLECKWkpMhut5tdolvJy8vT4cOHFRgYaHYpbqFXr14lllT87rvvFBISYlJFlzCdoBymTJmiUaNGqUuXLuratavmzZunc+fOufwsYJRfXl6e02/eaWlpSklJUf369dWsWTMTK/v1i42N1bvvvqtPPvlEvr6+jjngfn5+qlWrlsnV/fpNnz5dgwYNUrNmzZSbm6t3331XiYmJWrNmjdmluQVfX98S879r166tBg0aMC+8GkydOlXR0dEKCQnRiRMnNGPGDNntdg0fPtzs0tzCI488op49e+qZZ57R0KFDtW3bNi1evFiLFy82t7BKWy/BzbzyyitGs2bNDE9PT6Nr167G1q1bzS7JLSQkJBiSSmyjRo0yu7RfvdKuuyRjyZIlZpfmFsaMGWOEhIQYnp6eRqNGjYzbbrvN+OKLL8wuy62xxFb1GTZsmBEYGGh4enoaTZo0MYYNG2YcOnTI7LLcymeffWa0b9/e8PLyMiIiIozFixebXZJhMwwXnusFAAAA/IIwJxYAAACWQ4gFAACA5RBiAQAAYDmEWAAAAFgOIRYAAACWQ4gFAACA5RBiAQAAYDmEWABwA0eOHJHNZlNKSorZpQBApSDEAkA5jB49WnfddZfjfVRUlCZPnmxaPWlpafrTn/6koKAgeXt7q2nTpho8eLAOHDggSQoODlZ6ejqPSAXwq+FhdgEAgIq5ePGi+vfvr9atW2vFihUKDAzU8ePHtWrVKp09e1aSZLfbFRAQYG6hAFCJGIkFgAoaPXq0kpKS9NJLL8lms8lms+nIkSOSpD179mjQoEHy8fFR48aNNXLkSJ0+fdpxblRUlCZMmKDJkyerXr16aty4sV5//XWdO3dOMTEx8vX1VVhYmFatWnXVz9+7d68OHz6shQsXqnv37goJCVGvXr00e/Zsde/eXVLJ6QSjR4921HrllpiYKEkqKCjQ1KlT1aRJE9WuXVvdunVztAHALwEhFgAq6KWXXlKPHj00duxYpaenKz09XcHBwTp79qz69u2rzp07Kzk5WatXr9bJkyc1dOhQp/PfeustNWzYUNu2bdOECRM0btw4DRkyRD179tTOnTt1++23a+TIkfrvf/9b6uc3atRINWrU0IcffqiioiKXa75ca3p6uiZNmiR/f39FRERIksaPH68tW7Zo+fLl+vbbbzVkyBANHDhQBw8erNjFAoBKYjMMwzC7CACwmtGjR+vs2bP6+OOPJV0aUe3UqZPmzZvnOGb27NnatGmT1qxZ49h3/PhxBQcHKzU1VeHh4YqKilJRUZE2bdokSSoqKpKfn5/uvvtuvf3225KkjIwMBQYGasuWLY6R1Z9bsGCBHnvsMdntdnXp0kV9+vTRiBEj1KJFC0mXRmKbN2+uXbt2qVOnTk7nrlixQiNGjNC6devUq1cvHT16VC1atNDRo0cVFBTkOK5fv37q2rWrnnnmmYpePgCoMEZiAaCKfPPNN0pISJCPj49juzzSefjwYcdxHTp0cLy22+1q0KCBbrjhBse+xo0bS5IyMzOv+lmxsbHKyMjQ0qVL1aNHD33wwQdq166d1q5de80ad+3apZEjR2r+/Pnq1auXJGn37t0qKipSeHi4U+1JSUlOdQOAmbixCwCqSF5enqKjo/Xss8+WaAsMDHS8rlmzplObzWZz2mez2SRJxcXF1/w8X19fRUdHKzo6WrNnz9aAAQM0e/Zs9e/fv9TjMzIydOedd+qBBx7Q/fff71S33W7Xjh07ZLfbnc7x8fG5Zg0AUF0IsQBQCTw9PUvMR73xxhv10UcfKTQ0VB4e1fvt1mazKSIiQl999VWp7fn5+Ro8eLAiIiL04osvOrV17txZRUVFyszM1K233lod5QJAmTGdAAAqQWhoqL7++msdOXJEp0+fVnFxsWJjY3XmzBkNHz5c27dv1+HDh7VmzRrFxMS4fAOWK1JSUjR48GB9+OGH2rdvnw4dOqT4+Hi98cYbGjx4cKnnPPTQQzp27JhefvllnTp1ShkZGcrIyNCFCxcUHh6uESNG6L777tOKFSuUlpambdu2KS4uTv/+978rrW4AqAhGYgGgEkydOlWjRo1S27Ztdf78eaWlpSk0NFSbN2/W448/rttvv10FBQUKCQnRwIEDVaNG5Y0hNG3aVKGhoZo1a5ZjKa3L7x955JFSz0lKSlJ6erratm3rtD8hIUFRUVFasmSJZs+erb/85S/68ccf1bBhQ3Xv3l2/+93vKq1uAKgIVicAAACA5TCdAAAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWA4hFgAAAJZDiAUAAIDlEGIBAABgOYRYAAAAWI6H2QUAAADA/WRlZengwYOy2WwKCwtTvXr1ynQ+I7EAAACoNmlpafrtb3+rhg0bqnv37urWrZsaNmyo3/72t/rhhx9c7sdmGIZRhXUCAAAAkqSTJ0/qxhtvlN1uV2xsrCIiIiRJqampmj9/voqKirRz5041btz4un0RYgEAAFAtJk6cqISEBG3btk21atVyasvPz9fNN9+sqKgovfLKK9fti+kEAAAAqBaff/65Zs2aVSLASpK3t7f+/ve/6z//+Y9LfRFiAQAAUC3S09PVoUOHq7a3b99eP/74o0t9EWIBAABQLRo1aqTCwsKrtl+8eNGl+bASIRYAAADV5KabbtIXX3xx1fbVq1erY8eOLvVFiAUAAEC1mDJlil577TVlZ2eXaMvJydHrr7+uyZMnu9QXqxMAAADAcnhiFwAAAKpFixYt5Mr4aVpa2nWPIcQCAACgWrg6VcAVTCcAAACA5XBjFwAAACyH6QQAAACoFq7MiTUMQ0eOHLluX4RYAAAAVItrzYlNS0vT4sWLdf78eZf6Yk4sAAAATHP69Gk9/fTTWrRokbp3765nn31WXbt2ve55jMQCAACg2p07d04vvviinn/+eTVv3lwrV67UwIEDXT6fEAsAAIBqU1hYqMWLF2v27NmqVauWFi5cqBEjRpS5H0IsAAAAqsXy5cv117/+VdnZ2XryyScVGxsrD4/yxVHmxJaTYRjKzc2Vr6+vbDab2eUAAAD84tntdnl5eelPf/qTfH19r3rc3Llzr9sXI7HllJubKz8/P2VnZ6tOnTpmlwMAqGKGYaigoECS5OXlxQAGUA5RUVEyDEPff//9VY9xdXyVkdhyysnJIcQCgBvJz8/XkCFDJEkffPCBvL29Ta4IcG88sQsAABfk5+eX+hqAOZhOAAAAgGoxa9Ysl46bMWPGdY8hxAIA4ILi4uJSXwNw3VNPPaV27dpddUWCwsJC7dmzhxALAEBlyc3NdXpdv359E6sBrGvt2rVq3LhxqW2nTp1SQECAS/2Ua07ssWPHNGbMGAUFBcnT01MhISGaNGmSfvrpJ8cxUVFRstlsstls8vb2Vnh4uOLi4kq942zLli2y2+264447SrQdOXJENptN/v7+Tt9AJKlTp06aOXOm075Dhw5pzJgxatasmby8vNSkSRPddtttWrp0qQoLCx3HXa7t59vy5cvLc0kAAABwHXa7/Zp/ySgqKlKNGq7F0zKH2O+//15dunTRwYMHtWzZMh06dEiLFi3S+vXr1aNHD505c8Zx7NixY5Wenq7U1FRNnz5df/vb37Ro0aISfcbHx2vChAnauHGjTpw4Uern5ubm/j979x5WVZX/cfxzPAiaECpeAC8gIuAlFTMVKQHT1CnTLHMYNEQrc9DUxkprJq1UbKaL5TUbMptKLc2aZgbNFNBMRUzM+y1MTRCvXBxFgf37w8fz6wTqAYEzp/N+Pc9+Ovu2zpf9mH5crr2WXn/99RvWlpaWpk6dOmnv3r2aO3eudu3apZSUFD3++OOaP3++du/ebXX9okWLlJWVZbUNHDiwvI8EAAAANvD09LTq9Py1M2fOqG7duja1Ve7hBPHx8XJ1ddXXX3+t2rVrS5KaN2+u0NBQtWzZUi+++KLmz58vSbrtttssXcJxcXGaM2eO1qxZo9GjR1vaKygo0LJly5Senq7s7Gx98MEHeuGFF0p979ixY/Xmm28qPj5ejRo1KnXeMAwNHz5cQUFB2rhxo1WKb9WqlaKjo0v1AtetW9fmLmsAAADcmjZt2ig5OVnt2rUr83xKSoratGljU1vl6ok9e/asVq9erT/+8Y+WAHuNt7e3YmJitGzZslJh0TAMbdiwQfv27ZOrq6vVuU8//VQhISEKDg7W0KFD9f7775c55CA6OlqBgYF65ZVXyqwtIyNDe/fu1cSJE6/bDc3E1AAAAPbzyCOPaPr06dq3b1+pc/v379err76qQYMG2dRWuULswYMHZRiGWrduXeb51q1b69y5czp16pQkad68eXJ3d5ebm5t69OihkpISPf3001b3JCYmaujQoZKkvn37Kjc3V6mpqaXaNplMmjlzphYuXKjDhw+XOn/gwAFJUnBwsOVYTk6O3N3dLdu8efOs7omOjrY67+7urqNHj5b5sxUWFiovL89qAwAAgO2eeuoptWjRQh06dNCAAQM0adIkTZ48WQ899JA6dOigpk2bWv2L/Y1U6MUuWxf5iomJUUZGhjZu3Kh+/frpxRdfVPfu3S3n9+/fr7S0NEVHR0uSXFxcNGTIECUmJpbZXp8+fXT33XfrL3/5i03f7+XlpYyMDGVkZKhu3bq6fPmy1fm33nrLcv7a5uvrW2ZbCQkJ8vT0tGzNmjWzqQYAAABcVbNmTa1du1YvvviiMjMzNXfuXM2ePVsHDx7Uc889p9TU1FL/an895RoTGxgYKJPJpL179+qhhx4qdX7v3r2qV6+eGjZsKOnq4N3AwEBJV4cNBAYGqlu3burVq5ekq72wRUVFVsHRMAy5ublpzpw58vT0LPUdM2fOVFhYmJ599lmr461atZJ0NRiHhoZKuvoG3LXvL2s+Mm9vb8v5m5k8ebKeeeYZy35eXh5BFgAAoJxuu+02vfTSS3rppZduqZ1y9cR6eXmpd+/emjdvni5evGh1Ljs7Wx9//LGGDBlS5thTd3d3jRs3ThMnTpRhGCoqKtKHH36oN954w6ondMeOHfL19dWSJUvKrKFLly4aNGiQJk2aZHU8NDRUISEhev3116tkEmo3NzfdfvvtVhsAAADso9yzE8yZM0fdu3dXnz59NG3aNLVo0UK7d+/Ws88+qyZNmmj69OnXvXfUqFF69dVXtWLFCrm4uOjcuXMaOXJkqR7Xhx9+WImJiXrqqafKbGf69OmlVnswmUxatGiRevfurfDwcE2ePFmtW7fWlStXtH79ep06dUpms9mqnfPnzys7O9vqmIeHh+rUqVPexwIAAICbiIqKuuk1hmEoJSXlpteVe0xsq1atlJ6eroCAAD366KNq2bKlnnzySUVFRWnTpk03XMGkfv36euyxxzR16lQlJiaqV69eZQ4ZePjhh5Wenq4ffvihzHaCgoI0YsQIXbp0yep4t27dtG3bNgUHBys+Pl5t2rRR9+7dtWTJEr311lulBgrHxcXJx8fHaps9e3Z5HwkAAABssH79egUHBys0NFShoaEKCAjQd999Z9kPDg7W+vXrbWrLZNj6lhas5OXlydPTU7m5uQwtAAAncPbsWcXGxkqSFi9ezLKzQAWYzWadOHHCsuzsjz/+qA4dOlhWZc3JyZG3t7dNQ0MrNDsBAADO5pdzkNu6LCaAqsP/hQAAAHA4hFgAAADYza9ntbJ1hVVCLAAANqhVq1aZnwHYrk+fPnJzc7PsN27cWO+++65l/7bbbtOoUaNsaosXuyqIF7sAwLkYhqHCwkJJV+cOt7W3CEDVoCcWAAAADqfcix0AAOCMCgsLNXjwYEnSZ599xpACoALMZrNsGQRgyxRbhFgAAGzwywV2Ll26RIgFKmDlypVW+ydPntT48eO1ZMkSSVJubq5lPuabIcQCAACgWjz44INW+z/++KNq1KhhOZ6Tk2NzW4yJBQAAgF38+OOPunjxooqLiyVdfXHew8PDpnsJsQAA2OCXY/RsGa8H4Ma2bt2qCRMmqKSkRLNnz1ZBQYHmzp2r4OBgm+4nxAIAYINra7v/+jOA8lm1apX69u2r3/3ud3rnnXcUEBCgZ555Rrfffrvmzp2rP//5zza1U+UhdsGCBfLw8FBRUZHlWEFBgWrWrKnIyEira1NSUmQymXT48GH5+/tr1qxZpdqbOnWqOnbsWOa+v7+/TCbTdbfhw4dL0nXPL126tJJ/egAAAFzTtm1bPfTQQ2rdurX27t2rqKgopaena8GCBXrnnXe0ffv2UuNmr6fKX+yKiopSQUGB0tPT1a1bN0nShg0b5O3trS1btli94ZmcnKzmzZurZcuWFfqurVu3WsZUfPfdd3r44Ye1f/9+y2IEtWvXtly7aNEi9e3b1+r+unXrVuh7AQAAcHNRUVH65ptv5OPjYzlWt25dPfnkk+Vuq8pDbHBwsHx8fJSSkmIJsSkpKRowYIDWrVunzZs3W3pkU1JSFBUVVeHvatiwoeVz/fr1JUmNGjUqM5zWrVtX3t7eFf4uAAAAlM+cOXMqra1qmWIrKipKycnJmjRpkqSrPa7PPfeciouLlZycrMjISF28eFFbtmzRiBEjqqOkcissLLQsNyhdfXsOAAAAtlu8eLFN19kyV2y1hdjx48erqKhIFy9e1Pbt2xUREaErV65owYIFkqRNmzapsLDQqif2+eefLzW49/Lly2rTps0t1xQdHS2z2Wx1bM+ePWrevHmZ1yckJOjll1++5e8FAABwViNGjNDtt98uk8kk6epMH3l5eZZ/NTcMw+YFD6olxEZGRurChQvaunWrzp07p6CgIDVs2FARERGKi4vTpUuXlJKSooCAAKsQ+eyzz1pexrrmnXfe0fr162+5prfeeku9evWyOubr63vd6ydPnqxnnnnGsp+Xl6dmzZrdch0AAADOZN++fWrcuLEkKTMzUx06dNDZs2clSadOnbJ5uGe1hNjAwEA1bdpUycnJOnfunCIiIiRdDY3NmjXTd999p+TkZPXs2dPqvgYNGigwMNDq2LWxrrfK29u7VNs34ubmJjc3t0r5bgAAAFzteTUM47r7N1Jt88RGRUUpJSVFKSkpVlNr9ejRQ0lJSUpLS7ull7oAAADgPKqlJ1a6GmLj4+N15coVS0+sJEVERGjMmDG6fPlytYbY8+fPKzs72+qYh4eH6tSpU201AAAAOBNbe1ltUa09sRcvXlRgYKBlHIR0NcTm5+dbpuKqLnFxcfLx8bHaZs+eXW3fDwAA4GyuvdB1Te3atdWjRw+r89fWD7hpW0ZlRmInkpeXJ09PT+Xm5loWUwAA/HadPXvW8sb04sWLK+0dDcCZ5OTkqFGjRpXSVrX1xAIA4Mhq1KhR5mcAtqusACtV45hYAAAAOLe4uDibrlu0aNFNryHEAgBgg1+O07N1zB4Aax9++KEiIiIsixvcCsbEVlBubq7q1q2rY8eOMSYWAJyAYRiW5cfd3NxKvaACOAsPD48K//o3m836/vvv1aFDh1uug57YCjpz5owksWoXAABwKjk5OWrYsKG9yyDEVtS1t1KPHj0qT09PO1fjfK4t+0tPuH3w/O2L528/PHv74vnb17Xn7+rqau9SJBFiK+zam6menp78j2RHt99+O8/fjnj+9sXztx+evX3x/O3rf2UoDXOEAAAAoFqMHDlSXl5eldIWPbEAAACoFgsXLqy0tgixFeTm5qYpU6bIzc3N3qU4JZ6/ffH87Yvnbz88e/vi+dtXZTz/Fi1a2HRdZmbmTa9hii0AAABUC7PZrIkTJ6pJkyY3vO7pp5++aVuEWAAAAFSLypwnlhe7AAAA4HAIsQAAAHA4hFgAAAA4HEJsBc2dO1f+/v6qVauWunbtqrS0NHuX5BTWr1+v/v37y9fXVyaTSV988YW9S3IaCQkJuuuuu+Th4aFGjRpp4MCB2r9/v73Lchrz589X+/btLZO8h4WFKSkpyd5lOa2ZM2fKZDJp/Pjx9i7FKUydOlUmk8lqCwkJsXdZTuXnn3/W0KFD5eXlpdq1a+uOO+5Qenp6udv5xz/+IT8/v0qpiRBbAcuWLdMzzzyjKVOmWAYn9+nTRzk5OfYu7TfvwoUL6tChg+bOnWvvUpxOamqq4uPjtXnzZq1Zs0ZXrlzRfffdpwsXLti7NKfQtGlTzZw5U9u2bVN6erp69uypAQMGaPfu3fYuzels3bpV7777rtq3b2/vUpxK27ZtlZWVZdm+/fZbe5fkNM6dO6fw8HDVrFlTSUlJ2rNnj9544w3Vq1ev3G399a9/1QcffKCzZ8/eemEGyq1Lly5GfHy8Zb+4uNjw9fU1EhIS7FiV85FkrFy50t5lOK2cnBxDkpGammrvUpxWvXr1jL///e/2LsOp5OfnG61atTLWrFljREREGOPGjbN3SU5hypQpRocOHexdhtN6/vnnjbvvvrtS2ho7dqzRpEkTw83NzRg8eLCxatUqo6SkpEJt0RNbTpcvX9a2bdvUq1cvy7EaNWqoV69e2rRpkx0rA6pXbm6uJKl+/fp2rsT5FBcXa+nSpbpw4YLCwsLsXY5TiY+P1/3332/1ZwCqx8GDB+Xr66uAgADFxMTo6NGj9i7Jafzzn/9U586dNXjwYDVq1EihoaF67733KtTWO++8o+PHj+ujjz7SihUrNHToUPn7+2vKlCk2LXDwS4TYcjp9+rSKi4vVuHFjq+ONGzdWdna2naoCqldJSYnGjx+v8PBwtWvXzt7lOI2dO3fK3d1dbm5ueuqpp7Ry5Uq1adPG3mU5jaVLl+r7779XQkKCvUtxOl27dtUHH3ygVatWaf78+crMzNQ999yj/Px8e5fmFH788UfNnz9frVq10urVqzV69Gg9/fTTWrx4cYXbbNOmjWrUqKHs7GzNnTtX+/bt0x133KHevXtryZIlNrXBsrMAyi0+Pl67du1iTFo1Cw4OVkZGhnJzc7V8+XLFxsYqNTWVIFsNjh07pnHjxmnNmjWqVauWvctxOv369bN8bt++vbp27So/Pz99+umnGjlypB0rcw4lJSXq3LmzZsyYIUkKDQ3Vrl27tGDBAsXGxt5S22azWQ888IAeeOAB5efna+bMmRo2bJiio6Nvei8htpwaNGggs9mskydPWh0/efKkvL297VQVUH3GjBmjf/3rX1q/fr2aNm1q73KciqurqwIDAyVJd955p7Zu3aq3335b7777rp0r++3btm2bcnJy1KlTJ8ux4uJirV+/XnPmzFFhYaHMZrMdK3QudevWVVBQkA4dOmTvUpyCj49Pqb8st27dWitWrKiU9s+cOaOlS5fqo48+0sGDBzV69Gib7mM4QTm5urrqzjvv1Nq1ay3HSkpKtHbtWsam4TfNMAyNGTNGK1eu1Lp169SiRQt7l+T0SkpKVFhYaO8ynMK9996rnTt3KiMjw7J17txZMTExysjIIMBWs4KCAh0+fFg+Pj72LsUphIeHl5pS8cCBA7c0VVZxcbEMw1D//v3VtGlTrVy5UuPGjdOJEyc0e/Zsm9qgJ7YCnnnmGcXGxqpz587q0qWLZs2apQsXLiguLs7epf3mFRQUWP3NOzMzUxkZGapfv76aN29ux8p+++Lj4/XJJ5/oyy+/lIeHh2UMuKenp2rXrm3n6n77Jk+erH79+ql58+bKz8/XJ598opSUFK1evdrepTkFDw+PUuO/69SpIy8vL8aFV4OJEyeqf//+8vPz04kTJzRlyhSZzWab/skZt27ChAnq3r27ZsyYoUcffVRpaWlauHChFi5cWO62PvvsM61YsUJJSUlq2rSpOnXqpDlz5lQsEFfKfAlOaPbs2Ubz5s0NV1dXo0uXLsbmzZvtXZJTSE5ONiSV2mJjY+1d2m9eWc9dkrFo0SJ7l+YURowYYfj5+Rmurq5Gw4YNjXvvvdf4+uuv7V2WU2OKreozZMgQw8fHx3B1dTWaNGliDBkyxDh06JC9y3IqX331ldGuXTvDzc3NCAkJMRYuXFihdmrVqmUMHjzYWL169S3XZDIMwyh/9AUAAADK5+zZs5U2NSMhFgAAAA6HF7sAAADgcAixAAAAcDiEWAAAADgcQiwAAAAcDiEWAAAADocQCwAAAIdDiAUAAIDDIcQCgBM4cuSITCaTMjIy7F0KAFQKQiwAVMDw4cM1cOBAy35kZKTGjx9vt3oyMzP1hz/8Qb6+vqpVq5aaNm2qAQMGaN++fZKkZs2aKSsrS+3atbNbjQBQmVzsXQAA4NZcuXJFvXv3VnBwsD7//HP5+Pjo+PHjSkpK0vnz5yVJZrNZ3t7e9i0UACoRPbEAcIuGDx+u1NRUvf322zKZTDKZTDpy5IgkadeuXerXr5/c3d3VuHFjDRs2TKdPn7bcGxkZqbFjx2r8+PGqV6+eGjdurPfee08XLlxQXFycPDw8FBgYqKSkpOt+/+7du3X48GHNmzdP3bp1k5+fn8LDwzVt2jR169ZNUunhBMOHD7fU+sstJSVFklRYWKiJEyeqSZMmqlOnjrp27Wo5BwD/CwixAHCL3n77bYWFhemJJ55QVlaWsrKy1KxZM50/f149e/ZUaGio0tPTtWrVKp08eVKPPvqo1f2LFy9WgwYNlJaWprFjx2r06NEaPHiwunfvru+//1733Xefhg0bpv/+979lfn/Dhg1Vo0YNLV++XMXFxTbXfK3WrKwsjRs3To0aNVJISIgkacyYMdq0aZOWLl2qH374QYMHD1bfvn118ODBW3tYAFBJTIZhGPYuAgAczfDhw3X+/Hl98cUXkq72qHbs2FGzZs2yXDNt2jRt2LBBq1evthw7fvy4mjVrpv379ysoKEiRkZEqLi7Whg0bJEnFxcXy9PTUoEGD9OGHH0qSsrOz5ePjo02bNll6Vn9t7ty5eu6552Q2m9W5c2dFRUUpJiZGAQEBkq72xLZo0ULbt29Xx44dre79/PPPFRMTo2+++Ubh4eE6evSoAgICdPToUfn6+lqu69Wrl7p06aIZM2bc6uMDgFtGTywAVJEdO3YoOTlZ7u7ulu1aT+fhw4ct17Vv397y2Ww2y8vLS3fccYflWOPGjSVJOTk51/2u+Ph4ZWdn6+OPP1ZYWJg+++wztW3bVmvWrLlhjdu3b9ewYcM0Z84chYeHS5J27typ4uJiBQUFWdWemppqVTcA2BMvdgFAFSkoKFD//v312muvlTrn4+Nj+VyzZk2rcyaTyeqYyWSSJJWUlNzw+zw8PNS/f3/1799f06ZNU58+fTRt2jT17t27zOuzs7P14IMP6vHHH9fIkSOt6jabzdq2bZvMZrPVPe7u7jesAQCqCyEWACqBq6trqfGonTp10ooVK+Tv7y8Xl+r97dZkMikkJETfffddmecvXbqkAQMGKCQkRG+++abVudDQUBUXFysnJ0f33HNPdZQLAOXGcAIAqAT+/v7asmWLjhw5otOnT6ukpETx8fE6e/asoqOjtXXrVh0+fFirV69WXFyczS9g2SIjI0MDBgzQ8uXLtWfPHh06dEiJiYl6//33NWDAgDLvGTVqlI4dO6Z33nlHp06dUnZ2trKzs3X58mUFBQUpJiZGjz32mD7//HNlZmYqLS1NCQkJ+ve//11pdQPAraAnFgAqwcSJExUbG6s2bdro4sWLyszMlL+/vzZu3Kjnn39e9913nwoLC+Xn56e+ffuqRo3K60No2rSp/P399fLLL1um0rq2P2HChDLvSU1NVVZWltq0aWN1PDk5WZGRkVq0aJGmTZumP/3pT/r555/VoEEDdevWTQ888ECl1Q0At4LZCQAAAOBwGE4AAAAAh0OIBQAAgMMhxAIAAMDhEGIBAADgcAixAAAAcDiEWAAAADgcQiwAAAAcDiEWAAAADocQCwAAAIdDiAUAAIDDIcQCAADA4RBiAQAA4HAIsQAAAHA4hFgAAAA4HEIsAAAAHA4hFgAAAA6HEAsAAACHQ4gFAACAwyHEAgAAwOEQYgEAAOBwCLEAAABwOIRYAAAAOBxCLAAAABwOIRYAAAAOhxALAAAAh0OIBQAAgMMhxAIAAMDhEGIBAADgcAixAAAAcDiEWAAAADgcQiwAAAAcDiEWAAAADocQCwAAAIdDiAUAAIDDIcQCAADA4RBiAQAA4HAIsQAAAHA4hFgAAAA4HEIsAAAAHA4hFgAAAA6HEAsAAACHQ4gFAACAwyHEAgAAwOEQYgEAAOBwCLEAAABwOIRYAAAAOBxCLAAAABwOIRYAAAAOhxALAAAAh0OIBQAAgMMhxAIAAMDhEGIBAADgcAixAAAAcDiEWAAAADgcQiwAAAAcDiEWAAAADocQCwAAAIdDiAUAAIDDIcQCAADA4RBiAQAA4HAIsQAAAHA4hFgAAAA4HEIsAAAAHA4hFgAAAA6HEAsAAACHQ4gFAACAwyHEAgAAwOEQYgEAAOBwCLEAAABwOIRYAAAAOBxCLAAAABwOIRYAAAAOhxALAAAAh0OIBQAAgMMhxAIAAMDhEGIBAADgcAixAAAAcDiEWAAAADgcQiwAAAAcDiEWAAAADsfF3gUAAADAecTFxdl03aJFi2543mQYhlEZBQEAAAA3M2jQIKv9CxcuaN26derfv78kqbCwUElJSSopKblhO4RYAAAA2E1mZqbat2+v/Px8SdKpU6fk7e2t4uLiG97HmFgAAADYza/7Uw3DKHWsLIRYAAAAVJsrV65USjuEWAAAAFSbJk2aaPz48dq5c6ckqU6dOvrd735ndY3JZLppO4RYAAAAVJtJkyYpLS1NoaGh6tq1q7744gv9/e9/t5xv2LChDh48eNN2eLELAAAA1W7jxo2KiIhQ27ZtdejQIT3yyCMaMWKEIiIibLqfnlgAAABUu3r16slkMmnHjh3asmWLvL29NWzYMAUFBSkhIeGm99MTCwAAgGq3Z88edejQwepFr+LiYr300kt67bXXVFRUdMP7WbELAAAAdrVjxw599NFHWrJkiTw9PfXaa6/d9B5CbAUZhqH8/Hx5eHjY9AYdAAAA/t+ZM2dkGIbuuOMOHT16VIMHD9by5cvVrVs3m+4nxFZQfn6+PD09dfLkSd1+++32LgeoNoZhqLCwUJLk5ubGX+LglPi1D1Tc3/72N61YsULp6ekKCwvTiBEjNGTIEN12223laocxsRWUl5cnT09P9enTRzVr1rR3OQCAavTZZ5+pVq1a9i4DcEg+Pj567LHHNHLkSAUFBVW4HXpiAQAAUG2OHz8us9l8y+0QYm/RlN4HVN/d3lUA1aewyKQXV7WRJE3vu0duLvxjDpzD5eIaeiGptb3LABzeRx99ZNN1sbGxNzxPiL1FruYSubkwLgrOyc3FIMTCiZTYuwDgN2HChAk3vcYwDEJsVWNEMQA4h1/+fs/rJEDFnT17tlLaYcWuW3S5mF5YAHAGv/z9/toMHQDsp0Ih9tixYxoxYoR8fX3l6uoqPz8/jRs3TmfOnLFcExkZKZPJJJPJpFq1almWECvrb6+bNm2S2WzW/fffX+rckSNHZDKZ1KhRI+Xn51ud69ixo6ZOnWp17NChQxoxYoSaN28uNzc3NWnSRPfee68+/vhjq5UfrtX2623p0qUVeSQAAACwweLFi23abqbcwwl+/PFHhYWFKSgoSEuWLFGLFi20e/duPfvss0pKStLmzZtVv359SdITTzyhV155RYWFhVq3bp2efPJJ1a1bV6NHj7ZqMzExUWPHjlViYqJOnDghX1/fUt+bn5+v119/XS+//PJ1a0tLS1OvXr3Utm1bzZ07VyEhIZKk9PR0zZ07V+3atVOHDh0s1y9atEh9+/a1aqNu3brlfSQAAACw0a/HxJaUlCgvL8+SwQzDUG5ubuWPiY2Pj5erq6u+/vpr1a5dW5LUvHlzhYaGqmXLlnrxxRc1f/58SdJtt90mb29vSVJcXJzmzJmjNWvWWIXYgoICLVu2TOnp6crOztYHH3ygF154odT3jh07Vm+++abi4+PVqFGjUucNw9Dw4cMVFBSkjRs3qkaN/+9kbtWqlaKjo0v1AtetW9dSHwAAAKrer8fEZmZmqkOHDpbjp06dsimflWs4wdmzZ7V69Wr98Y9/tATYa7y9vRUTE6Nly5aVCouGYWjDhg3at2+fXF1drc59+umnCgkJUXBwsIYOHar333+/zCEH0dHRCgwM1CuvvFJmbRkZGdq7d68mTpxoFWB/6VZWVyksLFReXp7VBgAAgFtz+fJllZT8/+wfv/x8I+UKsQcPHpRhGGrduux58lq3bq1z587p1KlTkqR58+bJ3d1dbm5u6tGjh0pKSvT0009b3ZOYmKihQ4dKkvr27avc3FylpqaWattkMmnmzJlauHChDh8+XOr8gQMHJEnBwcGWYzk5OXJ3d7ds8+bNs7onOjra6ry7u7uOHj1a5s+WkJAgT09Py9asWbPrPSYAAADYKCkpSf/973+Vk5Mj6WrPbOPGjW96X4Ve7LJ1apGYmBhlZGRo48aN6tevn1588UV1797dcn7//v1KS0tTdHS0JMnFxUVDhgxRYmJime316dNHd999t/7yl7/Y9P1eXl7KyMhQRkaG6tatq8uXL1udf+uttyznr21ljceVpMmTJys3N9eyHTt2zKYaAAAAUNrx48c1ZswYffzxxzKZTPr973+vOXPmaPTo0erRo8dN7y9XiA0MDJTJZNLevXvLPL93717Vq1dPDRs2lCR5enoqMDBQd911lz799FPNmTNH33zzjeX6xMREFRUVydfXVy4uLnJxcdH8+fO1YsUK5ebmlvkdM2fO1LJly7R9+3ar461atZJ0NRhfYzabFRgYqMDAQLm4lB7+6+3tbTl/o+skyc3NTbfffrvVBgAAgPLZsmWLfv/736tly5bKy8tTamqqxo0bp2+//Vbjxo1TrVq19Prrr9+0nXKFWC8vL/Xu3Vvz5s3TxYsXrc5lZ2fr448/1pAhQ8oce+ru7q5x48Zp4sSJMgxDRUVF+vDDD/XGG29Y9YTu2LFDvr6+WrJkSZk1dOnSRYMGDdKkSZOsjoeGhiokJESvv/66zWMpAAAAUL26d++uCxcuaMuWLfrwww9122236c0337T8a/emTZvUtGnTm7ZT7tkJ5syZo+7du6tPnz6aNm2a1RRbTZo00fTp069776hRo/Tqq69qxYoVcnFx0blz5zRy5Eh5enpaXffwww8rMTFRTz31VJntTJ8+XW3btrXqNTWZTFq0aJF69+6t8PBwTZ48Wa1bt9aVK1e0fv16nTp1Smaz2aqd8+fPKzs72+qYh4eH6tSpU97HAgAAABts2bJFnTt3LnX82qQBx48fV1xcnNasWXPDdso9JrZVq1ZKT09XQECAHn30UbVs2VJPPvmkoqKitGnTJsscsWWpX7++HnvsMU2dOlWJiYnq1atXqQArXQ2x6enp+uGHH8psJygoSCNGjNClS5esjnfr1k3btm1TcHCw4uPj1aZNG3Xv3l1LlizRW2+9VWp+2ri4OPn4+Fhts2fPLu8jAQAAgI3KCrDXfPjhh2rfvn2pjseymAwWgK6QvLw8eXp6auubfmpwO0vPwnkUFpk08V9tJUmvP7Bbbi78FgLncOmKSc/+++qv/U8//bTUVJMAKu7UqVMaNWqUvvnmG73xxht64oknbnpPuYcTwNqVkhoqLLr5dcBvRWGRqczPwG/dlZL//8fLW5l3HHB2v159taioSO+++67atWunnTt3ys/Pz6Z2CLG36OU1QapZs6a9ywDs4sVVbexdAgDAwXz55ZdW+0VFRTp37pwGDRpkc4CVCLEAAACoRt9//32pY1999ZWeeOIJff7550pMTFSLFi1u2g5jYivo2pjYkydPMmcsnIphGCosLJR0df5k/lkVzohf+0DlO3v2rEaNGqVVq1bptdde0x//+McbXk+IraBrITY3N5cQCwAAUEk++eQTxcfH69y5cze8rkLLzgIA4GwMw9ClS5d06dIlm5dfB1B+/fv3v+E0XNcQYgEAsEFhYaEGDx6swYMHW4bUAKh8Fy9e1Nq1a296HSEWAAAb/HKBnV8vtgOg+hFiAQAA4HCYYgsAABuUlJSU+RlA+ZjN5koZV06IBQDABvn5+Vaf69evb8dqAMe1cuXKG57Pzc1VbGzsTdup8uEECxYskIeHh4qK/n9t1oKCAtWsWVORkZFW16akpMhkMunw4cPy9/fXrFmzSrU3depUdezYscx9f39/mUym627Dhw+XpOueX7p0aSX/9AAAAPilBx988IZbnz59bGqnyntio6KiVFBQoPT0dHXr1k2StGHDBnl7e2vLli26dOmSatWqJUlKTk5W8+bN1bJlywp919atW1VcXCxJ+u677/Twww9r//79lnlca9eu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xAIAAKDKff7555bPx44dU2RkpK5cuaKgoCDNnDmz3O0xJhYAAADV5vjx44qMjFSTJk20du1azZ8/X3/961/L3Q49sQAAAKgWJ06cUFRUlHx9fZWUlKQ6deroyy+/1P3336/69evr8ccft7ktQiwAAACqXFZWliIjI9W4cWOtWrVKderUkSRFRkZqyZIlGjJkiOrWratHHnnEpvZMhmEYVVkwAAAAEBISIi8vL61evVru7u6lzn/44YcaNWqULl68aFN79MQCAACgynl5eWnVqlVlBlhJeuyxx3TmzBmb26MnFgAAAFWuoKDgugG2IgixAAAAqHK2LHZgGIY++OADm9ojxAIAAKDKDRo06LrniouL9c033+jixYsqKSmxqT3GxAIAAKDK/XKxg1/68ssv9cILL6hWrVqaMmWKze2x2AEAAACq3YYNG9S9e3dFR0frgQce0I8//qjnnnvO5vsJsQAAAKg2u3btUv/+/XXvvfeqbdu2OnTokF577TV5enqWqx1CLAAAAKrcTz/9pNjYWHXs2FEuLi7auXOn3nvvPfn6+laoPV7sAgAAQJWrVauWatSooaefflphYWHXvW7AgAE2tUeIBQAAQJVzcXHRzWKnYRg2z05AiAUAAIDDYUwsAAAAHA7zxAIAAKDa7NmzR/v371deXl6Z52NjY21qh+EEAAAAqHJ5eXl69NFHtWbNGrm4uKhOnTqlrjEMQ+fOnbOpPXpiAQAAUOWmTJminJwcbdu2TR07drzl9uiJBQAAQJULCgrSggUL1LNnz0ppjxe7AAAAUOVOnDihgICASmuPEAsAAIAq17RpU+3bt6/S2mNMLAAAAKrcoEGDNGHCBLm6uurOO++Up6fnLbXHmFgAAABUuf/+97964okntHTp0huu3MWKXQAAAPifk5WVpQMHDig3N7fM8w8++KBN7RBiK8gwDOXn58vDw0Mmk8ne5QAAADgVxsRWUH5+vjw9PZWbm6vbb7/d3uUAAAA4hLS0NH3yySc6cOCATCaTAgMDFRMToy5dupSrHWYnAADABoZh6NKlS7p06dINx/MBuL5JkyYpLCxMixYtUlZWlk6cOKEPPvhA3bp104svvliutgixAADYoLCwUIMHD9bgwYNVWFho73IAh7N8+XK9+eabmjVrls6ePavt27dr+/btOnv2rN555x399a9/1YoVK2xujxAL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "palette = {\n", + " 'ORANGE': 'orange',\n", + " 'WHITE': 'wheat',\n", + "}\n", + "# We need the encoded Item Size column to use it as the x-axis values in the plot\n", + "pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size']\n", + "\n", + "g = sns.catplot(\n", + " data=pumpkins,\n", + " x=\"Item Size\", y=\"Color\", row='Variety',\n", + " kind=\"box\", orient=\"h\",\n", + " sharex=False, margin_titles=True,\n", + " height=1.8, aspect=4, palette=palette,\n", + ")\n", + "# Defining axis labels \n", + "g.set(xlabel=\"Item Size\", ylabel=\"\").set(xlim=(0,6))\n", + "g.set_titles(row_template=\"{row_name}\")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನಾವು ಈಗ ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಂಬಂಧದ ಮೇಲೆ ಗಮನಹರಿಸೋಣ: ಐಟಂ ಗಾತ್ರ ಮತ್ತು ಬಣ್ಣ!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "warnings.filterwarnings(action='ignore', category=UserWarning, module='seaborn')" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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CqaZPpI33vSZxDsgvoKetmSb8564Msty4KSbTd+ceqvpq4mOtO+mlXfot8hxzVc4Bds/wvWak12GJ38sntwKPMEaV8zy5OArPgXL8eMrnu7uY5aDr3h6T+wUrH53nj3BGjy5lXjyx+JkuxMk2z/C1MUXxFs4BdcwZvvwl8zEth18JTP73VW18BZMwgkcTn+WTKLJtAN5sBA4EP/3ZTHY+yo0vw/BE6Fotvv97Tuhfo1Z4lm+xD3Yh9th99PmmX/F2e5lubEYND5vJoYWznIvywWz1HXvBjOAlJ4RX2IMZqnr7lVmOXP5Oe5ludEw1D9rlimXLHQvywXY/0bP8uQTzMqbRB11ZvmtN2jKTVhmSKTTtCXcZu7uJC7LBWh8CVo3mzsMBVPdsZYtsOcls/y1bLF7sO9uNuUCVJzjHuxjUVOfjjoonu9elgtw4O348uSSfglGZyPU/dEkPxXnuO/eRLrMSqTuJlOfrH7fGvesjy9PLux3l6p1mzlvgRKz9DthySTdrWZuSDRsznfiYB+LmWXN7bVQNM+9pByg6f348uSShe7zHdpnzrcTMG1JfDQW7Ya6Z8zy5LIz3IkLHNu+mzjhXJNoP1UinfuJdbdh+/Oxfe7rbrS7jWjnfiwngJ1V5FpdE4t2E2k3q4Kc7GKshD5mljbvJRbpxA4UYvdLXKJdzURDTVje7KQlxrFIiEjHHrAcnKySnkdGveVGibQ3QjSMk1WE5RngEap8rI6bVT+tra1s3rwZgOnTp/ODH/yA008/ncLCQkaNGnXI7Yc8UREREZFj7rhZ9fPaa69x+unxX0p1/fXXA3DllVdy//33D1OtREREJFMMa6KyaNEiMuTJk4iIiGSg42oyrYiIiHy6KFERERGRjKVERURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVEREQylhIVERERyVhKVERERCRjKVERERGRjKVERURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVEREQylhIVERERyVhKVERERCRjKVERERGRjKVERURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVE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txPt3Ifl+HvakniMwj3HKNZzjNKd7wLXknLTlpae5cnpzndj2rZEO/YQi3RjZ410LSkHjmnfTVwVd6wn0fY6rlb9PPzww1x55ZX8/Oc/Z/bs2dx111088sgj/OUvf0mau9LfkCcqIiIicswdN6t+AC6++GL27NnDv/zLv1BfX8+0adNYtWrVIZMUERER+eQb9jsqR0N3VERERI4/gxm/j6tVPyIiIvLpokRFREREMpYSFREREclYSlREREQkYylRERERkYylREVEREQylhIVERERyVhKVERERCRjKVERERGRjDXsv0L/aPT+Ut3m5uZhromIiIgcrt5x+3B+Of5xnai0tLQAUF1dfYh3ioiISKZpaWkhPz9/wPcc13/rJxqNsnv3bvLy8lx/Kls+mZqbm6murqa2tlZ/20nkE0af70+XWCxGS0sLFRUV2PbAs1CO6zsqtm1TVVU13NWQj1kwGNSFTOQTSp/vT49D3Unppcm0IiIikrGUqIiIiEjGUqIixw2/38/NN9+M3+8f7qqIyDGmz7ekc1xPphUREZFPNt1RERERkYylREVEREQylhIVERERyVhKVERERCRjKVGR48aKFSuoqakhEAgwZ84cXn311eGukogcpRdeeIFzzz2XiooKLMviiSeeGO4qSYZRoiLHhYcffpjrr7+em2++mTfeeINTTjmFJUuW0NjYONxVE5Gj0NbWximnnMKKFSuGuyqSobQ8WY4Lc+bMYdasWdx9992A+TtP1dXVLFu2jBtvvHGYaycix4JlWTz++ON84QtfGO6qSAbRHRXJeF1dXbz++ussXry47zXbtlm8eDHr168fxpqJiMhQU6IiGW/v3r1EIhFKS0tdr5eWllJfXz9MtRIRkY+DEhURERHJWEpUJOMVFRXhOA4NDQ2u1xsaGigrKxumWomIyMdBiYpkPJ/Px8yZM1m9enXfa9FolNWrVzNv3rxhrJmIiAw1z3BXQORwXH/99Vx55ZWceuqpzJ49m7vuuou2tjauvvrq4a6aiByF1tZWNm/e3PfvrVu38tZbb1FYWMioUaOGsWaSKbQ8WY4bd999N8uXL6e+vp5p06bx4x//mDlz5gx3tUTkKKxbt47TTz896fUrr7yS+++//+OvkGQcJSoiIiKSsTRHRURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVEMtott9zCtGnThrsaIjJMlKiIyJCqr69n2bJljB07Fr/fT3V1Neeee67rj0yKiKSjP0ooIkNm27ZtnHbaaYwYMYLly5dz8skn093dzTPPPMN1113HX/7yl4+lHt3d3Xi93o9lXyJybOmOiogMmWuvvRbLsnj11Ve58MILmThxIlOmTOH6669nw4YNAOzYsYPzzz+f3NxcgsEgF110EQ0NDWnLjEaj3HrrrVRVVeH3+5k2bRqrVq3qi2/btg3Lsnj44YdZuHAhgUCABx54YMjbKiJDQ4mKiAyJ/fv3s2rVKq677jpycnKS4iNGjCAajXL++eezf/9+nn/+eZ599lk++ugjLr744rTl/uhHP+L73/8+d955J2+//TZLlizhvPPO48MPP3S978Ybb+Tb3/42mzZtYsmSJce8fSLy8dCjHxEZEps3byYWizFp0qS071m9ejXvvPMOW7dupbq6GoBf//rXTJkyhY0bNzJr1qykbe68806++93vcskllwBwxx13sHbtWu666y5WrFjR976///u/54ILLjjGrRKRj5vuqIjIkIjFYod8z6ZNm6iuru5LUgBOPPFERowYwaZNm5Le39zczO7duznttNNcr5922mlJ7z/11FOPsOYikkmUqIjIkJgwYQKWZX1sE2b7S/W4SUSOP0pURGRIFBYWsmTJElasWEFbW1tS/ODBg0yePJna2lpqa2v7Xn///fc5ePAgJ554YtI2wWCQiooKXn75ZdfrL7/8csr3i8jxT3NURGTIrFixgtNOO43Zs2dz6623MnXqVMLhMM8++yz33HMP77//PieffDKXX345d911F+FwmGuvvZaFCxemfXRzww03cPPNNzNu3DimTZvGfffdx1tvvaWVPSKfUEpURGTIjB07ljfeeIN///d/5zvf+Q51dXUUFxczc+ZM7rnnHizL4sknn2TZsmV89rOfxbZtzj77bH7yk5+kLfNb3/oWTU1NfOc736GxsZETTzyRlStXMmHChI+xZSLycbFihzPjTURERGQYaI6KiIiIZCwlKiIiIpKxlKiIiIhIxlKiIiIiIhlLiYqIiIhkLCUqIiIikrGUqIiIiEjGUqIiIiIiGUuJioiIiGQsJSoiIiKSsZSoiIiISMb6/wHCnL2DXQSZ/gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Suppressing warning message claiming that a portion of points cannot be placed into the plot due to the high number of data points\n", + "import warnings\n", + "warnings.filterwarnings(action='ignore', category=UserWarning, module='seaborn')\n", + "\n", + "palette = {\n", + " 0: 'orange',\n", + " 1: 'wheat'\n", + "}\n", + "sns.swarmplot(x=\"Color\", y=\"ord__Item Size\", hue=\"Color\", data=encoded_pumpkins, palette=palette)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**ಎಚ್ಚರಿಕೆ**: ಎಚ್ಚರಿಕೆಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸುವುದು ಉತ್ತಮ ಅಭ್ಯಾಸವಲ್ಲ ಮತ್ತು ಸಾಧ್ಯವಾದರೆ ತಪ್ಪಿಸಬೇಕು. ಎಚ್ಚರಿಕೆಗಳು ಸಾಮಾನ್ಯವಾಗಿ ನಮ್ಮ ಕೋಡ್ ಅನ್ನು ಸುಧಾರಿಸಲು ಮತ್ತು ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಸಹಾಯ ಮಾಡುವ ಉಪಯುಕ್ತ ಸಂದೇಶಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ. \n", + "ನಾವು ಈ ನಿರ್ದಿಷ್ಟ ಎಚ್ಚರಿಕೆಯನ್ನು ನಿರ್ಲಕ್ಷಿಸುವ ಕಾರಣವು ಪ್ಲಾಟ್‌ನ ಓದುಗತೆಯನ್ನು ಖಚಿತಪಡಿಸುವುದಾಗಿದೆ. ಪ್ಯಾಲೆಟ್ ಬಣ್ಣದ ಸಮ್ಮಿಲನವನ್ನು ಕಾಯ್ದುಕೊಂಡು, ಕಡಿಮೆ ಗುರುತು ಗಾತ್ರದೊಂದಿಗೆ ಎಲ್ಲಾ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಪ್ಲಾಟ್ ಮಾಡುವುದು ಅಸ್ಪಷ್ಟ ದೃಶ್ಯೀಕರಣವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "# X is the encoded features\n", + "X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])]\n", + "# y is the encoded label\n", + "y = encoded_pumpkins['Color']\n", + "\n", + "# Split the data into training and test sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.94 0.98 0.96 166\n", + " 1 0.85 0.67 0.75 33\n", + "\n", + " accuracy 0.92 199\n", + " macro avg 0.89 0.82 0.85 199\n", + "weighted avg 0.92 0.92 0.92 199\n", + "\n", + "Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0\n", + " 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0\n", + " 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n", + " 0 0 0 1 0 0 0 0 0 0 0 0 1 1]\n", + "F1-score: 0.7457627118644068\n" + ] + } + ], + "source": [ + "from sklearn.metrics import f1_score, classification_report \n", + "from sklearn.linear_model import LogisticRegression\n", + "\n", + "# Train a logistic regression model on the pumpkin dataset\n", + "model = LogisticRegression()\n", + "model.fit(X_train, y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "# Evaluate the model and print the results\n", + "print(classification_report(y_test, predictions))\n", + "print('Predicted labels: ', predictions)\n", + "print('F1-score: ', f1_score(y_test, predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[162, 4],\n", + " [ 11, 22]])" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "confusion_matrix(y_test, predictions)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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EBoaii1btkAul78xCtOzZ0+cOHECYWFhb2z//PlzZGVlafSaRKaAV/IkMgHZV/I8ffq0+hBJtm3btqFHjx5Yvnw5hgwZAuDVYQYfHx/89ttvaNmyJbp37w5ra2scPXoUGzduRPXq1REREZHjSp4qlQpffPEFNmzYgPr166uv5BkXF4edO3fi1KlTOH78OJo0aZJnzidPnqBdu3Y4d+4cvLy80KZNG9ja2uKff/7Bli1bEBsbi/T0dACvzjqpWbMm6tSpg/79++Px48dYsWIFSpYsicTERPUpuHfu3EGFChUwf/78HAXldZs2bcLnn38Oe3t7uLm5qU+ZzZaSkoIWLVrg/Pnz+OKLL9CgQQMkJyfjwoUL2LZtG+7cuZPjkAoRgVfyJDIFeV1oSwghlEqlqFSpkqhUqVKOi2QplUrxyy+/iGbNmgkHBwehUCjExx9/LGbMmCFevnyZ52tt27ZNtGvXThQrVkxYWFiI0qVLCx8fHxEVFZWvrCkpKWLBggXik08+EXZ2dkIul4vKlSuLkSNHihs3buRYd+PGjaJixYpCLpeLunXrirCwsLdeaCsviYmJwtraWgAQGzduzHWdpKQkMWnSJPHRRx8JuVwunJycRNOmTcWCBQtERkZGvt4bkSnhCAYRERFpHedgEBERkdaxYBAREZHWsWAQERGR1rFgEBERkdaxYBAREZHWsWAQERGR1pncvUhUKhUePXoEe3t7yGQyqeMQEREZDCEEkpKSUKZMGZiZvX2MwuQKxqNHj+Ds7Cx1DCIiIoN1//59lCtX7q3rmFzByL699P3799W3hyYiIqJ3S0xMhLOzs/p36duYXMHIPizi4ODAgkFERFQA+ZliwEmeREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1khaMw4cPw8vLC2XKlIFMJsPOnTvfuU1UVBTq168PKysrfPTRRwgODtZ5TiIiItKMpAUjOTkZderUQVBQUL7Wv337Njp27IhWrVohJiYGX331FQYMGICwsDAdJyUiIiJNWEj54u3bt0f79u3zvf6KFStQoUIFLFy4EABQvXp1HD16FIsXL4aHh4euYhoVIQSi7z3Dk6R0qaMQEVEh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isTERGRlZSEtLQ0pKSmwsbF543kCAgIwYMAAbNiwQT3MX6lSJQCvDp+cP38emzZtUq8vhIBKpcLt27dRvXr1XLO9ePECdnZ2UKlUSEtLQ/PmzbF69WokJibi0aNHaNasWY71mzVrhnPnzgF4dXijbdu2qFq1Kjw9PdGpUye0a9fuvfZV3759MXDgQCxbtgxWVlbYtGkTevXqBTMzM/X7PHbsWI4RC6VS+db9BgBVq1bFrl27kJaWho0bNyImJgYjR47MsU5QUBDWrl2Le/fuITU1FRkZGahbt+5b8547dw43btyAvb19juVpaWm4efNmAfYAkf5hwSDSU7a2tvjoo49yLLtz5w46deqEoUOH4ttvv0WxYsVw9OhR9O/fHxkZGbn+opw+fTr69OmDPXv2YN++fQgMDMSWLVvQtWtXvHz5EoMHD8aoUaPe2K58+fJ5ZrO3t0d0dDTMzMxQunRpWFtbAwASExPf+b7q16+P27dvY9++fQgPD0fPnj3h7u6Obdu2vXPbvHh5eUEIgT179uCTTz7BkSNHsHjxYvXXX758iRkzZqBbt25vbKtQKPJ8Xrlcrv5/MG/ePHTs2BEzZszArFmzAABbtmzBuHHjsHDhQjRp0gT29vaYP38+/vrrr7fmffnyJRo0aJCj2GXTl4m8RO+LBYPIgJw5cwYqlQoLFy5U/3Wefbz/bapUqYIqVapgzJgx6N27N3755Rd07doV9evXx+XLl98oMu9iZmaW6zYODg4oU6YMjh07BldXV/XyY8eOoVGjRjnW8/HxgY+PDz777DN4enri6dOnKFasWI7ny57voFQq35pHoVCgW7du2LRpE27cuIGqVauifv366q/Xr18f165d0/h9/teUKVPQunVrDB06VP0+mzZtimHDhqnX+e8IhFwufyN//fr1ERISghIlSsDBweG9MhHpK07yJDIgH330ETIzM7F06VLcunULGzZswIoVK/JcPzU1FSNGjEBUVBTu3r2LY8eO4fTp0+pDHxMmTMDx48cxYsQIxMTE4J9//sHvv/+u8STP13399df47rvvEBISgmvXrmHixImIiYnB6NGjAQCLFi3Cr7/+iqtXr+L69evYunUrSpUqlevFwUqUKAFra2vs378f8fHxePHiRZ6v27dvX+zZswdr165VT+7MNm3aNKxfvx4zZszApUuXcOXKFWzZsgVTpkzR6L01adIEtWvXxpw5cwAAlStXxt9//42wsDBcv34dU6dOxenTp3Ns4+LigvPnz+PatWtISEhAZmYm+vbtCycnJ3Tp0gVHjhzB7du3ERUVhVGjRuHBgwcaZSLSW1JPAiGiN+U2MTDbokWLROnSpYW1tbXw8PAQ69evFwDEs2fPhBA5J2Gmp6eLXr16CWdnZyGXy0WZMmXEiBEjckzgPHXqlGjbtq2ws7MTtra2onbt2m9M0nzdfyd5/pdSqRTTp08XZcuWFZaWlqJOnTpi37596q+vXLlS1K1bV9ja2goHBwfRpk0bER0drf46XpvkKYQQq1atEs7OzsLMzEy4urrmuX+USqUoXbq0ACBu3rz5Rq79+/eLpk2bCmtra+Hg4CAaNWokVq5cmef7CAwMFHXq1Hlj+a+//iqsrKzEvXv3RFpamvjiiy+Eo6OjKFKkiBg6dKiYOHFiju0eP36s3r8ARGRkpBBCiNjYWOHr6yucnJyElZWVqFixohg4cKB48eJFnpmIDIlMCCGkrThERERkbHiIhIiIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi07v8A1k+hWenkwRsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import roc_curve, roc_auc_score\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "y_scores = model.predict_proba(X_test)\n", + "# calculate ROC curve\n", + "fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])\n", + "\n", + "# plot ROC curve\n", + "fig = plt.figure(figsize=(6, 6))\n", + "# Plot the diagonal 50% line\n", + "plt.plot([0, 1], [0, 1], 'k--')\n", + "# Plot the FPR and TPR achieved by our model\n", + "plt.plot(fpr, tpr)\n", + "plt.xlabel('False Positive Rate')\n", + "plt.ylabel('True Positive Rate')\n", + "plt.title('ROC Curve')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9749908725812341\n" + ] + } + ], + "source": [ + "# Calculate AUC score\n", + "auc = roc_auc_score(y_test,y_scores[:,1])\n", + "print(auc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "vscode": { + "interpreter": { + "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1" + } + }, + "coopTranslator": { + "original_hash": "ef50cc584e0b79412610cc7da15e1f86", + "translation_date": "2025-12-19T16:37:28+00:00", + "source_file": "2-Regression/4-Logistic/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/2-Regression/README.md b/translations/kn/2-Regression/README.md new file mode 100644 index 000000000..7458f84da --- /dev/null +++ b/translations/kn/2-Regression/README.md @@ -0,0 +1,56 @@ + +# ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳು +## ಪ್ರಾದೇಶಿಕ ವಿಷಯ: ಉತ್ತರ ಅಮೆರಿಕದ ಕಂಬಳಿಯ ಬೆಲೆಗೆ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳು 🎃 + +ಉತ್ತರ ಅಮೆರಿಕದಲ್ಲಿ, ಹ್ಯಾಲೋವೀನ್‌ಗಾಗಿ ಕಂಬಳಿಗಳನ್ನು ಭಯಾನಕ ಮುಖಗಳಾಗಿ ಕತ್ತರಿಸಲಾಗುತ್ತದೆ. ಈ ಆಕರ್ಷಕ ತರಕಾರಿಗಳ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳೋಣ! + +![jack-o-lanterns](../../../translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.kn.jpg) +> ಫೋಟೋ ಬೆತ್ ಟ್ಯೂಟ್ಸ್‌ಮನ್ ಅವರಿಂದ ಅನ್ಸ್ಪ್ಲ್ಯಾಶ್ ನಲ್ಲಿ + +## ನೀವು ಏನು ಕಲಿಯುತ್ತೀರಿ + +[![Introduction to Regression](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Regression Introduction video - Click to Watch!") +> 🎥 ಈ ಪಾಠಕ್ಕೆ ತ್ವರಿತ ಪರಿಚಯ ವೀಡಿಯೊಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ + +ಈ ವಿಭಾಗದ ಪಾಠಗಳು ಯಂತ್ರ ಅಧ್ಯಯನದ ಸಂದರ್ಭದಲ್ಲಿ ರಿಗ್ರೆಶನ್ ಪ್ರಕಾರಗಳನ್ನು ಒಳಗೊಂಡಿವೆ. ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳು ಚರಗಳ ನಡುವಿನ _ಸಂಬಂಧವನ್ನು_ ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು. ಈ ರೀತಿಯ ಮಾದರಿ ಉದ್ದ, ತಾಪಮಾನ ಅಥವಾ ವಯಸ್ಸಿನಂತಹ ಮೌಲ್ಯಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು, ಹೀಗಾಗಿ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುವಾಗ ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ಅನಾವರಣ ಮಾಡುತ್ತದೆ. + +ಈ ಪಾಠ ಸರಣಿಯಲ್ಲಿ, ನೀವು ಲೀನಿಯರ್ ಮತ್ತು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ನಡುವಿನ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಮತ್ತು ಯಾವಾಗ ಒಂದನ್ನು ಇನ್ನೊಂದಕ್ಕಿಂತ ಪ್ರಾಧಾನ್ಯ ನೀಡಬೇಕು ಎಂಬುದನ್ನು ತಿಳಿದುಕೊಳ್ಳುತ್ತೀರಿ. + +[![ML for beginners - Introduction to Regression models for Machine Learning](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML for beginners - Introduction to Regression models for Machine Learning") + +> 🎥 ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳನ್ನು ಪರಿಚಯಿಸುವ ಸಂಕ್ಷಿಪ್ತ ವೀಡಿಯೊಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + +ಈ ಪಾಠಗಳ ಗುಂಪಿನಲ್ಲಿ, ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನ ಕಾರ್ಯಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಿದ್ಧರಾಗುತ್ತೀರಿ, ಇದರಲ್ಲಿ ಡೇಟಾ ವಿಜ್ಞಾನಿಗಳ ಸಾಮಾನ್ಯ ಪರಿಸರವಾದ ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಲು Visual Studio Code ಅನ್ನು ಸಂರಚಿಸುವುದು ಸೇರಿದೆ. ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ ಲೈಬ್ರರಿ ಆಗಿರುವ Scikit-learn ಅನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೀರಿ ಮತ್ತು ಈ ಅಧ್ಯಾಯದಲ್ಲಿ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಿ ನಿಮ್ಮ ಮೊದಲ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುತ್ತೀರಿ. + +> ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಬಗ್ಗೆ ಕಲಿಯಲು ಸಹಾಯ ಮಾಡುವ ಉಪಯುಕ್ತ ಕಡಿಮೆ-ಕೋಡ್ ಸಾಧನಗಳಿವೆ. ಈ ಕಾರ್ಯಕ್ಕಾಗಿ [Azure ML ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### ಪಾಠಗಳು + +1. [ಉಪಕರಣಗಳು](1-Tools/README.md) +2. [ಡೇಟಾ ನಿರ್ವಹಣೆ](2-Data/README.md) +3. [ಲೀನಿಯರ್ ಮತ್ತು ಬಹುಪದ ರಿಗ್ರೆಶನ್](3-Linear/README.md) +4. [ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್](4-Logistic/README.md) + +--- +### ಕ್ರೆಡಿಟ್‌ಗಳು + +"ML with regression" ಅನ್ನು ♥️ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ರಚಿಸಿದ್ದಾರೆ + +♥️ ಪ್ರಶ್ನೋತ್ತರದ ಸಹಯೋಗಿಗಳು: [ಮುಹಮ್ಮದ್ ಸಕೀಬ್ ಖಾನ್ ಇನಾನ್](https://twitter.com/Sakibinan) ಮತ್ತು [ಓರ್ನೆಲ್ಲಾ ಅಲ್ಟುನ್ಯಾನ್](https://twitter.com/ornelladotcom) + +ಕಂಬಳಿ ಡೇಟಾಸೆಟ್ ಅನ್ನು [ಈ ಪ್ರಾಜೆಕ್ಟ್ ಕಾಗಲ್‌ನಲ್ಲಿ](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) ಸೂಚಿಸಲಾಗಿದೆ ಮತ್ತು ಅದರ ಡೇಟಾ ಯುನೈಟೆಡ್ ಸ್ಟೇಟ್ಸ್ ಡಿಪಾರ್ಟ್‌ಮೆಂಟ್ ಆಫ್ ಅಗ್ರಿಕಲ್ಚರ್ ವಿತರಿಸುವ [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) ನಿಂದ ಪಡೆದಿದೆ. ನಾವು ಬಣ್ಣವನ್ನು ಪ್ರಭೇದದ ಆಧಾರದ ಮೇಲೆ ಕೆಲವು ಅಂಕಿಗಳನ್ನು ಸೇರಿಸಿ ವಿತರಣೆ ಸಾಮಾನ್ಯಗೊಳಿಸಿದ್ದೇವೆ. ಈ ಡೇಟಾ ಸಾರ್ವಜನಿಕ ಕ್ಷೇತ್ರದಲ್ಲಿದೆ. + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/3-Web-App/1-Web-App/README.md b/translations/kn/3-Web-App/1-Web-App/README.md new file mode 100644 index 000000000..d813e5255 --- /dev/null +++ b/translations/kn/3-Web-App/1-Web-App/README.md @@ -0,0 +1,361 @@ + +# ಎಂಎಲ್ ಮಾದರಿಯನ್ನು ಬಳಸಲು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು NUFORC ಡೇಟಾಬೇಸ್‌ನಿಂದ ಪಡೆದಿರುವ _ಹಿಂದಿನ ಶತಮಾನದಲ್ಲಿ ನಡೆದ UFO ದೃಶ್ಯಾವಳಿಗಳು_ ಎಂಬ ಅತೀ ವಿಶಿಷ್ಟ ಡೇಟಾ ಸೆಟ್ ಮೇಲೆ ಎಂಎಲ್ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವಿರಿ. + +ನೀವು ಕಲಿಯುವಿರಿ: + +- ತರಬೇತುಗೊಂಡ ಮಾದರಿಯನ್ನು 'ಪಿಕಲ್' ಮಾಡುವ ವಿಧಾನ +- ಆ ಮಾದರಿಯನ್ನು ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸುವ ವಿಧಾನ + +ನಾವು ಡೇಟಾ ಶುದ್ಧೀಕರಣ ಮತ್ತು ಮಾದರಿ ತರಬೇತಿಗಾಗಿ ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ಬಳಸುವುದನ್ನು ಮುಂದುವರಿಸುವೆವು, ಆದರೆ ನೀವು ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಇನ್ನೊಂದು ಹಂತಕ್ಕೆ ತೆಗೆದುಕೊಂಡು ಹೋಗಬಹುದು, ಅಂದರೆ ಮಾದರಿಯನ್ನು 'ವೈಲ್ಡ್' ನಲ್ಲಿ, ಅಂದರೆ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸುವುದನ್ನು ಅನ್ವೇಷಿಸುವುದು. + +ಇದಕ್ಕಾಗಿ, ನೀವು ಫ್ಲಾಸ್ಕ್ ಬಳಸಿ ಒಂದು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಬೇಕಾಗುತ್ತದೆ. + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಾಣ + +ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಗಳನ್ನು ಉಪಯೋಗಿಸಲು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವ ಹಲವು ವಿಧಾನಗಳಿವೆ. ನಿಮ್ಮ ವೆಬ್ ವಾಸ್ತುಶಿಲ್ಪವು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವ ರೀತಿಯನ್ನು ಪ್ರಭಾವಿತ ಮಾಡಬಹುದು. ನೀವು ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ವ್ಯವಹಾರದಲ್ಲಿ ಡೇಟಾ ಸೈನ್ಸ್ ತಂಡವು ತರಬೇತುಗೊಂಡ ಮಾದರಿಯನ್ನು ನೀವು ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸಬೇಕೆಂದು ಬಯಸಿದರೆ ಎಂದು ಕಲ್ಪಿಸಿ. + +### ಪರಿಗಣನೆಗಳು + +ನೀವು ಕೇಳಬೇಕಾದ ಹಲವಾರು ಪ್ರಶ್ನೆಗಳಿವೆ: + +- **ಇದು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆಯೇ?** ನೀವು ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸುತ್ತಿದ್ದರೆ ಅಥವಾ IoT ಸನ್ನಿವೇಶದಲ್ಲಿ ಮಾದರಿಯನ್ನು ಬಳಸಬೇಕಾದರೆ, ನೀವು [TensorFlow Lite](https://www.tensorflow.org/lite/) ಬಳಸಿ ಆಂಡ್ರಾಯ್ಡ್ ಅಥವಾ iOS ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಮಾದರಿಯನ್ನು ಬಳಸಬಹುದು. +- **ಮಾದರಿ ಎಲ್ಲಿಗೆ ಇರಲಿದೆ?** ಕ್ಲೌಡ್‌ನಲ್ಲಿ ಅಥವಾ ಸ್ಥಳೀಯವಾಗಿ? +- **ಆಫ್‌ಲೈನ್ ಬೆಂಬಲ.** ಅಪ್ಲಿಕೇಶನ್ ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕೇ? +- **ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು ಯಾವ ತಂತ್ರಜ್ಞಾನ ಬಳಸಲಾಗಿದೆ?** ಆಯ್ದ ತಂತ್ರಜ್ಞಾನವು ನೀವು ಬಳಸಬೇಕಾದ ಉಪಕರಣಗಳನ್ನು ಪ್ರಭಾವಿತ ಮಾಡಬಹುದು. + - **TensorFlow ಬಳಕೆ.** ಉದಾಹರಣೆಗೆ, TensorFlow ಬಳಸಿ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುತ್ತಿದ್ದರೆ, ಆ ಪರಿಸರವು [TensorFlow.js](https://www.tensorflow.org/js/) ಬಳಸಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ TensorFlow ಮಾದರಿಯನ್ನು ಪರಿವರ್ತಿಸಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ. + - **PyTorch ಬಳಕೆ.** ನೀವು [PyTorch](https://pytorch.org/)ಂತಹ ಗ್ರಂಥಾಲಯ ಬಳಸಿ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದರೆ, ಅದನ್ನು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಬಳಸಲು [ONNX](https://onnx.ai/) (Open Neural Network Exchange) ಸ್ವರೂಪದಲ್ಲಿ ರಫ್ತು ಮಾಡಬಹುದು, ಮತ್ತು [Onnx Runtime](https://www.onnxruntime.ai/) ಬಳಸಿ ಬಳಸಬಹುದು. ಈ ಆಯ್ಕೆಯನ್ನು ಭವಿಷ್ಯ ಪಾಠದಲ್ಲಿ Scikit-learn ತರಬೇತುಗೊಂಡ ಮಾದರಿಗಾಗಿ ಅನ್ವೇಷಿಸಲಾಗುವುದು. + - **Lobe.ai ಅಥವಾ Azure Custom Vision ಬಳಕೆ.** ನೀವು [Lobe.ai](https://lobe.ai/) ಅಥವಾ [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott)ಂತಹ ಎಂಎಲ್ ಸಾಫ್ಟ್‌ವೇರ್ ಸೇವೆಗಳನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ, ಈ ರೀತಿಯ ಸಾಫ್ಟ್‌ವೇರ್ ವಿವಿಧ ವೇದಿಕೆಗಳಿಗೆ ಮಾದರಿಯನ್ನು ರಫ್ತು ಮಾಡುವ ಮಾರ್ಗಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದರಲ್ಲಿ ನಿಮ್ಮ ಆನ್‌ಲೈನ್ ಅಪ್ಲಿಕೇಶನ್ ಮೂಲಕ ಕ್ಲೌಡ್‌ನಲ್ಲಿ ಪ್ರಶ್ನೆ ಕೇಳಲು ವಿಶೇಷ API ನಿರ್ಮಿಸುವುದೂ ಸೇರಿದೆ. + +ನೀವು ಸಂಪೂರ್ಣ ಫ್ಲಾಸ್ಕ್ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸುವ ಅವಕಾಶವನ್ನೂ ಹೊಂದಿದ್ದೀರಿ, ಅದು ವೆಬ್ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಸ್ವತಃ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಬಹುದು. ಇದನ್ನು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಸನ್ನಿವೇಶದಲ್ಲಿ TensorFlow.js ಬಳಸಿ ಮಾಡಬಹುದು. + +ನಮ್ಮ ಉದ್ದೇಶಕ್ಕಾಗಿ, ನಾವು ಪೈಥಾನ್ ಆಧಾರಿತ ನೋಟ್ಬುಕ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದುದರಿಂದ, ತರಬೇತುಗೊಂಡ ಮಾದರಿಯನ್ನು ನೋಟ್ಬುಕ್‌ನಿಂದ ಪೈಥಾನ್ ನಿರ್ಮಿತ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಓದಲು ಸಾಧ್ಯವಾದ ಸ್ವರೂಪಕ್ಕೆ ರಫ್ತು ಮಾಡುವ ಹಂತಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ. + +## ಉಪಕರಣ + +ಈ ಕಾರ್ಯಕ್ಕಾಗಿ, ನೀವು ಎರಡು ಉಪಕರಣಗಳನ್ನು ಬೇಕಾಗುತ್ತದೆ: ಫ್ಲಾಸ್ಕ್ ಮತ್ತು ಪಿಕಲ್, ಎರಡೂ ಪೈಥಾನ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. + +✅ [ಫ್ಲಾಸ್ಕ್](https://palletsprojects.com/p/flask/) ಎಂದರೆ ಏನು? ಅದರ ಸೃಷ್ಟಿಕರ್ತರಿಂದ 'ಮೈಕ್ರೋ-ಫ್ರೇಮ್ವರ್ಕ್' ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲ್ಪಟ್ಟಿದೆ, ಫ್ಲಾಸ್ಕ್ ಪೈಥಾನ್ ಬಳಸಿ ವೆಬ್ ಫ್ರೇಮ್ವರ್ಕ್‌ಗಳ ಮೂಲ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಮತ್ತು ಟೆಂಪ್ಲೇಟಿಂಗ್ ಎಂಜಿನ್ ಅನ್ನು ಒದಗಿಸಿ ವೆಬ್ ಪುಟಗಳನ್ನು ನಿರ್ಮಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಫ್ಲಾಸ್ಕ್ ಬಳಸಿ ನಿರ್ಮಾಣ ಅಭ್ಯಾಸ ಮಾಡಲು [ಈ ಲರ್ನ್ ಮೋಡ್ಯೂಲ್](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) ನೋಡಿ. + +✅ [ಪಿಕಲ್](https://docs.python.org/3/library/pickle.html) ಎಂದರೆ ಏನು? ಪಿಕಲ್ 🥒 ಪೈಥಾನ್ ಆಬ್ಜೆಕ್ಟ್ ರಚನೆಯನ್ನು ಸರಣೀಕರಿಸುವ ಮತ್ತು ಡೀ-ಸರಣೀಕರಿಸುವ ಪೈಥಾನ್ ಮೋಡ್ಯೂಲ್. ನೀವು ಮಾದರಿಯನ್ನು 'ಪಿಕಲ್' ಮಾಡಿದಾಗ, ಅದನ್ನು ವೆಬ್‌ನಲ್ಲಿ ಬಳಸಲು ಸರಣೀಕರಿಸುವ ಅಥವಾ ಸಮತಲಗೊಳಿಸುವಿರಿ. ಎಚ್ಚರಿಕೆ: ಪಿಕಲ್ ಸ್ವತಃ ಸುರಕ್ಷಿತವಲ್ಲ, ಆದ್ದರಿಂದ ಫೈಲ್ ಅನ್ನು 'ಅನ್-ಪಿಕಲ್' ಮಾಡಲು ಕೇಳಿದಾಗ ಜಾಗರೂಕತೆ ವಹಿಸಿ. ಪಿಕಲ್ ಮಾಡಿದ ಫೈಲ್‌ಗೆ `.pkl` ಎಂಬ ಸಫಿಕ್ಸ್ ಇರುತ್ತದೆ. + +## ಅಭ್ಯಾಸ - ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಶುದ್ಧೀಕರಿಸಿ + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು [NUFORC](https://nuforc.org) (ರಾಷ್ಟ್ರೀಯ UFO ವರದಿ ಕೇಂದ್ರ) ಸಂಗ್ರಹಿಸಿದ 80,000 UFO ದೃಶ್ಯಾವಳಿಗಳ ಡೇಟಾವನ್ನು ಬಳಸುತ್ತೀರಿ. ಈ ಡೇಟಾದಲ್ಲಿ UFO ದೃಶ್ಯಾವಳಿಗಳ ಕೆಲವು ಆಸಕ್ತಿದಾಯಕ ವಿವರಣೆಗಳಿವೆ, ಉದಾಹರಣೆಗೆ: + +- **ದೀರ್ಘ ಉದಾಹರಣೆಯ ವಿವರಣೆ.** "ಒಬ್ಬ ವ್ಯಕ್ತಿ ರಾತ್ರಿ ಹೊಲದಲ್ಲಿ ಬೆಳಗುವ ಬೆಳಕಿನ ಕಿರಣದಿಂದ ಹೊರಬರುತ್ತಾನೆ ಮತ್ತು ಟೆಕ್ಸಾಸ್ ಇನ್ಸ್ಟ್ರುಮೆಂಟ್ಸ್ ಪಾರ್ಕಿಂಗ್ ಲಾಟ್ ಕಡೆ ಓಡುತ್ತಾನೆ". +- **ಸಣ್ಣ ಉದಾಹರಣೆಯ ವಿವರಣೆ.** "ಬೆಳಕುಗಳು ನಮ್ಮನ್ನು ಹಿಂಬಾಲಿಸಿದವು". + +[ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) ಸ್ಪ್ರೆಡ್ಶೀಟ್‌ನಲ್ಲಿ ದೃಶ್ಯಾವಳಿ ನಡೆದ `city`, `state` ಮತ್ತು `country` ಕಾಲಮ್‌ಗಳ ಜೊತೆಗೆ ವಸ್ತುವಿನ `shape` ಮತ್ತು ಅದರ `latitude` ಮತ್ತು `longitude` ಕಾಲಮ್‌ಗಳಿವೆ. + +ಈ ಪಾಠದಲ್ಲಿ ಸೇರಿಸಿರುವ ಖಾಲಿ [ನೋಟ್ಬುಕ್](notebook.ipynb) ನಲ್ಲಿ: + +1. ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಮಾಡಿದಂತೆ `pandas`, `matplotlib`, ಮತ್ತು `numpy` ಅನ್ನು ಆಮದು ಮಾಡಿ ಮತ್ತು ufos ಸ್ಪ್ರೆಡ್ಶೀಟ್ ಅನ್ನು ಆಮದು ಮಾಡಿ. ನೀವು ಒಂದು ಮಾದರಿ ಡೇಟಾ ಸೆಟ್ ನೋಡಬಹುದು: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. ufos ಡೇಟಾವನ್ನು ಹೊಸ ಶೀರ್ಷಿಕೆಗಳೊಂದಿಗೆ ಸಣ್ಣ ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಪರಿವರ್ತಿಸಿ. `Country` ಕ್ಷೇತ್ರದಲ್ಲಿ ಇರುವ ವಿಶಿಷ್ಟ ಮೌಲ್ಯಗಳನ್ನು ಪರಿಶೀಲಿಸಿ. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. ಈಗ, ನಾವು ನಿಭಾಯಿಸಬೇಕಾದ ಡೇಟಾ ಪ್ರಮಾಣವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಯಾವುದೇ ನಲ್ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಮತ್ತು 1-60 ಸೆಕೆಂಡುಗಳ ನಡುವಿನ ದೃಶ್ಯಾವಳಿಗಳನ್ನು ಮಾತ್ರ ಆಮದು ಮಾಡಿ: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. ದೇಶಗಳ ಪಠ್ಯ ಮೌಲ್ಯಗಳನ್ನು ಸಂಖ್ಯೆಗೆ ಪರಿವರ್ತಿಸಲು Scikit-learn ನ `LabelEncoder` ಗ್ರಂಥಾಲಯವನ್ನು ಆಮದು ಮಾಡಿ: + + ✅ LabelEncoder ಡೇಟಾವನ್ನು ವರ್ಣಮಾಲಾ ಕ್ರಮದಲ್ಲಿ ಎನ್‌ಕೋಡ್ ಮಾಡುತ್ತದೆ + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + ನಿಮ್ಮ ಡೇಟಾ ಹೀಗೆ ಕಾಣಿಸಬೇಕು: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## ಅಭ್ಯಾಸ - ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ + +ಈಗ ನೀವು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಗುಂಪುಗಳಾಗಿ ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು ಸಿದ್ಧರಾಗಬಹುದು. + +1. ನೀವು ತರಬೇತುಗೊಳಿಸಲು ಬಯಸುವ ಮೂರು ಲಕ್ಷಣಗಳನ್ನು X ವೆಕ್ಟರ್ ಆಗಿ ಆಯ್ಕೆಮಾಡಿ, ಮತ್ತು y ವೆಕ್ಟರ್ ಆಗಿ `Country` ಇರುತ್ತದೆ. ನೀವು `Seconds`, `Latitude` ಮತ್ತು `Longitude` ಅನ್ನು ಇನ್ಪುಟ್ ಆಗಿ ನೀಡಿ, ದೇಶದ ಐಡಿ ಪಡೆಯಲು ಬಯಸುತ್ತೀರಿ. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಳಸಿ ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +ನಿಖರತೆ ಕೆಟ್ಟದಿಲ್ಲ **(ಸುಮಾರು 95%)**, ಅಚ್ಚರಿಯಿಲ್ಲದೆ, ಏಕೆಂದರೆ `Country` ಮತ್ತು `Latitude/Longitude` ಪರಸ್ಪರ ಸಂಬಂಧ ಹೊಂದಿವೆ. + +ನೀವು ರಚಿಸಿದ ಮಾದರಿ ಬಹಳ ಕ್ರಾಂತಿಕಾರಕವಲ್ಲ, ಏಕೆಂದರೆ `Latitude` ಮತ್ತು `Longitude` ನಿಂದ `Country` ಅನ್ನು ಊಹಿಸಬಹುದು, ಆದರೆ ನೀವು ಶುದ್ಧೀಕರಿಸಿದ, ರಫ್ತು ಮಾಡಿದ ಕಚ್ಚಾ ಡೇಟಾದಿಂದ ತರಬೇತುಗೊಳಿಸುವ ಪ್ರಯತ್ನಕ್ಕೆ ಇದು ಒಳ್ಳೆಯ ಅಭ್ಯಾಸ. + +## ಅಭ್ಯಾಸ - ನಿಮ್ಮ ಮಾದರಿಯನ್ನು 'ಪಿಕಲ್' ಮಾಡಿ + +ಈಗ, ನಿಮ್ಮ ಮಾದರಿಯನ್ನು _ಪಿಕಲ್_ ಮಾಡುವ ಸಮಯವಾಗಿದೆ! ನೀವು ಅದನ್ನು ಕೆಲವು ಸಾಲುಗಳ ಕೋಡ್‌ನಲ್ಲಿ ಮಾಡಬಹುದು. ಪಿಕಲ್ ಮಾಡಿದ ನಂತರ, ನಿಮ್ಮ ಪಿಕಲ್ ಮಾಡಿದ ಮಾದರಿಯನ್ನು ಲೋಡ್ ಮಾಡಿ ಮತ್ತು ಸೆಕೆಂಡುಗಳು, ಅಕ್ಷಾಂಶ ಮತ್ತು ರೇಖಾಂಶ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿರುವ ಮಾದರಿ ಡೇಟಾ ಅರೆ ಮೇಲೆ ಪರೀಕ್ಷಿಸಿ, + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +ಮಾದರಿ **'3'** ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ, ಇದು ಯುಕೆ ದೇಶದ ಕೋಡ್. ಅದ್ಭುತ! 👽 + +## ಅಭ್ಯಾಸ - ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ + +ಈಗ ನೀವು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ಕರೆಸಿ ಸಮಾನ ಫಲಿತಾಂಶಗಳನ್ನು ಹಿಂತಿರುಗಿಸುವ ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಬಹುದು, ಆದರೆ ದೃಶ್ಯವಾಗಿ ಹೆಚ್ಚು ಆಕರ್ಷಕ ರೀತಿಯಲ್ಲಿ. + +1. ನಿಮ್ಮ _notebook.ipynb_ ಫೈಲ್ ಪಕ್ಕದಲ್ಲಿ **web-app** ಎಂಬ ಫೋಲ್ಡರ್ ಅನ್ನು ರಚಿಸಿ, ಅಲ್ಲಿ ನಿಮ್ಮ _ufo-model.pkl_ ಫೈಲ್ ಇರುತ್ತದೆ. + +1. ಆ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಇನ್ನೂ ಮೂರು ಫೋಲ್ಡರ್‌ಗಳನ್ನು ರಚಿಸಿ: **static**, ಅದರೊಳಗೆ **css** ಫೋಲ್ಡರ್, ಮತ್ತು **templates**. ಈಗ ನೀವು ಕೆಳಗಿನ ಫೈಲ್‌ಗಳು ಮತ್ತು ಡೈರೆಕ್ಟರಿಗಳನ್ನು ಹೊಂದಿರಬೇಕು: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ ಪೂರ್ಣಗೊಂಡ ಅಪ್ಲಿಕೇಶನ್ ವೀಕ್ಷಣೆಗೆ ಪರಿಹಾರ ಫೋಲ್ಡರ್ ನೋಡಿ + +1. _web-app_ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ರಚಿಸಬೇಕಾದ ಮೊದಲ ಫೈಲ್ **requirements.txt**. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಪ್ಲಿಕೇಶನ್‌ನ _package.json_ ಹಾಗೆ, ಈ ಫೈಲ್ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಬೇಕಾದ ಅವಲಂಬನೆಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ. **requirements.txt** ನಲ್ಲಿ ಕೆಳಗಿನ ಸಾಲುಗಳನ್ನು ಸೇರಿಸಿ: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. ಈಗ, _web-app_ ಗೆ ನಾವಿಗೇಟ್ ಮಾಡಿ ಈ ಫೈಲ್ ಅನ್ನು ರನ್ ಮಾಡಿ: + + ```bash + cd web-app + ``` + +1. ನಿಮ್ಮ ಟರ್ಮಿನಲ್‌ನಲ್ಲಿ `pip install` ಟೈಪ್ ಮಾಡಿ, _requirements.txt_ ನಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಿದ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಸ್ಥಾಪಿಸಲು: + + ```bash + pip install -r requirements.txt + ``` + +1. ಈಗ, ಅಪ್ಲಿಕೇಶನ್ ಪೂರ್ಣಗೊಳಿಸಲು ಇನ್ನೂ ಮೂರು ಫೈಲ್‌ಗಳನ್ನು ರಚಿಸಲು ಸಿದ್ಧರಾಗಿ: + + 1. ರೂಟ್‌ನಲ್ಲಿ **app.py** ರಚಿಸಿ. + 2. _templates_ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ **index.html** ರಚಿಸಿ. + 3. _static/css_ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ **styles.css** ರಚಿಸಿ. + +1. _styles.css_ ಫೈಲ್‌ನಲ್ಲಿ ಕೆಲವು ಶೈಲಿಗಳನ್ನು ನಿರ್ಮಿಸಿ: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. ನಂತರ, _index.html_ ಫೈಲ್ ಅನ್ನು ನಿರ್ಮಿಸಿ: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
+ +
+ +

According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

+ +
+ + + + +
+ +

{{ prediction_text }}

+ +
+ +
+ + + + ``` + + ಈ ಫೈಲ್‌ನ ಟೆಂಪ್ಲೇಟಿಂಗ್ ನೋಡಿ. ಅಪ್ಲಿಕೇಶನ್ ನೀಡುವ ಚರಗಳ ಸುತ್ತಲೂ 'ಮಸ್ಟಾಚ್' ಸಿಂಟ್ಯಾಕ್ಸ್ ಇದೆ, ಉದಾಹರಣೆಗೆ ಭವಿಷ್ಯವಾಣಿ ಪಠ್ಯ: `{{}}`. ಅಲ್ಲದೆ `/predict` ಮಾರ್ಗಕ್ಕೆ ಭವಿಷ್ಯವಾಣಿ ಪೋಸ್ಟ್ ಮಾಡುವ ಫಾರ್ಮ್ ಇದೆ. + + ಕೊನೆಗೆ, ಮಾದರಿಯ ಬಳಕೆಯನ್ನು ಮತ್ತು ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವ ಪೈಥಾನ್ ಫೈಲ್ ನಿರ್ಮಿಸಲು ಸಿದ್ಧರಾಗಿ: + +1. `app.py` ನಲ್ಲಿ ಸೇರಿಸಿ: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 ಟಿಪ್: ಫ್ಲಾಸ್ಕ್ ಬಳಸಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ರನ್ ಮಾಡುವಾಗ [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) ಸೇರಿಸಿದರೆ, ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಮಾಡಿದ ಯಾವುದೇ ಬದಲಾವಣೆಗಳು ತಕ್ಷಣವೇ ಪ್ರತಿಬಿಂಬಿತವಾಗುತ್ತವೆ, ಸರ್ವರ್ ಮರುಪ್ರಾರಂಭಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಎಚ್ಚರಿಕೆ! ಉತ್ಪಾದನಾ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಈ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಬೇಡಿ. + +ನೀವು `python app.py` ಅಥವಾ `python3 app.py` ರನ್ ಮಾಡಿದರೆ - ನಿಮ್ಮ ವೆಬ್ ಸರ್ವರ್ ಸ್ಥಳೀಯವಾಗಿ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ, ಮತ್ತು ನೀವು UFO ಗಳು ಎಲ್ಲಿ ದೃಶ್ಯಾವಳಿಯಾಗಿವೆ ಎಂಬ ಪ್ರಶ್ನೆಗೆ ಉತ್ತರ ಪಡೆಯಲು ಸಣ್ಣ ಫಾರ್ಮ್ ಭರ್ತಿ ಮಾಡಬಹುದು! + +ಅದನ್ನು ಮಾಡುವ ಮೊದಲು, `app.py` ಭಾಗಗಳನ್ನು ನೋಡಿ: + +1. ಮೊದಲು, ಅವಲಂಬನೆಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. +1. ನಂತರ, ಮಾದರಿಯನ್ನು ಆಮದು ಮಾಡಲಾಗುತ್ತದೆ. +1. ನಂತರ, ಹೋಮ್ ಮಾರ್ಗದಲ್ಲಿ index.html ರೆಂಡರ್ ಆಗುತ್ತದೆ. + +`/predict` ಮಾರ್ಗದಲ್ಲಿ, ಫಾರ್ಮ್ ಪೋಸ್ಟ್ ಆಗುವಾಗ ಹಲವಾರು ಕಾರ್ಯಗಳು ನಡೆಯುತ್ತವೆ: + +1. ಫಾರ್ಮ್ ಚರಗಳನ್ನು ಸಂಗ್ರಹಿಸಿ numpy ಅರೆಗೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ. ಅವು ಮಾದರಿಗೆ ಕಳುಹಿಸಿ ಭವಿಷ್ಯವಾಣಿ ಪಡೆಯಲಾಗುತ್ತದೆ. +2. ನಾವು ಪ್ರದರ್ಶಿಸಲು ಬಯಸುವ ದೇಶಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ದೇಶ ಕೋಡ್‌ನಿಂದ ಓದಲು ಸುಲಭವಾದ ಪಠ್ಯವಾಗಿ ಮರು-ರೆಂಡರ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಆ ಮೌಲ್ಯವನ್ನು index.html ಗೆ ಕಳುಹಿಸಿ ಟೆಂಪ್ಲೇಟಿನಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ. + +ಫ್ಲಾಸ್ಕ್ ಮತ್ತು ಪಿಕಲ್ ಮಾಡಿದ ಮಾದರಿಯನ್ನು ಬಳಸಿ ಈ ರೀತಿಯಲ್ಲಿ ಮಾದರಿಯನ್ನು ಬಳಸುವುದು ಸರಳವಾಗಿದೆ. ಅತಿ ಕಠಿಣವಾದುದು ಯಾವ ರೂಪದ ಡೇಟಾವನ್ನು ಮಾದರಿಗೆ ಕಳುಹಿಸಬೇಕು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು. ಅದು ಮಾದರಿ ತರಬೇತುಗೊಂಡ ರೀತಿಯ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಇದರಲ್ಲಿ ಮೂರು ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಇನ್ಪುಟ್ ಆಗಿ ನೀಡಬೇಕು ಭವಿಷ್ಯವಾಣಿ ಪಡೆಯಲು. + +ವೃತ್ತಿಪರ ಪರಿಸರದಲ್ಲಿ, ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವವರು ಮತ್ತು ಅದನ್ನು ವೆಬ್ ಅಥವಾ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸುವವರ ನಡುವೆ ಉತ್ತಮ ಸಂವಹನ ಅಗತ್ಯವಿದೆ. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ಅದು ನೀವು ಒಬ್ಬರೇ! + +--- + +## 🚀 ಸವಾಲು + +ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುವ ಬದಲು ಮತ್ತು ಮಾದರಿಯನ್ನು ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಆಮದು ಮಾಡುವ ಬದಲು, ನೀವು ಫ್ಲಾಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಒಳಗೆ ನೇರವಾಗಿ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಬಹುದು! ನಿಮ್ಮ ನೋಟ್ಬುಕ್‌ನ ಪೈಥಾನ್ ಕೋಡ್ ಅನ್ನು, ನಿಮ್ಮ ಡೇಟಾ ಶುದ್ಧೀಕರಿಸಿದ ನಂತರ, `train` ಎಂಬ ಮಾರ್ಗದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಒಳಗೆ ತರಬೇತುಗೊಳಿಸುವಂತೆ ಪರಿವರ್ತಿಸಲು ಪ್ರಯತ್ನಿಸಿ. ಈ ವಿಧಾನವನ್ನು ಅನುಸರಿಸುವ ಲಾಭ ಮತ್ತು ಹಾನಿಗಳನ್ನು ಏನು? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಎಂಎಲ್ ಮಾದರಿಗಳನ್ನು ಉಪಯೋಗಿಸಲು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸುವ ಹಲವು ವಿಧಾನಗಳಿವೆ. ಯಾವುವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಥವಾ ಪೈಥಾನ್ ಬಳಸಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವೋ ಅವುಗಳ ಪಟ್ಟಿ ಮಾಡಿ. ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ಪರಿಗಣಿಸಿ: ಮಾದರಿ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಇರಬೇಕೇ ಅಥವಾ ಕ್ಲೌಡ್‌ನಲ್ಲಿ ಇರಬೇಕೇ? ನಂತರದಿದ್ದರೆ, ಅದನ್ನು ಹೇಗೆ ಪ್ರವೇಶಿಸುವಿರಿ? ಅನ್ವಯಿಸಿದ ಎಂಎಲ್ ವೆಬ್ ಪರಿಹಾರಕ್ಕಾಗಿ ವಾಸ್ತುಶಿಲ್ಪ ಮಾದರಿಯನ್ನು ರಚಿಸಿ. + +## ನಿಯೋಜನೆ + +[ಬೇರೊಂದು ಮಾದರಿಯನ್ನು ಪ್ರಯತ್ನಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/3-Web-App/1-Web-App/assignment.md b/translations/kn/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 000000000..fbf250681 --- /dev/null +++ b/translations/kn/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,27 @@ + +# ಬೇರೆ ಮಾದರಿಯನ್ನು ಪ್ರಯತ್ನಿಸಿ + +## ಸೂಚನೆಗಳು + +ನೀವು ಈಗಾಗಲೇ ತರಬೇತಿಗೊಂಡ Regression ಮಾದರಿಯನ್ನು ಬಳಸಿ ಒಂದು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಈಗ ಹಿಂದಿನ Regression ಪಾಠದ ಒಂದು ಮಾದರಿಯನ್ನು ಬಳಸಿ ಈ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮರುನಿರ್ಮಿಸಿ. ನೀವು ಶೈಲಿಯನ್ನು ಉಳಿಸಬಹುದು ಅಥವಾ ಕಬ್ಬು ಡೇಟಾವನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವಂತೆ ವಿಭಿನ್ನವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಬಹುದು. ನಿಮ್ಮ ಮಾದರಿಯ ತರಬೇತಿ ವಿಧಾನವನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವಂತೆ ಇನ್ಪುಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಜಾಗರೂಕರಾಗಿರಿ. + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆ ಅಗತ್ಯವಿದೆ | +| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | +| | ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರೀಕ್ಷಿತಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ಕ್ಲೌಡ್‌ಗೆ ನಿಯೋಜಿಸಲಾಗಿದೆ | ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ದೋಷಗಳಿವೆ ಅಥವಾ ಅಪ್ರತೀಕ್ಷಿತ ಫಲಿತಾಂಶಗಳನ್ನು ತೋರಿಸುತ್ತದೆ | ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/3-Web-App/1-Web-App/notebook.ipynb b/translations/kn/3-Web-App/1-Web-App/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/kn/3-Web-App/1-Web-App/solution/notebook.ipynb b/translations/kn/3-Web-App/1-Web-App/solution/notebook.ipynb new file mode 100644 index 000000000..1d2951975 --- /dev/null +++ b/translations/kn/3-Web-App/1-Web-App/solution/notebook.ipynb @@ -0,0 +1,269 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "5fa2e8f4584c78250ca9729b46562ceb", + "translation_date": "2025-12-19T16:48:25+00:00", + "source_file": "3-Web-App/1-Web-App/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "## ಯುಎಫ್‌ಒ ದೃಶ್ಯೀಕರಣವನ್ನು ತಿಳಿಯಲು ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ಬಳಸಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " datetime city state country shape \\\n", + "0 10/10/1949 20:30 san marcos tx us cylinder \n", + "1 10/10/1949 21:00 lackland afb tx NaN light \n", + "2 10/10/1955 17:00 chester (uk/england) NaN gb circle \n", + "3 10/10/1956 21:00 edna tx us circle \n", + "4 10/10/1960 20:00 kaneohe hi us light \n", + "\n", + " duration (seconds) duration (hours/min) \\\n", + "0 2700.0 45 minutes \n", + "1 7200.0 1-2 hrs \n", + "2 20.0 20 seconds \n", + "3 20.0 1/2 hour \n", + "4 900.0 15 minutes \n", + "\n", + " comments date posted latitude \\\n", + "0 This event took place in early fall around 194... 4/27/2004 29.883056 \n", + "1 1949 Lackland AFB, TX. Lights racing acros... 12/16/2005 29.384210 \n", + "2 Green/Orange circular disc over Chester, En... 1/21/2008 53.200000 \n", + "3 My older brother and twin sister were leaving ... 1/17/2004 28.978333 \n", + "4 AS a Marine 1st Lt. flying an FJ4B fighter/att... 1/22/2004 21.418056 \n", + "\n", + " longitude \n", + "0 -97.941111 \n", + "1 -98.581082 \n", + "2 -2.916667 \n", + "3 -96.645833 \n", + "4 -157.803611 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
datetimecitystatecountryshapeduration (seconds)duration (hours/min)commentsdate postedlatitudelongitude
010/10/1949 20:30san marcostxuscylinder2700.045 minutesThis event took place in early fall around 194...4/27/200429.883056-97.941111
110/10/1949 21:00lackland afbtxNaNlight7200.01-2 hrs1949 Lackland AFB&#44 TX. Lights racing acros...12/16/200529.384210-98.581082
210/10/1955 17:00chester (uk/england)NaNgbcircle20.020 secondsGreen/Orange circular disc over Chester&#44 En...1/21/200853.200000-2.916667
310/10/1956 21:00ednatxuscircle20.01/2 hourMy older brother and twin sister were leaving ...1/17/200428.978333-96.645833
410/10/1960 20:00kaneohehiuslight900.015 minutesAS a Marine 1st Lt. flying an FJ4B fighter/att...1/22/200421.418056-157.803611
\n
" + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "ufos = pd.read_csv('../data/ufos.csv')\n", + "ufos.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array(['us', nan, 'gb', 'ca', 'au', 'de'], dtype=object)" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "\n", + "ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})\n", + "\n", + "ufos.Country.unique()\n", + "\n", + "# 0 au, 1 ca, 2 de, 3 gb, 4 us" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\nInt64Index: 25863 entries, 2 to 80330\nData columns (total 4 columns):\n # Column Non-Null Count Dtype \n--- ------ -------------- ----- \n 0 Seconds 25863 non-null float64\n 1 Country 25863 non-null object \n 2 Latitude 25863 non-null float64\n 3 Longitude 25863 non-null float64\ndtypes: float64(3), object(1)\nmemory usage: 1010.3+ KB\n" + ] + } + ], + "source": [ + "ufos.dropna(inplace=True)\n", + "\n", + "ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]\n", + "\n", + "ufos.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Seconds Country Latitude Longitude\n", + "2 20.0 3 53.200000 -2.916667\n", + "3 20.0 4 28.978333 -96.645833\n", + "14 30.0 4 35.823889 -80.253611\n", + "23 60.0 4 45.582778 -122.352222\n", + "24 3.0 3 51.783333 -0.783333" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
SecondsCountryLatitudeLongitude
220.0353.200000-2.916667
320.0428.978333-96.645833
1430.0435.823889-80.253611
2360.0445.582778-122.352222
243.0351.783333-0.783333
\n
" + }, + "metadata": {}, + "execution_count": 26 + } + ], + "source": [ + "from sklearn.preprocessing import LabelEncoder\n", + "\n", + "ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])\n", + "\n", + "ufos.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "Selected_features = ['Seconds','Latitude','Longitude']\n", + "\n", + "X = ufos[Selected_features]\n", + "y = ufos['Country']\n", + "\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", + " FutureWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n", + " \"this warning.\", FutureWarning)\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 1.00 1.00 41\n", + " 1 1.00 0.02 0.05 250\n", + " 2 0.00 0.00 0.00 8\n", + " 3 0.94 1.00 0.97 131\n", + " 4 0.95 1.00 0.97 4743\n", + "\n", + " accuracy 0.95 5173\n", + " macro avg 0.78 0.60 0.60 5173\n", + "weighted avg 0.95 0.95 0.93 5173\n", + "\n", + "Predicted labels: [4 4 4 ... 3 4 4]\n", + "Accuracy: 0.9512855209742895\n", + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n", + " 'precision', 'predicted', average, warn_for)\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import accuracy_score, classification_report \n", + "from sklearn.linear_model import LogisticRegression\n", + "model = LogisticRegression()\n", + "model.fit(X_train, y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "print(classification_report(y_test, predictions))\n", + "print('Predicted labels: ', predictions)\n", + "print('Accuracy: ', accuracy_score(y_test, predictions))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3]\n" + ] + } + ], + "source": [ + "import pickle\n", + "model_filename = 'ufo-model.pkl'\n", + "pickle.dump(model, open(model_filename,'wb'))\n", + "\n", + "model = pickle.load(open('ufo-model.pkl','rb'))\n", + "print(model.predict([[50,44,-12]]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕಾರ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/3-Web-App/README.md b/translations/kn/3-Web-App/README.md new file mode 100644 index 000000000..c151820ae --- /dev/null +++ b/translations/kn/3-Web-App/README.md @@ -0,0 +1,37 @@ + +# ನಿಮ್ಮ ML ಮಾದರಿಯನ್ನು ಬಳಸಲು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ + +ಈ ಪಠ್ಯಕ್ರಮದ ವಿಭಾಗದಲ್ಲಿ, ನೀವು ಅನ್ವಯಿತ ML ವಿಷಯವನ್ನು ಪರಿಚಯಿಸಿಕೊಳ್ಳುತ್ತೀರಿ: ನಿಮ್ಮ Scikit-learn ಮಾದರಿಯನ್ನು ಫೈಲ್ ಆಗಿ ಉಳಿಸುವುದು, ಅದನ್ನು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಬಳಸಬಹುದು. ಮಾದರಿ ಉಳಿಸಿದ ನಂತರ, ನೀವು ಅದನ್ನು Flask ನಲ್ಲಿ ನಿರ್ಮಿಸಲಾದ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಹೇಗೆ ಬಳಸುವುದು ಎಂದು ಕಲಿಯುತ್ತೀರಿ. ಮೊದಲು, ನೀವು UFO ದೃಶ್ಯಗಳ ಬಗ್ಗೆ ಇರುವ ಕೆಲವು ಡೇಟಾ ಬಳಸಿ ಮಾದರಿಯನ್ನು ರಚಿಸುವಿರಿ! ನಂತರ, ನೀವು ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆ, ಅಕ್ಷಾಂಶ ಮತ್ತು ರೇಖಾಂಶ ಮೌಲ್ಯವನ್ನು ನಮೂದಿಸಲು ಅನುಮತಿಸುವ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿರ್ಮಿಸುವಿರಿ, ಅದು ಯಾವ ದೇಶ UFO ನೋಡಿದ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತದೆ. + +![UFO Parking](../../../translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.kn.jpg) + +ಚಿತ್ರವನ್ನು ಮೈಕೆಲ್ ಹೆರೆನ್ ಅವರು ಅನ್ಸ್ಪ್ಲ್ಯಾಶ್ ನಲ್ಲಿ ತೆಗೆದಿದ್ದಾರೆ + +## ಪಾಠಗಳು + +1. [ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ](1-Web-App/README.md) + +## ಕ್ರೆಡಿಟ್‌ಗಳು + +"ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ" ಅನ್ನು ♥️ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ರವರು ಬರೆಯಲಾಗಿದೆ. + +♥️ ಪ್ರಶ್ನೋತ್ತರಗಳನ್ನು ರೋಹನ್ ರಾಜ್ ರವರು ಬರೆಯಲಾಗಿದೆ. + +ಡೇಟಾಸೆಟ್ ಅನ್ನು [ಕಾಗಲ್](https://www.kaggle.com/NUFORC/ufo-sightings) ನಿಂದ ಪಡೆದಿದೆ. + +ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ಭಾಗಶಃ [ಈ ಲೇಖನ](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) ಮತ್ತು ಅಭಿನವ್ ಸಾಗರ್ ಅವರ [ಈ ರೆಪೊ](https://github.com/abhinavsagar/machine-learning-deployment) ಸೂಚಿಸಿದ್ದಾರೆ. + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/1-Introduction/README.md b/translations/kn/4-Classification/1-Introduction/README.md new file mode 100644 index 000000000..1f6afe857 --- /dev/null +++ b/translations/kn/4-Classification/1-Introduction/README.md @@ -0,0 +1,315 @@ + +# ವರ್ಗೀಕರಣಕ್ಕೆ ಪರಿಚಯ + +ಈ ನಾಲ್ಕು ಪಾಠಗಳಲ್ಲಿ, ನೀವು ಕ್ಲಾಸಿಕ್ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್‌ನ ಮೂಲಭೂತ ಗಮನಾರ್ಹ ವಿಷಯವಾದ _ವರ್ಗೀಕರಣ_ ಅನ್ನು ಅನ್ವೇಷಿಸುವಿರಿ. ಏಷ್ಯಾ ಮತ್ತು ಭಾರತದಲ್ಲಿನ ಎಲ್ಲಾ ಅದ್ಭುತ ಆಹಾರಗಳ ಬಗ್ಗೆ ಡೇಟಾಸೆಟ್ ಬಳಸಿ ವಿವಿಧ ವರ್ಗೀಕರಣ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದನ್ನು ನಾವು ನೋಡೋಣ. ನೀವು ಹಸಿವಾಗಿದ್ದೀರಾ ಎಂದು ಆಶಿಸುತ್ತೇವೆ! + +![ಒಂದು ಚುಟುಕು!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.kn.png) + +> ಈ ಪಾಠಗಳಲ್ಲಿ ಪ್ಯಾನ್-ಏಷಿಯನ್ ಆಹಾರಗಳನ್ನು ಆಚರಿಸೋಣ! ಚಿತ್ರವನ್ನು [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ನೀಡಿದ್ದಾರೆ + +ವರ್ಗೀಕರಣವು [ನಿರೀಕ್ಷಿತ ಕಲಿಕೆ](https://wikipedia.org/wiki/Supervised_learning) ಎಂಬ ಒಂದು ರೂಪವಾಗಿದ್ದು, ಇದು ರಿಗ್ರೆಷನ್ ತಂತ್ರಜ್ಞಾನಗಳೊಂದಿಗೆ ಬಹಳ ಸಾಮ್ಯತೆ ಹೊಂದಿದೆ. ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಎಂದರೆ ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಬಳಸಿ ಮೌಲ್ಯಗಳು ಅಥವಾ ಹೆಸರುಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದಾದರೆ, ವರ್ಗೀಕರಣ ಸಾಮಾನ್ಯವಾಗಿ ಎರಡು ಗುಂಪುಗಳಲ್ಲಿ ಬರುವುದಾಗಿದೆ: _ದ್ವೈತ ವರ್ಗೀಕರಣ_ ಮತ್ತು _ಬಹು-ವರ್ಗ ವರ್ಗೀಕರಣ_. + +[![ವರ್ಗೀಕರಣಕ್ಕೆ ಪರಿಚಯ](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "ವರ್ಗೀಕರಣಕ್ಕೆ ಪರಿಚಯ") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋ ನೋಡಿ: MIT ನ ಜಾನ್ ಗುಟ್ಟಾಗ್ ವರ್ಗೀಕರಣವನ್ನು ಪರಿಚಯಿಸುತ್ತಿದ್ದಾರೆ + +ಸ್ಮರಣೆ: + +- **ರೇಖೀಯ ರಿಗ್ರೆಷನ್** ನಿಮಗೆ ವ್ಯತ್ಯಾಸಗಳ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಸಹಾಯ ಮಾಡಿತು ಮತ್ತು ಹೊಸ ಡೇಟಾಪಾಯಿಂಟ್ ಆ ರೇಖೆಯ ಸಂಬಂಧದಲ್ಲಿ ಎಲ್ಲಿ ಬಿದ್ದೀತು ಎಂಬುದನ್ನು ನಿಖರವಾಗಿ ಊಹಿಸಲು ಸಹಾಯ ಮಾಡಿತು. ಉದಾಹರಣೆಗೆ, _ಸೆಪ್ಟೆಂಬರ್ ಮತ್ತು ಡಿಸೆಂಬರ್‌ನಲ್ಲಿ ಕಂಬಳಿಯ ಬೆಲೆ ಏನು ಇರುತ್ತದೆ_ ಎಂದು ಊಹಿಸಬಹುದು. +- **ಲಾಗಿಸ್ಟಿಕ್ ರಿಗ್ರೆಷನ್** ನಿಮಗೆ "ದ್ವೈತ ವರ್ಗಗಳು" ಅನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಹಾಯ ಮಾಡಿತು: ಈ ಬೆಲೆ ಮಟ್ಟದಲ್ಲಿ, _ಈ ಕಂಬಳಿ ಕಿತ್ತಳೆ ಬಣ್ಣದದೆಯೇ ಅಥವಾ ಅಲ್ಲವೇ_? + +ವರ್ಗೀಕರಣವು ಡೇಟಾ ಪಾಯಿಂಟ್‌ನ ಲೇಬಲ್ ಅಥವಾ ವರ್ಗವನ್ನು ನಿರ್ಧರಿಸಲು ವಿವಿಧ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಆಹಾರ ಡೇಟಾ ಬಳಸಿ, ಒಂದು ಗುಂಪಿನ ಪದಾರ್ಥಗಳನ್ನು ಗಮನಿಸಿ ಅದರ ಮೂಲ ಆಹಾರವನ್ನು ನಿರ್ಧರಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ. + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +> ### [ಈ ಪಾಠ R ನಲ್ಲಿ ಲಭ್ಯವಿದೆ!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### ಪರಿಚಯ + +ವರ್ಗೀಕರಣವು ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಸಂಶೋಧಕ ಮತ್ತು ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಮೂಲಭೂತ ಚಟುವಟಿಕೆಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. ಒಂದು ದ್ವೈತ ಮೌಲ್ಯದ ಮೂಲಭೂತ ವರ್ಗೀಕರಣದಿಂದ ("ಈ ಇಮೇಲ್ ಸ್ಪ್ಯಾಮ್ ಆಗಿದೆಯೇ ಇಲ್ಲವೇ?") ಆರಂಭಿಸಿ, ಸಂಕೀರ್ಣ ಚಿತ್ರ ವರ್ಗೀಕರಣ ಮತ್ತು ವಿಭಾಗೀಕರಣದವರೆಗೆ, ಡೇಟಾವನ್ನು ವರ್ಗಗಳಲ್ಲಿ ವಿಂಗಡಿಸಿ ಅದರಲ್ಲಿ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳುವುದು ಸದಾ ಉಪಯುಕ್ತ. + +ವಿಜ್ಞಾನಾತ್ಮಕವಾಗಿ ಹೇಳುವುದಾದರೆ, ನಿಮ್ಮ ವರ್ಗೀಕರಣ ವಿಧಾನವು ಇನ್ಪುಟ್ ವ್ಯತ್ಯಾಸಗಳ ಮತ್ತು ಔಟ್‌ಪುಟ್ ವ್ಯತ್ಯಾಸಗಳ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ನಕ್ಷೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವ ಭವಿಷ್ಯವಾಣಿ ಮಾದರಿಯನ್ನು ರಚಿಸುತ್ತದೆ. + +![ದ್ವೈತ ಮತ್ತು ಬಹು-ವರ್ಗ ವರ್ಗೀಕರಣ](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.kn.png) + +> ವರ್ಗೀಕರಣ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ನಿಭಾಯಿಸಬೇಕಾದ ದ್ವೈತ ಮತ್ತು ಬಹು-ವರ್ಗ ಸಮಸ್ಯೆಗಳು. ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +ನಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುವುದು, ದೃಶ್ಯೀಕರಣ ಮಾಡುವುದು ಮತ್ತು ML ಕಾರ್ಯಗಳಿಗೆ ಸಿದ್ಧಪಡಿಸುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸಲು ಬಳಸಬಹುದಾದ ವಿವಿಧ ವಿಧಾನಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳೋಣ. + +[ಸಂಖ್ಯಾಶಾಸ್ತ್ರ](https://wikipedia.org/wiki/Statistical_classification)ದಿಂದ ಪಡೆದ, ಕ್ಲಾಸಿಕ್ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಬಳಸಿ ವರ್ಗೀಕರಣವು `smoker`, `weight`, ಮತ್ತು `age` ಮುಂತಾದ ಲಕ್ಷಣಗಳನ್ನು ಬಳಸಿಕೊಂಡು _X ರೋಗದ ಸಂಭವನೀಯತೆ_ ಅನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ನೀವು ಹಿಂದಿನ ರಿಗ್ರೆಷನ್ ಅಭ್ಯಾಸಗಳಲ್ಲಿ ಮಾಡಿದಂತೆ, ನಿಮ್ಮ ಡೇಟಾ ಲೇಬಲ್ ಮಾಡಲ್ಪಟ್ಟಿದ್ದು, ML ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಆ ಲೇಬಲ್‌ಗಳನ್ನು ಬಳಸಿ ಡೇಟಾಸೆಟ್‌ನ ವರ್ಗಗಳನ್ನು (ಅಥವಾ 'ಲಕ್ಷಣಗಳನ್ನು') ವರ್ಗೀಕರಿಸಿ, ಅವುಗಳನ್ನು ಗುಂಪು ಅಥವಾ ಫಲಿತಾಂಶಕ್ಕೆ ನಿಯೋಜಿಸುತ್ತವೆ. + +✅ ಆಹಾರಗಳ ಬಗ್ಗೆ ಒಂದು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಕಲ್ಪಿಸಿ. ಬಹು-ವರ್ಗ ಮಾದರಿ ಯಾವ ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರ ನೀಡಬಹುದು? ದ್ವೈತ ಮಾದರಿ ಯಾವ ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರ ನೀಡಬಹುದು? ನೀವು ಒಂದು ನಿರ್ದಿಷ್ಟ ಆಹಾರದಲ್ಲಿ ಮೆಂತ್ಯು ಬಳಕೆಯಾಗುವ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸಲು ಬಯಸಿದರೆ? ಸ್ಟಾರ್ ಅನೀಸ್, ಆರ್ಟಿಚೋಕ್, ಹೂಕೋಸು ಮತ್ತು ಹರ್ಸರಡಿಷ್ ತುಂಬಿದ ಗ್ರೋಸರಿ ಬ್ಯಾಗ್ ಇದ್ದಾಗ, ನೀವು ಸಾಮಾನ್ಯ ಭಾರತೀಯ ವಾನಗಿಯನ್ನು ರಚಿಸಬಹುದೇ ಎಂದು ನೋಡಲು ಬಯಸಿದರೆ? + +[![ಅದ್ಭುತ ರಹಸ್ಯ ಬಾಸ್ಕೆಟ್‌ಗಳು](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "ಅದ್ಭುತ ರಹಸ್ಯ ಬಾಸ್ಕೆಟ್‌ಗಳು") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋ ನೋಡಿ. 'ಚಾಪ್ಡ್' ಶೋಯಿನ ಪೂರ್ಣ ತತ್ವವೇ 'ರಹಸ್ಯ ಬಾಸ್ಕೆಟ್' ಆಗಿದ್ದು, ಅಲ್ಲಿ ಶೆಫ್ಗಳು ಯಾದೃಚ್ಛಿಕ ಪದಾರ್ಥಗಳಿಂದ ಒಂದು ವಾನಗಿಯನ್ನು ತಯಾರಿಸಬೇಕು. ಖಂಡಿತವಾಗಿ ML ಮಾದರಿ ಸಹಾಯ ಮಾಡಿತ್ತೇ! + +## ನಮಸ್ಕಾರ 'ವರ್ಗೀಕರಣಕಾರ' + +ನಾವು ಈ ಆಹಾರ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಕೇಳಬೇಕಾದ ಪ್ರಶ್ನೆ ವಾಸ್ತವದಲ್ಲಿ **ಬಹು-ವರ್ಗ ಪ್ರಶ್ನೆ** ಆಗಿದ್ದು, ನಾವು ಹಲವಾರು ರಾಷ್ಟ್ರೀಯ ಆಹಾರಗಳನ್ನು ಹೊಂದಿದ್ದೇವೆ. ಪದಾರ್ಥಗಳ ಒಂದು ಬ್ಯಾಚ್ ನೀಡಿದಾಗ, ಈ ಅನೇಕ ವರ್ಗಗಳಲ್ಲಿ ಯಾವುದು ಡೇಟಾಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ? + +ಸ್ಕೈಕಿಟ್-ಲರ್ನ್ ವಿವಿಧ ಸಮಸ್ಯೆಗಳ ಪ್ರಕಾರ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸಲು ಹಲವಾರು ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ನೀಡುತ್ತದೆ. ಮುಂದಿನ ಎರಡು ಪಾಠಗಳಲ್ಲಿ ನೀವು ಈ ಆಲ್ಗಾರಿಥಮ್‌ಗಳ ಬಗ್ಗೆ ತಿಳಿಯುವಿರಿ. + +## ಅಭ್ಯಾಸ - ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಮತ್ತು ಸಮತೋಲಗೊಳಿಸಿ + +ಈ ಯೋಜನೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು ಮೊದಲ ಕಾರ್ಯವೆಂದರೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಮತ್ತು ಉತ್ತಮ ಫಲಿತಾಂಶಗಳಿಗಾಗಿ **ಸಮತೋಲಗೊಳಿಸುವುದು**. ಈ ಫೋಲ್ಡರ್‌ನ ರೂಟ್‌ನಲ್ಲಿ ಇರುವ ಖಾಲಿ _notebook.ipynb_ ಫೈಲ್‌ನಿಂದ ಪ್ರಾರಂಭಿಸಿ. + +ಮೊದಲಿಗೆ ಸ್ಥಾಪಿಸಬೇಕಾದದ್ದು [imblearn](https://imbalanced-learn.org/stable/) ಆಗಿದೆ. ಇದು ಸ್ಕೈಕಿಟ್-ಲರ್ನ್ ಪ್ಯಾಕೇಜ್ ಆಗಿದ್ದು, ಡೇಟಾವನ್ನು ಉತ್ತಮವಾಗಿ ಸಮತೋಲಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ (ನೀವು ಈ ಕಾರ್ಯವನ್ನು ಸ್ವಲ್ಪ ನಂತರ ತಿಳಿಯುವಿರಿ). + +1. `imblearn` ಅನ್ನು ಸ್ಥಾಪಿಸಲು, ಈ ಕೆಳಗಿನಂತೆ `pip install` ಅನ್ನು ರನ್ ಮಾಡಿ: + + ```python + pip install imblearn + ``` + +1. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಆಮದುಮಾಡಲು ಮತ್ತು ದೃಶ್ಯೀಕರಿಸಲು ಬೇಕಾದ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಆಮದುಮಾಡಿ, ಜೊತೆಗೆ `imblearn` ನಿಂದ `SMOTE` ಅನ್ನು ಆಮದುಮಾಡಿ. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + ಈಗ ನೀವು ಮುಂದಿನ ಹಂತದಲ್ಲಿ ಡೇಟಾವನ್ನು ಆಮದುಮಾಡಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. + +1. ಮುಂದಿನ ಕಾರ್ಯವೆಂದರೆ ಡೇಟಾವನ್ನು ಆಮದುಮಾಡುವುದು: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + `read_csv()` ಬಳಸಿ _cusines.csv_ ಫೈಲ್‌ನ ವಿಷಯವನ್ನು ಓದಿ `df` ಎಂಬ ಚರದಲ್ಲಿ ಇಡುತ್ತದೆ. + +1. ಡೇಟಾದ ಆಕಾರವನ್ನು ಪರಿಶೀಲಿಸಿ: + + ```python + df.head() + ``` + + ಮೊದಲ ಐದು ಸಾಲುಗಳು ಹೀಗೆ ಕಾಣಿಸುತ್ತವೆ: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. `info()` ಅನ್ನು ಕರೆಸಿ ಈ ಡೇಟಾ ಬಗ್ಗೆ ಮಾಹಿತಿ ಪಡೆಯಿರಿ: + + ```python + df.info() + ``` + + ನಿಮ್ಮ ಔಟ್‌ಪುಟ್ ಹೀಗೆ ಕಾಣುತ್ತದೆ: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## ಅಭ್ಯಾಸ - ಆಹಾರಗಳ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳುವುದು + +ಈಗ ಕೆಲಸ ಇನ್ನಷ್ಟು ಆಸಕ್ತಿದಾಯಕವಾಗುತ್ತದೆ. ಪ್ರತಿ ಆಹಾರದ ಪ್ರಕಾರ ಡೇಟಾ ಹಂಚಿಕೆಯನ್ನು ಕಂಡುಹಿಡಿಯೋಣ + +1. `barh()` ಅನ್ನು ಕರೆಸಿ ಡೇಟಾವನ್ನು ಬಾರ್‌ಗಳಾಗಿ ಚಿತ್ರಿಸಿ: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![ಆಹಾರ ಡೇಟಾ ಹಂಚಿಕೆ](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.kn.png) + + ಆಹಾರಗಳ ಸಂಖ್ಯೆ ಸೀಮಿತವಾಗಿದೆ, ಆದರೆ ಡೇಟಾ ಹಂಚಿಕೆ ಅಸಮಾನವಾಗಿದೆ. ನೀವು ಅದನ್ನು ಸರಿಪಡಿಸಬಹುದು! ಅದನ್ನು ಮಾಡುವ ಮೊದಲು, ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಅನ್ವೇಷಿಸಿ. + +1. ಪ್ರತಿ ಆಹಾರದ ಪ್ರಕಾರ ಎಷ್ಟು ಡೇಟಾ ಇದೆ ಎಂದು ಕಂಡುಹಿಡಿದು ಅದನ್ನು ಮುದ್ರಿಸಿ: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + ಔಟ್‌ಪುಟ್ ಹೀಗೆ ಕಾಣುತ್ತದೆ: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## ಪದಾರ್ಥಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು + +ಈಗ ನೀವು ಡೇಟಾದಲ್ಲಿ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಹೋಗಿ ಪ್ರತಿ ಆಹಾರದ ಪ್ರಕಾರ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳು ಯಾವುವು ಎಂದು ತಿಳಿದುಕೊಳ್ಳಬಹುದು. ಆಹಾರಗಳ ನಡುವೆ ಗೊಂದಲ ಉಂಟುಮಾಡುವ ಪುನರಾವರ್ತಿತ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಬೇಕು, ಆದ್ದರಿಂದ ಈ ಸಮಸ್ಯೆಯ ಬಗ್ಗೆ ತಿಳಿಯೋಣ. + +1. ಪೈಥಾನ್‌ನಲ್ಲಿ `create_ingredient()` ಎಂಬ ಫಂಕ್ಷನ್ ರಚಿಸಿ, ಇದು ಒಂದು ಪದಾರ್ಥ ಡೇಟಾಫ್ರೇಮ್ ರಚಿಸುತ್ತದೆ. ಈ ಫಂಕ್ಷನ್ ಒಂದು ಅನಗತ್ಯ ಕಾಲಮ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ, ಪದಾರ್ಥಗಳನ್ನು ಅವರ ಎಣಿಕೆಯ ಪ್ರಕಾರ ವಿಂಗಡಿಸುತ್ತದೆ: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + ಈಗ ನೀವು ಆ ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಿ ಪ್ರತಿ ಆಹಾರದ ಪ್ರಕಾರ ಟಾಪ್ ಹತ್ತು ಜನಪ್ರಿಯ ಪದಾರ್ಥಗಳ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳಬಹುದು. + +1. `create_ingredient()` ಅನ್ನು ಕರೆಸಿ ಮತ್ತು `barh()` ಅನ್ನು ಕರೆಸಿ ಚಿತ್ರಿಸಿ: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![ಥಾಯ್](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.kn.png) + +1. ಜಪಾನೀಸ್ ಡೇಟಾ ಬಗ್ಗೆ ಅದೇ ರೀತಿಯಲ್ಲಿ ಮಾಡಿ: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![ಜಪಾನೀಸ್](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.kn.png) + +1. ಈಗ ಚೈನೀಸ್ ಪದಾರ್ಥಗಳಿಗಾಗಿ: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![ಚೈನೀಸ್](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.kn.png) + +1. ಇಂಡಿಯನ್ ಪದಾರ್ಥಗಳನ್ನು ಚಿತ್ರಿಸಿ: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![ಇಂಡಿಯನ್](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.kn.png) + +1. ಕೊನೆಗೆ, ಕೊರಿಯನ್ ಪದಾರ್ಥಗಳನ್ನು ಚಿತ್ರಿಸಿ: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![ಕೊರಿಯನ್](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.kn.png) + +1. ಈಗ, ವಿಭಿನ್ನ ಆಹಾರಗಳ ನಡುವೆ ಗೊಂದಲ ಉಂಟುಮಾಡುವ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳನ್ನು `drop()` ಅನ್ನು ಕರೆಸಿ ತೆಗೆದುಹಾಕಿ: + + ಎಲ್ಲರೂ ಅಕ್ಕಿಯನ್ನು, ಬೆಳ್ಳುಳ್ಳಿ ಮತ್ತು ಶುಂಠಿಯನ್ನು ಇಷ್ಟಪಡುತ್ತಾರೆ! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.ಅನನ್ಯ() + feature_df.head() + ``` + +## ಡೇಟಾಸೆಟ್ ಸಮತೋಲಗೊಳಿಸಿ + +ನೀವು ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿದ ನಂತರ, [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "ಸಿಂಥೆಟಿಕ್ ಮೈನಾರಿಟಿ ಓವರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್ ತಂತ್ರ" - ಬಳಸಿ ಅದನ್ನು ಸಮತೋಲಗೊಳಿಸಿ. + +1. `fit_resample()` ಅನ್ನು ಕರೆಸಿ, ಈ ತಂತ್ರವು ಇಂಟರ್‌ಪೋಲೇಶನ್ ಮೂಲಕ ಹೊಸ ಮಾದರಿಗಳನ್ನು ರಚಿಸುತ್ತದೆ. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಮತೋಲಗೊಳಿಸುವ ಮೂಲಕ, ನೀವು ಅದನ್ನು ವರ್ಗೀಕರಿಸುವಾಗ ಉತ್ತಮ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯುತ್ತೀರಿ. ದ್ವೈತ ವರ್ಗೀಕರಣವನ್ನು ಯೋಚಿಸಿ. ನಿಮ್ಮ ಡೇಟಾದ ಬಹುಮತವು ಒಂದು ವರ್ಗವಾಗಿದ್ದರೆ, ML ಮಾದರಿ ಆ ವರ್ಗವನ್ನು ಹೆಚ್ಚು ಬಾರಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತದೆ, ಏಕೆಂದರೆ ಅದಕ್ಕೆ ಹೆಚ್ಚು ಡೇಟಾ ಇದೆ. ಡೇಟಾ ಸಮತೋಲಗೊಳಿಸುವುದು ಯಾವುದೇ ತಿರುವು ಹೊಂದಿದ ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಿ ಈ ಅಸಮತೋಲನವನ್ನು ನಿವಾರಿಸುತ್ತದೆ. + +1. ಈಗ ನೀವು ಪದಾರ್ಥ ಪ್ರತಿ ಲೇಬಲ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸಬಹುದು: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + ನಿಮ್ಮ ಔಟ್‌ಪುಟ್ ಹೀಗೆ ಕಾಣುತ್ತದೆ: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + ಡೇಟಾ ಚೆನ್ನಾಗಿ ಸ್ವಚ್ಛ, ಸಮತೋಲಿತ ಮತ್ತು ಬಹಳ ರುಚಿಕರವಾಗಿದೆ! + +1. ಕೊನೆಯ ಹಂತವೆಂದರೆ ನಿಮ್ಮ ಸಮತೋಲಿತ ಡೇಟಾವನ್ನು, ಲೇಬಲ್‌ಗಳು ಮತ್ತು ಲಕ್ಷಣಗಳನ್ನು ಒಳಗೊಂಡಂತೆ, ಹೊಸ ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಉಳಿಸಿ, ಅದನ್ನು ಫೈಲ್‌ಗೆ ರಫ್ತು ಮಾಡಬಹುದು: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. `transformed_df.head()` ಮತ್ತು `transformed_df.info()` ಬಳಸಿ ಡೇಟಾವನ್ನು ಮತ್ತೊಮ್ಮೆ ಪರಿಶೀಲಿಸಬಹುದು. ಭವಿಷ್ಯದ ಪಾಠಗಳಲ್ಲಿ ಬಳಸಲು ಈ ಡೇಟಾ ನಕಲನ್ನು ಉಳಿಸಿ: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + ಈ ಹೊಸ CSV ಈಗ ರೂಟ್ ಡೇಟಾ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ದೊರೆಯುತ್ತದೆ. + +--- + +## 🚀ಸವಾಲು + +ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ ಹಲವಾರು ಆಸಕ್ತಿದಾಯಕ ಡೇಟಾಸೆಟ್‌ಗಳಿವೆ. `data` ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ, ಯಾವುದು ದ್ವೈತ ಅಥವಾ ಬಹು-ವರ್ಗ ವರ್ಗೀಕರಣಕ್ಕೆ ಸೂಕ್ತವಾಗಿರಬಹುದು? ನೀವು ಆ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಯಾವ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳುತ್ತೀರಿ? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +SMOTE ನ API ಅನ್ನು ಅನ್ವೇಷಿಸಿ. ಯಾವ ಬಳಕೆ ಪ್ರಕರಣಗಳಿಗೆ ಇದು ಅತ್ಯುತ್ತಮ? ಯಾವ ಸಮಸ್ಯೆಗಳನ್ನು ಇದು ಪರಿಹರಿಸುತ್ತದೆ? + +## ನಿಯೋಜನೆ + +[ವರ್ಗೀಕರಣ ವಿಧಾನಗಳನ್ನು ಅನ್ವೇಷಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/1-Introduction/assignment.md b/translations/kn/4-Classification/1-Introduction/assignment.md new file mode 100644 index 000000000..f60c47b2d --- /dev/null +++ b/translations/kn/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,27 @@ + +# ವರ್ಗೀಕರಣ ವಿಧಾನಗಳನ್ನು ಅನ್ವೇಷಿಸಿ + +## ಸೂಚನೆಗಳು + +[Scikit-learn ಡಾಕ್ಯುಮೆಂಟೇಶನ್](https://scikit-learn.org/stable/supervised_learning.html) ನಲ್ಲಿ ನೀವು ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ ಹಲವು ವಿಧಾನಗಳ ದೊಡ್ಡ ಪಟ್ಟಿ ಕಂಡುಹಿಡಿಯಬಹುದು. ಈ ಡಾಕ್ಯುಮೆಂಟ್‌ಗಳಲ್ಲಿ ಸ್ವಲ್ಪ ಹುಡುಕಾಟ ಮಾಡಿ: ನಿಮ್ಮ ಗುರಿ ವರ್ಗೀಕರಣ ವಿಧಾನಗಳನ್ನು ಹುಡುಕಿ, ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿರುವ ಡೇಟಾಸೆಟ್‌ಗಳಿಗೆ ಹೊಂದಿಸಿ, ಅದಕ್ಕೆ ಕೇಳಬಹುದಾದ ಪ್ರಶ್ನೆಯನ್ನು ಮತ್ತು ವರ್ಗೀಕರಣ ತಂತ್ರವನ್ನು ಹೊಂದಿಸಿ. .doc ಫೈಲ್‌ನಲ್ಲಿ ಸ್ಪ್ರೆಡ್ಶೀಟ್ ಅಥವಾ ಟೇಬಲ್ ರಚಿಸಿ ಮತ್ತು ಡೇಟಾಸೆಟ್ ವರ್ಗೀಕರಣ ಆಲ್ಗೋರಿದಮ್‌ಗಳೊಂದಿಗೆ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ವಿವರಿಸಿ. + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | 5 ಆಲ್ಗೋರಿದಮ್‌ಗಳೊಂದಿಗೆ ವರ್ಗೀಕರಣ ತಂತ್ರವನ್ನು ವಿವರಿಸುವ ಡಾಕ್ಯುಮೆಂಟ್ ಒದಗಿಸಲಾಗಿದೆ. ಅವಲೋಕನ ಚೆನ್ನಾಗಿ ವಿವರಿಸಲಾಗಿದೆ ಮತ್ತು ವಿವರವಾದದ್ದು. | 3 ಆಲ್ಗೋರಿದಮ್‌ಗಳೊಂದಿಗೆ ವರ್ಗೀಕರಣ ತಂತ್ರವನ್ನು ವಿವರಿಸುವ ಡಾಕ್ಯುಮೆಂಟ್ ಒದಗಿಸಲಾಗಿದೆ. ಅವಲೋಕನ ಚೆನ್ನಾಗಿ ವಿವರಿಸಲಾಗಿದೆ ಮತ್ತು ವಿವರವಾದದ್ದು. | 3 ಕ್ಕಿಂತ ಕಡಿಮೆ ಆಲ್ಗೋರಿದಮ್‌ಗಳೊಂದಿಗೆ ವರ್ಗೀಕರಣ ತಂತ್ರವನ್ನು ವಿವರಿಸುವ ಡಾಕ್ಯುಮೆಂಟ್ ಒದಗಿಸಲಾಗಿದೆ ಮತ್ತು ಅವಲೋಕನ ಚೆನ್ನಾಗಿ ವಿವರಿಸಲ್ಪಟ್ಟಿಲ್ಲ ಅಥವಾ ವಿವರವಾದದ್ದು ಅಲ್ಲ. | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/1-Introduction/notebook.ipynb b/translations/kn/4-Classification/1-Introduction/notebook.ipynb new file mode 100644 index 000000000..5180781f6 --- /dev/null +++ b/translations/kn/4-Classification/1-Introduction/notebook.ipynb @@ -0,0 +1,41 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "d544ef384b7ba73757d830a72372a7f2", + "translation_date": "2025-12-19T17:02:36+00:00", + "source_file": "4-Classification/1-Introduction/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/1-Introduction/solution/Julia/README.md b/translations/kn/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..3ea200872 --- /dev/null +++ b/translations/kn/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb b/translations/kn/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb new file mode 100644 index 000000000..20389b2bf --- /dev/null +++ b/translations/kn/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb @@ -0,0 +1,731 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_10-R.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "2621e24705e8100893c9bf84e0fc8aef", + "translation_date": "2025-12-19T17:08:55+00:00", + "source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# ವರ್ಗೀಕರಣ ಮಾದರಿ ನಿರ್ಮಿಸಿ: ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು\n" + ], + "metadata": { + "id": "ItETB4tSFprR" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ವರ್ಗೀಕರಣಕ್ಕೆ ಪರಿಚಯ: ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ, ಸಿದ್ಧಪಡಿಸಿ ಮತ್ತು ದೃಶ್ಯೀಕರಿಸಿ\n", + "\n", + "ಈ ನಾಲ್ಕು ಪಾಠಗಳಲ್ಲಿ, ನೀವು ಕ್ಲಾಸಿಕ್ ಯಂತ್ರ ಅಧ್ಯಯನದ ಮೂಲಭೂತ ಗಮನಾರ್ಹ ವಿಷಯವಾದ *ವರ್ಗೀಕರಣ* ಅನ್ನು ಅನ್ವೇಷಿಸುವಿರಿ. ಏಷ್ಯಾ ಮತ್ತು ಭಾರತದಲ್ಲಿನ ಎಲ್ಲಾ ಅದ್ಭುತ ಆಹಾರಗಳ ಬಗ್ಗೆ ಇರುವ ಡೇಟಾಸೆಟ್‌ನೊಂದಿಗೆ ವಿವಿಧ ವರ್ಗೀಕರಣ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸುವುದನ್ನು ನಾವು ಹಾದುಹೋಗುತ್ತೇವೆ. ನೀವು ಹಸಿವಾಗಿದ್ದೀರಾ ಎಂದು ಆಶಿಸುತ್ತೇವೆ!\n", + "\n", + "

\n", + " \n", + "

ಈ ಪಾಠಗಳಲ್ಲಿ ಪ್ಯಾನ್-ಏಷಿಯನ್ ಆಹಾರಗಳನ್ನು ಆಚರಿಸಿ! ಚಿತ್ರ: ಜೆನ್ ಲೂಪರ್
\n", + "\n", + "\n", + "\n", + "\n", + "ವರ್ಗೀಕರಣವು [ನಿರೀಕ್ಷಿತ ಅಧ್ಯಯನ](https://wikipedia.org/wiki/Supervised_learning)ದ ಒಂದು ರೂಪವಾಗಿದ್ದು, ರಿಗ್ರೆಷನ್ ತಂತ್ರಜ್ಞಾನಗಳೊಂದಿಗೆ ಬಹಳ ಸಾಮಾನ್ಯತೆ ಹೊಂದಿದೆ. ವರ್ಗೀಕರಣದಲ್ಲಿ, ನೀವು ಒಂದು ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುತ್ತೀರಿ ಅದು ಯಾವ `ವರ್ಗ`ಕ್ಕೆ ಒಂದು ಐಟಂ ಸೇರಿದೆ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತದೆ. ಯಂತ್ರ ಅಧ್ಯಯನವು ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವಸ್ತುಗಳಿಗೆ ಮೌಲ್ಯಗಳು ಅಥವಾ ಹೆಸರುಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದರ ಬಗ್ಗೆ ಇದ್ದರೆ, ವರ್ಗೀಕರಣ ಸಾಮಾನ್ಯವಾಗಿ ಎರಡು ಗುಂಪುಗಳಿಗೆ ಬಿದ್ದುಹೋಗುತ್ತದೆ: *ದ್ವಿಪದ ವರ್ಗೀಕರಣ* ಮತ್ತು *ಬಹುಪದ ವರ್ಗೀಕರಣ*.\n", + "\n", + "ಸ್ಮರಿಸಿ:\n", + "\n", + "- **ರೇಖೀಯ ರಿಗ್ರೆಷನ್** ನಿಮಗೆ ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ಮತ್ತು ಹೊಸ ಡೇಟಾಪಾಯಿಂಟ್ ಆ ರೇಖೆಯ ಸಂಬಂಧದಲ್ಲಿ ಎಲ್ಲಿ ಬಿದ್ದೀತೆ ಎಂಬುದನ್ನು ನಿಖರವಾಗಿ ಊಹಿಸಲು ಸಹಾಯ ಮಾಡಿತು. ಆದ್ದರಿಂದ, ನೀವು ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯಗಳನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು, ಉದಾಹರಣೆಗೆ *ಸೆಪ್ಟೆಂಬರ್ ಮತ್ತು ಡಿಸೆಂಬರ್‌ನಲ್ಲಿ ಕಂಬಳಿಯ ಬೆಲೆ ಏನು ಇರುತ್ತದೆ* ಎಂದು.\n", + "\n", + "- **ಲಾಗಿಸ್ಟಿಕ್ ರಿಗ್ರೆಷನ್** ನಿಮಗೆ \"ದ್ವಿಪದ ವರ್ಗಗಳು\" ಅನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಹಾಯ ಮಾಡಿತು: ಈ ಬೆಲೆ ಮಟ್ಟದಲ್ಲಿ, *ಈ ಕಂಬಳಿ ಕಿತ್ತಳೆ ಬಣ್ಣದದೆಯೇ ಅಥವಾ ಅಲ್ಲವೇ*?\n", + "\n", + "ವರ್ಗೀಕರಣವು ಡೇಟಾ ಪಾಯಿಂಟ್‌ನ ಲೇಬಲ್ ಅಥವಾ ವರ್ಗವನ್ನು ನಿರ್ಧರಿಸಲು ವಿವಿಧ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಆಹಾರ ಡೇಟಾ ಜೊತೆ ಕೆಲಸ ಮಾಡಿ, ಒಂದು ಗುಂಪಿನ ಪದಾರ್ಥಗಳನ್ನು ಗಮನಿಸಿ ಅದರ ಮೂಲ ಆಹಾರವನ್ನು ನಾವು ನಿರ್ಧರಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ.\n", + "\n", + "### [**ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n", + "\n", + "### **ಪರಿಚಯ**\n", + "\n", + "ವರ್ಗೀಕರಣವು ಯಂತ್ರ ಅಧ್ಯಯನ ಸಂಶೋಧಕ ಮತ್ತು ಡೇಟಾ ವಿಜ್ಞಾನಿಯ ಮೂಲಭೂತ ಚಟುವಟಿಕೆಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. ಒಂದು ದ್ವಿಪದ ಮೌಲ್ಯದ ಮೂಲಭೂತ ವರ್ಗೀಕರಣದಿಂದ (\"ಈ ಇಮೇಲ್ ಸ್ಪ್ಯಾಮ್ ಆಗಿದೆಯೇ ಇಲ್ಲವೇ?\"), ಸಂಕೀರ್ಣ ಚಿತ್ರ ವರ್ಗೀಕರಣ ಮತ್ತು ವಿಭಾಗೀಕರಣದವರೆಗೆ, ಡೇಟಾವನ್ನು ವರ್ಗಗಳಲ್ಲಿ ವಿಂಗಡಿಸಿ ಅದಕ್ಕೆ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳುವುದು ಸದಾ ಉಪಯುಕ್ತ.\n", + "\n", + "ವಿಜ್ಞಾನಾತ್ಮಕವಾಗಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಹೇಳುವುದಾದರೆ, ನಿಮ್ಮ ವರ್ಗೀಕರಣ ವಿಧಾನವು ಇನ್ಪುಟ್ ಚರಗಳ ಮತ್ತು ಔಟ್‌ಪುಟ್ ಚರಗಳ ನಡುವಿನ ಸಂಬಂಧವನ್ನು ನಕ್ಷೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವ ಭವಿಷ್ಯವಾಣಿ ಮಾದರಿಯನ್ನು ರಚಿಸುತ್ತದೆ.\n", + "\n", + "

\n", + " \n", + "

ವರ್ಗೀಕರಣ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ನಿರ್ವಹಿಸಬೇಕಾದ ದ್ವಿಪದ ಮತ್ತು ಬಹುಪದ ಸಮಸ್ಯೆಗಳು. ಇನ್ಫೋಗ್ರಾಫಿಕ್: ಜೆನ್ ಲೂಪರ್
\n", + "\n", + "\n", + "\n", + "ನಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುವ, ದೃಶ್ಯೀಕರಿಸುವ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನ ಕಾರ್ಯಗಳಿಗೆ ಸಿದ್ಧಪಡಿಸುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸಲು ಬಳಸಬಹುದಾದ ವಿವಿಧ ಮಾರ್ಗಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳೋಣ.\n", + "\n", + "[ಸಂಖ್ಯಾಶಾಸ್ತ್ರ](https://wikipedia.org/wiki/Statistical_classification)ದಿಂದ ಪಡೆದ, ಕ್ಲಾಸಿಕ್ ಯಂತ್ರ ಅಧ್ಯಯನ ಬಳಸಿ ವರ್ಗೀಕರಣವು `ಧೂಮಪಾನಿ`, `ತೂಕ`, ಮತ್ತು `ವಯಸ್ಸು` ಮುಂತಾದ ಲಕ್ಷಣಗಳನ್ನು ಬಳಸಿಕೊಂಡು *X ರೋಗದ ಸಂಭವನೀಯತೆ* ಅನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ನೀವು ಮೊದಲು ಮಾಡಿದ ರಿಗ್ರೆಷನ್ ಅಭ್ಯಾಸಗಳಂತೆ, ಇದು ಒಂದು ನಿರೀಕ್ಷಿತ ಅಧ್ಯಯನ ತಂತ್ರವಾಗಿದೆ, ನಿಮ್ಮ ಡೇಟಾ ಲೇಬಲ್ ಮಾಡಲ್ಪಟ್ಟಿದ್ದು, ಯಂತ್ರ ಅಧ್ಯಯನ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಆ ಲೇಬಲ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಡೇಟಾಸೆಟ್‌ನ ವರ್ಗಗಳನ್ನು (ಅಥವಾ 'ಲಕ್ಷಣಗಳನ್ನು') ವರ್ಗೀಕರಿಸಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತವೆ ಮತ್ತು ಅವುಗಳನ್ನು ಗುಂಪು ಅಥವಾ ಫಲಿತಾಂಶಕ್ಕೆ ನಿಯೋಜಿಸುತ್ತವೆ.\n", + "\n", + "✅ ಆಹಾರಗಳ ಬಗ್ಗೆ ಒಂದು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಕಲ್ಪಿಸಿ. ಬಹುಪದ ಮಾದರಿ ಏನು ಉತ್ತರಿಸಬಹುದು? ದ್ವಿಪದ ಮಾದರಿ ಏನು ಉತ್ತರಿಸಬಹುದು? ನೀವು ಒಂದು ನಿರ್ದಿಷ್ಟ ಆಹಾರದಲ್ಲಿ ಮೆಂತ್ಯ ಬಳಕೆಯಾಗುವ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸಲು ಬಯಸಿದರೆ? ನೀವು ಸ್ಟಾರ್ ಅನೀಸ್, ಆರ್ಟಿಚೋಕ್, ಹೂಕೋಸು ಮತ್ತು ಹರ್ಸರಾಡಿಷ್ ತುಂಬಿದ ಗ್ರೋಸರಿ ಬ್ಯಾಗ್ ಇದ್ದಾಗ, ನೀವು ಸಾಮಾನ್ಯ ಭಾರತೀಯ ವಾನಗಿಯನ್ನು ರಚಿಸಬಹುದೇ ಎಂದು ನೋಡಲು ಬಯಸಿದರೆ?\n", + "\n", + "### **ಹಲೋ 'ವರ್ಗೀಕರಣಕಾರ'**\n", + "\n", + "ನಾವು ಈ ಆಹಾರ ಡೇಟಾಸೆಟ್‌ಗೆ ಕೇಳಬೇಕಾದ ಪ್ರಶ್ನೆ ವಾಸ್ತವವಾಗಿ ಒಂದು **ಬಹುಪದ ಪ್ರಶ್ನೆ**, ಏಕೆಂದರೆ ನಾವು ಹಲವಾರು ರಾಷ್ಟ್ರೀಯ ಆಹಾರಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೇವೆ. ಪದಾರ್ಥಗಳ ಒಂದು ಬ್ಯಾಚ್ ನೀಡಿದಾಗ, ಈ ಅನೇಕ ವರ್ಗಗಳಲ್ಲಿ ಯಾವುದು ಡೇಟಾ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ?\n", + "\n", + "ಟಿಡಿಮೋಡಲ್ಸ್ ವಿವಿಧ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಬಳಸಬಹುದಾದ ವಿವಿಧ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಮುಂದಿನ ಎರಡು ಪಾಠಗಳಲ್ಲಿ, ನೀವು ಈ ಆಲ್ಗಾರಿಥಮ್‌ಗಳ ಬಗ್ಗೆ ತಿಳಿಯುವಿರಿ.\n", + "\n", + "#### **ಪೂರ್ವಾಪೇಕ್ಷಿತ**\n", + "\n", + "ಈ ಪಾಠಕ್ಕಾಗಿ, ನಾವು ನಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಲು, ಸಿದ್ಧಪಡಿಸಲು ಮತ್ತು ದೃಶ್ಯೀಕರಿಸಲು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಅಗತ್ಯವಿದೆ:\n", + "\n", + "- `tidyverse`: [ಟಿಡಿವರ್ಸ್](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜ್‌ಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಮನರಂಜನೀಯವಾಗಿ ಮಾಡುತ್ತದೆ!\n", + "\n", + "- `tidymodels`: [ಟಿಡಿಮೋಡಲ್ಸ್](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜ್‌ಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕೆ ಉಪಯುಕ್ತವಾಗಿದೆ.\n", + "\n", + "- `DataExplorer`: [ಡೇಟಾ ಎಕ್ಸ್‌ಪ್ಲೋರರ್ ಪ್ಯಾಕೇಜ್](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) EDA ಪ್ರಕ್ರಿಯೆ ಮತ್ತು ವರದಿ ತಯಾರಿಕೆಯನ್ನು ಸರಳಗೊಳಿಸಲು ಮತ್ತು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸಲು ಉದ್ದೇಶಿಸಲಾಗಿದೆ.\n", + "\n", + "- `themis`: [ಥೆಮಿಸ್ ಪ್ಯಾಕೇಜ್](https://themis.tidymodels.org/) ಅಸಮತೋಲನ ಡೇಟಾ ನಿರ್ವಹಣೆಗೆ ಹೆಚ್ಚುವರಿ ರೆಸಿಪಿ ಹಂತಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n", + "\n", + "ಬದಲಾಗಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಮಾಯಾಜಾಲವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜ್‌ಗಳಿದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ, ಅವು ಇಲ್ಲದಿದ್ದರೆ ನಿಮ್ಮಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ], + "metadata": { + "id": "ri5bQxZ-Fz_0" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n", + "\r\n", + "pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)" + ], + "outputs": [], + "metadata": { + "id": "KIPxa4elGAPI" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ನಂತರ ಈ ಅದ್ಭುತ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ ನಮ್ಮ ಪ್ರಸ್ತುತ R ಸೆಷನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿರಿಸುವೆವು. (ಇದು ಕೇವಲ ಉದಾಹರಣೆಗೆ, `pacman::p_load()` ಈಗಾಗಲೇ ಅದನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಮಾಡಿದೆ)\n" + ], + "metadata": { + "id": "YkKAxOJvGD4C" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ವ್ಯಾಯಾಮ - ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಮತ್ತು ಸಮತೋಲಗೊಳಿಸಿ\n", + "\n", + "ಈ ಯೋಜನೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು ಮೊದಲ ಕಾರ್ಯವೆಂದರೆ ಉತ್ತಮ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯಲು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ ಮತ್ತು **ಸಮತೋಲಗೊಳಿಸುವುದು**\n", + "\n", + "ಡೇಟಾವನ್ನು ಪರಿಚಯಿಸೋಣ!🕵️\n" + ], + "metadata": { + "id": "PFkQDlk0GN5O" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Import data\r\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n", + "\r\n", + "# View the first 5 rows\r\n", + "df %>% \r\n", + " slice_head(n = 5)\r\n" + ], + "outputs": [], + "metadata": { + "id": "Qccw7okxGT0S" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಆಕರ್ಷಕವಾಗಿದೆ! ನೋಡಿದಂತೆ, ಮೊದಲ ಕಾಲಮ್ ಒಂದು ರೀತಿಯ `id` ಕಾಲಮ್ ಆಗಿದೆ. ಡೇಟಾ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಮಾಹಿತಿ ಪಡೆಯೋಣ.\n" + ], + "metadata": { + "id": "XrWnlgSrGVmR" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Basic information about the data\r\n", + "df %>%\r\n", + " introduce()\r\n", + "\r\n", + "# Visualize basic information above\r\n", + "df %>% \r\n", + " plot_intro(ggtheme = theme_light())" + ], + "outputs": [], + "metadata": { + "id": "4UcGmxRxGieA" + } + }, + { + "cell_type": "markdown", + "source": [ + "From the output, we can immediately see that we have `2448` rows and `385` columns and `0` missing values. We also have 1 discrete column, *cuisine*.\n", + "\n", + "## ವ್ಯಾಯಾಮ - ಆಹಾರ ಶೈಲಿಗಳ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳುವುದು\n", + "\n", + "ಈಗ ಕೆಲಸ ಹೆಚ್ಚು ಆಸಕ್ತಿದಾಯಕವಾಗಲು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ಪ್ರತಿ ಆಹಾರ ಶೈಲಿಗೆ ಪ್ರಕಾರದ ಡೇಟಾ ವಿತರಣೆ ಕಂಡುಹಿಡಿಯೋಣ.\n" + ], + "metadata": { + "id": "AaPubl__GmH5" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Count observations per cuisine\r\n", + "df %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(n)\r\n", + "\r\n", + "# Plot the distribution\r\n", + "theme_set(theme_light())\r\n", + "df %>% \r\n", + " count(cuisine) %>% \r\n", + " ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n", + " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n", + " ylab(\"cuisine\")" + ], + "outputs": [], + "metadata": { + "id": "FRsBVy5eGrrv" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಸಂಖ್ಯಾತ್ಮಕವಾದ ಅಡುಗೆಶೈಲಿಗಳು ಇವೆ, ಆದರೆ ಡೇಟಾದ ವಿತರಣೆಯು ಅಸಮಾನವಾಗಿದೆ. ನೀವು ಅದನ್ನು ಸರಿಪಡಿಸಬಹುದು! ಅದನ್ನು ಮಾಡುವ ಮೊದಲು, ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಅನ್ವೇಷಿಸಿ.\n", + "\n", + "ಮುಂದೆ, ಪ್ರತಿ ಅಡುಗೆಶೈಲಿಯನ್ನು ಅದರ ಸ್ವತಂತ್ರ ಟಿಬಲ್‌ಗೆ ಹಂಚಿ ಮತ್ತು ಪ್ರತಿ ಅಡುಗೆಶೈಲಿಗೆ ಎಷ್ಟು ಡೇಟಾ ಲಭ್ಯವಿದೆ (ಸಾಲುಗಳು, ಕಾಲಮ್‌ಗಳು) ಎಂದು ಕಂಡುಹಿಡಿಯೋಣ.\n", + "\n", + "> [ಟಿಬಲ್](https://tibble.tidyverse.org/) ಒಂದು ಆಧುನಿಕ ಡೇಟಾ ಫ್ರೇಮ್ ಆಗಿದೆ.\n", + "\n", + "

\n", + " \n", + "

ಕಲಾಕೃತಿ @allison_horst ಅವರಿಂದ
\n" + ], + "metadata": { + "id": "vVvyDb1kG2in" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Create individual tibble for the cuisines\r\n", + "thai_df <- df %>% \r\n", + " filter(cuisine == \"thai\")\r\n", + "japanese_df <- df %>% \r\n", + " filter(cuisine == \"japanese\")\r\n", + "chinese_df <- df %>% \r\n", + " filter(cuisine == \"chinese\")\r\n", + "indian_df <- df %>% \r\n", + " filter(cuisine == \"indian\")\r\n", + "korean_df <- df %>% \r\n", + " filter(cuisine == \"korean\")\r\n", + "\r\n", + "\r\n", + "# Find out how much data is available per cuisine\r\n", + "cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n", + " \"japanese df:\", dim(japanese_df), \"\\n\",\r\n", + " \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n", + " \"indian_df:\", dim(indian_df), \"\\n\",\r\n", + " \"korean_df:\", dim(korean_df))" + ], + "outputs": [], + "metadata": { + "id": "0TvXUxD3G8Bk" + } + }, + { + "cell_type": "markdown", + "source": [ + "Perfect!😋\n", + "\n", + "## **ವ್ಯಾಯಾಮ - dplyr ಬಳಸಿ ಆಹಾರ ಪ್ರಕಾರದ ಪ್ರಾಥಮಿಕ ಪದಾರ್ಥಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು**\n", + "\n", + "ಈಗ ನೀವು ಡೇಟಾದಲ್ಲಿ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಹೋಗಿ ಪ್ರತಿ ಆಹಾರ ಪ್ರಕಾರದ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳು ಯಾವುವು ಎಂದು ತಿಳಿದುಕೊಳ್ಳಬಹುದು. ಆಹಾರ ಪ್ರಕಾರಗಳ ನಡುವೆ ಗೊಂದಲ ಉಂಟುಮಾಡುವ ಪುನರಾವರ್ತಿತ ಡೇಟಾವನ್ನು ನೀವು ಶುದ್ಧೀಕರಿಸಬೇಕು, ಆದ್ದರಿಂದ ಈ ಸಮಸ್ಯೆಯ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳೋಣ.\n", + "\n", + "R ನಲ್ಲಿ `create_ingredient()` ಎಂಬ ಫಂಕ್ಷನ್ ಅನ್ನು ರಚಿಸಿ, ಇದು ಒಂದು ಪದಾರ್ಥ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಈ ಫಂಕ್ಷನ್ ಒಂದು ಅನಗತ್ಯ ಕಾಲಮ್ ಅನ್ನು ತೆಗೆದುಹಾಕುವುದರಿಂದ ಪ್ರಾರಂಭಿಸಿ, ಪದಾರ್ಥಗಳನ್ನು ಅವರ ಎಣಿಕೆಯ ಮೂಲಕ ಕ್ರಮಬದ್ಧಗೊಳಿಸುತ್ತದೆ.\n", + "\n", + "R ನಲ್ಲಿ ಫಂಕ್ಷನ್‌ನ ಮೂಲ ರಚನೆ:\n", + "\n", + "`myFunction <- function(arglist){`\n", + "\n", + "**`...`**\n", + "\n", + "**`return`**`(value)`\n", + "\n", + "`}`\n", + "\n", + "R ಫಂಕ್ಷನ್‌ಗಳ ಬಗ್ಗೆ ಸರಳ ಪರಿಚಯವನ್ನು ನೀವು [ಇಲ್ಲಿ](https://skirmer.github.io/presentations/functions_with_r.html#1) ಕಾಣಬಹುದು.\n", + "\n", + "ನೇರವಾಗಿ ಪ್ರಾರಂಭಿಸೋಣ! ನಾವು ನಮ್ಮ ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕಲಿತ [dplyr ಕ್ರಿಯಾಪದಗಳನ್ನು](https://dplyr.tidyverse.org/) ಬಳಸಲಿದ್ದೇವೆ. ಪುನರಾವೃತ್ತಿಯಾಗಿ:\n", + "\n", + "- `dplyr::select()`: ನೀವು ಯಾವ **ಕಾಲಮ್‌ಗಳನ್ನು** ಉಳಿಸಬೇಕು ಅಥವಾ ಹೊರತುಪಡಿಸಬೇಕು ಎಂದು ಆಯ್ಕೆಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "- `dplyr::pivot_longer()`: ಡೇಟಾವನ್ನು \"ಉದ್ದಗೊಳಿಸಲು\" ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಹೆಚ್ಚಿಸಿ ಕಾಲಮ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.\n", + "\n", + "- `dplyr::group_by()` ಮತ್ತು `dplyr::summarise()`: ವಿಭಿನ್ನ ಗುಂಪುಗಳಿಗಾಗಿ ಸಾರಾಂಶ ಅಂಕಿಅಂಶಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಮತ್ತು ಅದನ್ನು ಒಳ್ಳೆಯ ಟೇಬಲ್‌ನಲ್ಲಿ ಇಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "- `dplyr::filter()`: ನಿಮ್ಮ ಶರತ್ತುಗಳನ್ನು ಪೂರೈಸುವ ಸಾಲುಗಳನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿರುವ ಡೇಟಾದ ಉಪಸಮೂಹವನ್ನು ರಚಿಸುತ್ತದೆ.\n", + "\n", + "- `dplyr::mutate()`: ಕಾಲಮ್‌ಗಳನ್ನು ರಚಿಸಲು ಅಥವಾ ಬದಲಾಯಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "Allison Horst ರವರ [*ಕಲೆಯೊಂದಿಗೆ* ತುಂಬಿದ learnr ಟ್ಯುಟೋರಿಯಲ್](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) ಅನ್ನು ನೋಡಿ, ಇದು dplyr *(Tidyverse ಭಾಗ)* ನಲ್ಲಿ ಕೆಲವು ಉಪಯುಕ್ತ ಡೇಟಾ ವ್ರ್ಯಾಂಗ್ಲಿಂಗ್ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "K3RF5bSCHC76" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Creates a functions that returns the top ingredients by class\r\n", + "\r\n", + "create_ingredient <- function(df){\r\n", + " \r\n", + " # Drop the id column which is the first colum\r\n", + " ingredient_df = df %>% select(-1) %>% \r\n", + " # Transpose data to a long format\r\n", + " pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n", + " # Find the top most ingredients for a particular cuisine\r\n", + " group_by(ingredients) %>% \r\n", + " summarise(n_instances = sum(count)) %>% \r\n", + " filter(n_instances != 0) %>% \r\n", + " # Arrange by descending order\r\n", + " arrange(desc(n_instances)) %>% \r\n", + " mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n", + " \r\n", + " \r\n", + " return(ingredient_df)\r\n", + "} # End of function" + ], + "outputs": [], + "metadata": { + "id": "uB_0JR82HTPa" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ ನಾವು ಈ ಫಂಕ್ಷನ್ ಅನ್ನು ಉಪಯೋಗಿಸಿ ಪ್ರತಿ ಆಹಾರ ಶೈಲಿಯಲ್ಲಿನ ಟಾಪ್ ಹತ್ತು ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಪದಾರ್ಥಗಳ ಬಗ್ಗೆ ಒಂದು ಕಲ್ಪನೆ ಪಡೆಯಬಹುದು. `thai_df` ಜೊತೆಗೆ ಇದನ್ನು ಪ್ರಯೋಗಿಸೋಣ.\n" + ], + "metadata": { + "id": "h9794WF8HWmc" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Call create_ingredient and display popular ingredients\r\n", + "thai_ingredient_df <- create_ingredient(df = thai_df)\r\n", + "\r\n", + "thai_ingredient_df %>% \r\n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "agQ-1HrcHaEA" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಹಿಂದಿನ ವಿಭಾಗದಲ್ಲಿ, ನಾವು `geom_col()` ಅನ್ನು ಬಳಸಿದ್ದೇವೆ, ಈಗ `geom_bar` ಅನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂದು ನೋಡೋಣ, ಬಾರ್ ಚಾರ್ಟ್‌ಗಳನ್ನು ರಚಿಸಲು. ಹೆಚ್ಚಿನ ಓದಿಗಾಗಿ `?geom_bar` ಅನ್ನು ಬಳಸಿ.\n" + ], + "metadata": { + "id": "kHu9ffGjHdcX" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make a bar chart for popular thai cuisines\r\n", + "thai_ingredient_df %>% \r\n", + " slice_head(n = 10) %>% \r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "fb3Bx_3DHj6e" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ಜಪಾನೀಸ್ ಡೇಟಾದಿಗೂ ಅದೇ ರೀತಿಯಲ್ಲಿ ಮಾಡೋಣ\n" + ], + "metadata": { + "id": "RHP_xgdkHnvM" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Japanese cuisines and make bar chart\r\n", + "create_ingredient(df = japanese_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")\r\n" + ], + "outputs": [], + "metadata": { + "id": "019v8F0XHrRU" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಚೈನೀಸ್ ಆಹಾರಗಳ ಬಗ್ಗೆ ಏನು?\n" + ], + "metadata": { + "id": "iIGM7vO8Hu3v" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Chinese cuisines and make bar chart\r\n", + "create_ingredient(df = chinese_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "lHd9_gd2HyzU" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ಭಾರತೀಯ ಆಹಾರಗಳನ್ನು ನೋಡೋಣ 🌶️.\n" + ], + "metadata": { + "id": "ir8qyQbNH1c7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Indian cuisines and make bar chart\r\n", + "create_ingredient(df = indian_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "ApukQtKjH5FO" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಕೊನೆಗೆ, ಕೊರಿಯನ್ ಪದಾರ್ಥಗಳನ್ನು ಚಿತ್ರಿಸಿ.\n" + ], + "metadata": { + "id": "qv30cwY1H-FM" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Korean cuisines and make bar chart\r\n", + "create_ingredient(df = korean_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "lumgk9cHIBie" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಡೇಟಾ ದೃಶ್ಯೀಕರಣಗಳಿಂದ, ನಾವು ಈಗ ವಿಭಿನ್ನ ಆಹಾರ ಶೈಲಿಗಳ ನಡುವೆ ಗೊಂದಲವನ್ನು ಉಂಟುಮಾಡುವ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳನ್ನು `dplyr::select()` ಬಳಸಿ ತೆಗೆದುಹಾಕಬಹುದು.\n", + "\n", + "ಎಲ್ಲರೂ ಅಕ್ಕಿ, ಬೆಳ್ಳುಳ್ಳಿ ಮತ್ತು ಶುಂಠಿ ಅನ್ನು ಪ್ರೀತಿಸುತ್ತಾರೆ!\n" + ], + "metadata": { + "id": "iO4veMXuIEta" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Drop id column, rice, garlic and ginger from our original data set\r\n", + "df_select <- df %>% \r\n", + " select(-c(1, rice, garlic, ginger))\r\n", + "\r\n", + "# Display new data set\r\n", + "df_select %>% \r\n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "iHJPiG6rIUcK" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ರೆಸಿಪಿಗಳನ್ನು ಬಳಸಿ ಡೇಟಾ ಪೂರ್ವಸಿದ್ಧತೆ 👩‍🍳👨‍🍳 - ಅಸಮತೋಲನ ಡೇಟಾ ನಿರ್ವಹಣೆ ⚖️\n", + "\n", + "

\n", + " \n", + "

ಕಲಾಕೃತಿ @allison_horst ಅವರಿಂದ
\n", + "\n", + "ಈ ಪಾಠವು ಆಹಾರವರ್ಗಗಳ ಬಗ್ಗೆ ಇರುವುದರಿಂದ, ನಾವು `recipes` ಅನ್ನು ಸಂದರ್ಭದಲ್ಲಿ ಇರಿಸಬೇಕಾಗಿದೆ.\n", + "\n", + "Tidymodels ಇನ್ನೊಂದು ಚೆನ್ನಾದ ಪ್ಯಾಕೇಜ್ ಒದಗಿಸುತ್ತದೆ: `recipes` - ಡೇಟಾ ಪೂರ್ವಸಿದ್ಧತೆಗಾಗಿ ಪ್ಯಾಕೇಜ್.\n" + ], + "metadata": { + "id": "kkFd-JxdIaL6" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಮ್ಮ ಆಹಾರವರ್ಗಗಳ ವಿತರಣೆ ಮತ್ತೊಮ್ಮೆ ನೋಡೋಣ.\n" + ], + "metadata": { + "id": "6l2ubtTPJAhY" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Distribution of cuisines\r\n", + "old_label_count <- df_select %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))\r\n", + "\r\n", + "old_label_count" + ], + "outputs": [], + "metadata": { + "id": "1e-E9cb7JDVi" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನೀವು ನೋಡಬಹುದು, ಆಹಾರದ ಪ್ರಕಾರಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಬಹಳ ಅಸಮಾನ ವಿತರಣೆಯಿದೆ. ಕೊರಿಯನ್ ಆಹಾರಗಳು ತಾಯ್ ಆಹಾರಗಳಿಗಿಂತ ಸುಮಾರು 3 ಪಟ್ಟು ಹೆಚ್ಚು. ಅಸಮತೋಲನದ ಡೇಟಾ ಸಾಮಾನ್ಯವಾಗಿ ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ದ್ವಿಪದ ವರ್ಗೀಕರಣವನ್ನು ಯೋಚಿಸಿ. ನಿಮ್ಮ ಡೇಟಾದ ಬಹುಮತವು ಒಂದು ವರ್ಗವಾಗಿದ್ದರೆ, ಒಂದು ಯಂತ್ರ ಕಲಿಕೆ ಮಾದರಿ ಆ ವರ್ಗವನ್ನು ಹೆಚ್ಚು ಬಾರಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುತ್ತದೆ, ಏಕೆಂದರೆ ಅದಕ್ಕೆ ಹೆಚ್ಚು ಡೇಟಾ ಇದೆ. ಡೇಟಾವನ್ನು ಸಮತೋಲನಗೊಳಿಸುವುದು ಯಾವುದೇ ತಿರುವು ಹೊಂದಿದ ಡೇಟಾವನ್ನು ತೆಗೆದು ಈ ಅಸಮತೋಲನವನ್ನು ತೆಗೆದುಹಾಕಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಬಹುತೆಕ ಮಾದರಿಗಳು ಗಮನಗಳ ಸಂಖ್ಯೆ ಸಮಾನವಾಗಿದ್ದಾಗ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಮತ್ತು ಆದ್ದರಿಂದ ಅಸಮತೋಲನ ಡೇಟಾದೊಂದಿಗೆ ಹೋರಾಡುತ್ತವೆ.\n", + "\n", + "ಅಸಮತೋಲನ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ನಿಭಾಯಿಸುವ ಪ್ರಮುಖ ಎರಡು ವಿಧಾನಗಳಿವೆ:\n", + "\n", + "- ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗಕ್ಕೆ ಗಮನಗಳನ್ನು ಸೇರಿಸುವುದು: `ಓವರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್` ಉದಾಹರಣೆಗೆ SMOTE ಆಲ್ಗಾರಿದಮ್ ಬಳಸಿ\n", + "\n", + "- ಬಹುಮತ ವರ್ಗದಿಂದ ಗಮನಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು: `ಅಂಡರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್`\n", + "\n", + "ಇದೀಗ ನಾವು `recipe` ಬಳಸಿ ಅಸಮತೋಲನ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ಹೇಗೆ ನಿಭಾಯಿಸುವುದನ್ನು ಪ್ರದರ್ಶಿಸೋಣ. ಒಂದು recipe ಅನ್ನು ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ಸಿದ್ಧಗೊಳಿಸಲು ಡೇಟಾ ಸೆಟ್‌ಗೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ವಿವರಿಸುವ ಬ್ಲೂಪ್ರಿಂಟ್ ಎಂದು ಪರಿಗಣಿಸಬಹುದು.\n" + ], + "metadata": { + "id": "soAw6826JKx9" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load themis package for dealing with imbalanced data\r\n", + "library(themis)\r\n", + "\r\n", + "# Create a recipe for preprocessing data\r\n", + "cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n", + " step_smote(cuisine)\r\n", + "\r\n", + "cuisines_recipe" + ], + "outputs": [], + "metadata": { + "id": "HS41brUIJVJy" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಮ್ಮ ಪೂರ್ವಸಿದ್ಧತಾ ಹಂತಗಳನ್ನು ವಿಭಜಿಸೋಣ.\n", + "\n", + "- ಸೂತ್ರದೊಂದಿಗೆ `recipe()` ಗೆ ಕರೆ ಮಾಡುವುದರಿಂದ `df_select` ಡೇಟಾವನ್ನು ಉಲ್ಲೇಖವಾಗಿ ಬಳಸಿಕೊಂಡು ಚರಗಳ *ಪಾತ್ರಗಳನ್ನು* ರೆಸಿಪಿಗೆ ತಿಳಿಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ `cuisine` ಕಾಲಮ್‌ಗೆ `outcome` ಪಾತ್ರವನ್ನು ನೀಡಲಾಗಿದೆ, ಉಳಿದ ಕಾಲಮ್‌ಗಳಿಗೆ `predictor` ಪಾತ್ರವನ್ನು ನೀಡಲಾಗಿದೆ.\n", + "\n", + "- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗದ ಹೊಸ ಉದಾಹರಣೆಗಳನ್ನು ಸಮೀಪದ ನೆರೆಹೊರೆಯವರನ್ನು ಬಳಸಿ ಸೃಷ್ಟಿಸುವ ರೆಸಿಪಿ ಹಂತದ *ವಿವರಣೆ* ರಚಿಸುತ್ತದೆ.\n", + "\n", + "ಈಗ, ನಾವು ಪೂರ್ವಸಿದ್ಧ ಡೇಟಾವನ್ನು ನೋಡಲು ಬಯಸಿದರೆ, ನಾವು [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) ಮತ್ತು [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) ನಮ್ಮ ರೆಸಿಪಿಯನ್ನು ಬಳಸಬೇಕಾಗುತ್ತದೆ.\n", + "\n", + "`prep()`: ತರಬೇತಿ ಸೆಟ್‌ನಿಂದ ಅಗತ್ಯವಾದ ಪರಿಮಾಣಗಳನ್ನು ಅಂದಾಜು ಮಾಡುತ್ತದೆ, ಅವುಗಳನ್ನು ನಂತರ ಇತರ ಡೇಟಾ ಸೆಟ್‌ಗಳಿಗೆ ಅನ್ವಯಿಸಬಹುದು.\n", + "\n", + "`bake()`: ಪೂರ್ವಸಿದ್ಧ ರೆಸಿಪಿಯನ್ನು ತೆಗೆದುಕೊಂಡು ಯಾವುದೇ ಡೇಟಾ ಸೆಟ್‌ಗೆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "Yb-7t7XcJaC8" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Prep and bake the recipe\r\n", + "preprocessed_df <- cuisines_recipe %>% \r\n", + " prep() %>% \r\n", + " bake(new_data = NULL) %>% \r\n", + " relocate(cuisine)\r\n", + "\r\n", + "# Display data\r\n", + "preprocessed_df %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "# Quick summary stats\r\n", + "preprocessed_df %>% \r\n", + " introduce()" + ], + "outputs": [], + "metadata": { + "id": "9QhSgdpxJl44" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ಈಗ ನಮ್ಮ ಆಹಾರವರ್ಗಗಳ ವಿತರಣೆಯನ್ನು ಪರಿಶೀಲಿಸಿ ಅವುಗಳನ್ನು ಅಸಮತೋಲನ ಡೇಟಾದೊಂದಿಗೆ ಹೋಲಿಸೋಣ.\n" + ], + "metadata": { + "id": "dmidELh_LdV7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Distribution of cuisines\r\n", + "new_label_count <- preprocessed_df %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))\r\n", + "\r\n", + "list(new_label_count = new_label_count,\r\n", + " old_label_count = old_label_count)" + ], + "outputs": [], + "metadata": { + "id": "aSh23klBLwDz" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಯಮ್! ಡೇಟಾ ಚೆನ್ನಾಗಿದ್ದು, ಸಮತೋಲನದಲ್ಲಿದ್ದು, ತುಂಬಾ ರುಚಿಕರವಾಗಿದೆ 😋!\n", + "\n", + "> ಸಾಮಾನ್ಯವಾಗಿ, ಒಂದು ರೆಸಿಪಿ ಅನ್ನು ಮಾದರೀಕರಣಕ್ಕಾಗಿ ಪ್ರೀಪ್ರೊಸೆಸರ್ ಆಗಿ ಬಳಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ ಅದು ಡೇಟಾ ಸೆಟ್ ಮೇಲೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ, ಇದರಿಂದ ಅದು ಮಾದರೀಕರಣಕ್ಕೆ ಸಿದ್ಧವಾಗುತ್ತದೆ. ಆ ಸಂದರ್ಭದಲ್ಲಿ, `workflow()` ಸಾಮಾನ್ಯವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ (ನಾವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಈಗಾಗಲೇ ನೋಡಿದ್ದಂತೆ) ಕೈಯಿಂದ ರೆಸಿಪಿಯನ್ನು ಅಂದಾಜಿಸುವ ಬದಲು\n", + ">\n", + "> ಆದ್ದರಿಂದ, ನೀವು ಸಾಮಾನ್ಯವಾಗಿ tidymodels ಬಳಸುವಾಗ **`prep()`** ಮತ್ತು **`bake()`** ರೆಸಿಪಿಗಳನ್ನು ಬಳಸಬೇಕಾಗಿಲ್ಲ, ಆದರೆ ಅವು ನಿಮ್ಮ ಉಪಕರಣಸಂಚಯದಲ್ಲಿ ಸಹಾಯಕ ಕಾರ್ಯಗಳಾಗಿವೆ, ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ ರೆಸಿಪಿಗಳು ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವುದನ್ನು ದೃಢೀಕರಿಸಲು.\n", + ">\n", + "> ನೀವು **`bake()`** ಮಾಡಿದಾಗ, **`new_data = NULL`** ಇರುವ ಪ್ರಿಪ್ ಮಾಡಿದ ರೆಸಿಪಿ, ನೀವು ರೆಸಿಪಿ ನಿರ್ಧರಿಸುವಾಗ ನೀಡಿದ ಡೇಟಾವನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತದೆ, ಆದರೆ ಪ್ರೀಪ್ರೊಸೆಸಿಂಗ್ ಹಂತಗಳನ್ನು ಅನುಸರಿಸಿಕೊಂಡು.\n", + "\n", + "ಈ ಡೇಟಾದ ಪ್ರತಿಯನ್ನು ಭವಿಷ್ಯದ ಪಾಠಗಳಲ್ಲಿ ಬಳಸಲು ಈಗ ಉಳಿಸೋಣ:\n" + ], + "metadata": { + "id": "HEu80HZ8L7ae" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Save preprocessed data\r\n", + "write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")" + ], + "outputs": [], + "metadata": { + "id": "cBmCbIgrMOI6" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈ ಹೊಸ CSV ಈಗ ರೂಟ್ ಡೇಟಾ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಕಂಡುಬರುತ್ತದೆ.\n", + "\n", + "**🚀ಸವಾಲು**\n", + "\n", + "ಈ ಪಠ್ಯಕ್ರಮದಲ್ಲಿ ಹಲವಾರು ಆಸಕ್ತಿದಾಯಕ ಡೇಟಾಸೆಟ್‌ಗಳಿವೆ. `data` ಫೋಲ್ಡರ್‌ಗಳನ್ನು ತೋಡಿಸಿ ಮತ್ತು ಯಾವುದೇ ಡೇಟಾಸೆಟ್‌ಗಳು ಬೈನರಿ ಅಥವಾ ಬಹು-ವರ್ಗ ವರ್ಗೀಕರಣಕ್ಕೆ ಸೂಕ್ತವಾಗಿದೆಯೇ ಎಂದು ನೋಡಿ? ಈ ಡೇಟಾಸೆಟ್‌ನಿಂದ ನೀವು ಯಾವ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳುತ್ತೀರಿ?\n", + "\n", + "## [**ಪಾಠದ ನಂತರದ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n", + "\n", + "## **ಪುನರಾವೃತ್ತಿ & ಸ್ವಯಂ ಅಧ್ಯಯನ**\n", + "\n", + "- [package themis](https://github.com/tidymodels/themis) ಅನ್ನು ಪರಿಶೀಲಿಸಿ. ಅಸಮತೋಲನ ಡೇಟಾ ನಿರ್ವಹಿಸಲು ನಾವು ಇನ್ನಾವುದೇ ತಂತ್ರಗಳನ್ನು ಬಳಸಬಹುದು?\n", + "\n", + "- ಟಿಡಿ ಮಾದರಿಗಳು [ಉಲ್ಲೇಖ ವೆಬ್‌ಸೈಟ್](https://www.tidymodels.org/start/).\n", + "\n", + "- H. ವಿಕ್‌ಹ್ಯಾಮ್ ಮತ್ತು G. ಗ್ರೋಲೆಮಂಡ್, [*R for Data Science: Visualize, Model, Transform, Tidy, and Import Data*](https://r4ds.had.co.nz/).\n", + "\n", + "#### ಧನ್ಯವಾದಗಳು:\n", + "\n", + "[`Allison Horst`](https://twitter.com/allison_horst/) ಅವರಿಗೆ R ಅನ್ನು ಹೆಚ್ಚು ಆತಿಥ್ಯಪೂರ್ಣ ಮತ್ತು ಆಕರ್ಷಕವಾಗಿಸುವ ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ. ಅವಳ [ಗ್ಯಾಲರಿ](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಚಿತ್ರಣಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ.\n", + "\n", + "[Cassie Breviu](https://www.twitter.com/cassieview) ಮತ್ತು [Jen Looper](https://www.twitter.com/jenlooper) ಅವರಿಗೆ ಈ ಮಾಯಾಜಾಲದ ಮೂಲ Python ಆವೃತ್ತಿಯನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ ♥️\n", + "\n", + "

\n", + " \n", + "

ಕಲಾಕೃತಿ @allison_horst ಅವರಿಂದ
\n" + ], + "metadata": { + "id": "WQs5621pMGwf" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/1-Introduction/solution/notebook.ipynb b/translations/kn/4-Classification/1-Introduction/solution/notebook.ipynb new file mode 100644 index 000000000..a56b33401 --- /dev/null +++ b/translations/kn/4-Classification/1-Introduction/solution/notebook.ipynb @@ -0,0 +1,677 @@ +{ + "cells": [ + { + "source": [ + "# ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು \n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "Imblearn ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ, ಇದು SMOTE ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ಇದು ಕ್ಲಾಸಿಫಿಕೇಶನ್ ಮಾಡುವಾಗ ಅಸಮತೋಲಿತ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುವ Scikit-learn ಪ್ಯಾಕೇಜ್ ಆಗಿದೆ. (https://imbalanced-learn.org/stable/)\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: imblearn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.0)\n", + "Requirement already satisfied: imbalanced-learn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imblearn) (0.8.0)\n", + "Requirement already satisfied: numpy>=1.13.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.19.2)\n", + "Requirement already satisfied: scipy>=0.19.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.4.1)\n", + "Requirement already satisfied: scikit-learn>=0.24 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.24.2)\n", + "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.16.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.24->imbalanced-learn->imblearn) (2.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install imblearn" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib as mpl\n", + "import numpy as np\n", + "from imblearn.over_sampling import SMOTE" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('../../data/cuisines.csv')" + ] + }, + { + "source": [ + "ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ನೀಡಲಾದ ವಿವಿಧ ಆಹಾರಶೈಲಿಗಳಲ್ಲಿನ ಎಲ್ಲಾ ವಿಧದ ಪದಾರ್ಥಗಳನ್ನು ಸೂಚಿಸುವ 385 ಕಾಲಮ್‌ಗಳು ಸೇರಿವೆ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 65 indian 0 0 0 0 0 \n", + "1 66 indian 1 0 0 0 0 \n", + "2 67 indian 0 0 0 0 0 \n", + "3 68 indian 0 0 0 0 0 \n", + "4 69 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 385 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
065indian00000000...0000000000
166indian10000000...0000000000
267indian00000000...0000000000
368indian00000000...0000000000
469indian00000000...0000000010
\n

5 rows × 385 columns

\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\nRangeIndex: 2448 entries, 0 to 2447\nColumns: 385 entries, Unnamed: 0 to zucchini\ndtypes: int64(384), object(1)\nmemory usage: 7.2+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "korean 799\n", + "indian 598\n", + "chinese 442\n", + "japanese 320\n", + "thai 289\n", + "Name: cuisine, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "df.cuisine.value_counts()" + ] + }, + { + "source": [ + "ಬಾರ್ ಗ್ರಾಫ್‌ನಲ್ಲಿ ಆಹಾರ ಪದ್ಧತಿಗಳನ್ನು ತೋರಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 7 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df.cuisine.value_counts().plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "thai df: (289, 385)\njapanese df: (320, 385)\nchinese df: (442, 385)\nindian df: (598, 385)\nkorean df: (799, 385)\n" + ] + } + ], + "source": [ + "\n", + "thai_df = df[(df.cuisine == \"thai\")]\n", + "japanese_df = df[(df.cuisine == \"japanese\")]\n", + "chinese_df = df[(df.cuisine == \"chinese\")]\n", + "indian_df = df[(df.cuisine == \"indian\")]\n", + "korean_df = df[(df.cuisine == \"korean\")]\n", + "\n", + "print(f'thai df: {thai_df.shape}')\n", + "print(f'japanese df: {japanese_df.shape}')\n", + "print(f'chinese df: {chinese_df.shape}')\n", + "print(f'indian df: {indian_df.shape}')\n", + "print(f'korean df: {korean_df.shape}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ವರ್ಗದ ಪ್ರಕಾರ ಶ್ರೇಷ್ಟ ಪದಾರ್ಥಗಳು ಯಾವುವು\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ingredient_df(df):\n", + " # transpose df, drop cuisine and unnamed rows, sum the row to get total for ingredient and add value header to new df\n", + " ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')\n", + " # drop ingredients that have a 0 sum\n", + " ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]\n", + " # sort df\n", + " ingredient_df = ingredient_df.sort_values(by='value', ascending=False, inplace=False)\n", + " return ingredient_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 10 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "thai_ingredient_df = create_ingredient_df(thai_df)\r\n", + "thai_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 11 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "japanese_ingredient_df = create_ingredient_df(japanese_df)\r\n", + "japanese_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 12 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "chinese_ingredient_df = create_ingredient_df(chinese_df)\r\n", + "chinese_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 13 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "indian_ingredient_df = create_ingredient_df(indian_df)\r\n", + "indian_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 14 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "korean_ingredient_df = create_ingredient_df(korean_df)\r\n", + "korean_ingredient_df.head(10).plot.barh()" + ] + }, + { + "source": [ + "ಎಲ್ಲಾ ಪಾಕಶಾಲೆಗಳಿಗೂ ಸಾಮಾನ್ಯವಾಗಿರುವ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)\n", + "labels_df = df.cuisine #.unique()\n", + "feature_df.head()\n" + ] + }, + { + "source": [ + "SMOTE ಓವರ್‌ಸ್ಯಾಂಪ್ಲಿಂಗ್‌ನೊಂದಿಗೆ ಡೇಟಾವನ್ನು ಅತ್ಯಧಿಕ ವರ್ಗಕ್ಕೆ ಸಮತೋಲಗೊಳಿಸಿ. ಇಲ್ಲಿ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ಓದಿ: https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "oversample = SMOTE()\n", + "transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "new label count: korean 799\nchinese 799\njapanese 799\nindian 799\nthai 799\nName: cuisine, dtype: int64\nold label count: korean 799\nindian 598\nchinese 442\njapanese 320\nthai 289\nName: cuisine, dtype: int64\n" + ] + } + ], + "source": [ + "print(f'new label count: {transformed_label_df.value_counts()}')\r\n", + "print(f'old label count: {df.cuisine.value_counts()}')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "transformed_feature_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " cuisine almond angelica anise anise_seed apple apple_brandy \\\n", + "0 indian 0 0 0 0 0 0 \n", + "1 indian 1 0 0 0 0 0 \n", + "2 indian 0 0 0 0 0 0 \n", + "3 indian 0 0 0 0 0 0 \n", + "4 indian 0 0 0 0 0 0 \n", + "... ... ... ... ... ... ... ... \n", + "3990 thai 0 0 0 0 0 0 \n", + "3991 thai 0 0 0 0 0 0 \n", + "3992 thai 0 0 0 0 0 0 \n", + "3993 thai 0 0 0 0 0 0 \n", + "3994 thai 0 0 0 0 0 0 \n", + "\n", + " apricot armagnac artemisia ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "... ... ... ... ... ... ... ... \n", + "3990 0 0 0 ... 0 0 0 \n", + "3991 0 0 0 ... 0 0 0 \n", + "3992 0 0 0 ... 0 0 0 \n", + "3993 0 0 0 ... 0 0 0 \n", + "3994 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "... ... ... ... ... ... ... ... \n", + "3990 0 0 0 0 0 0 0 \n", + "3991 0 0 0 0 0 0 0 \n", + "3992 0 0 0 0 0 0 0 \n", + "3993 0 0 0 0 0 0 0 \n", + "3994 0 0 0 0 0 0 0 \n", + "\n", + "[3995 rows x 381 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisia...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
0indian000000000...0000000000
1indian100000000...0000000000
2indian000000000...0000000000
3indian000000000...0000000000
4indian000000000...0000000010
..................................................................
3990thai000000000...0000000000
3991thai000000000...0000000000
3992thai000000000...0000000000
3993thai000000000...0000000000
3994thai000000000...0000000000
\n

3995 rows × 381 columns

\n
" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "# export transformed data to new df for classification\n", + "transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')\n", + "transformed_df" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\nRangeIndex: 3995 entries, 0 to 3994\nColumns: 381 entries, cuisine to zucchini\ndtypes: int64(380), object(1)\nmemory usage: 11.6+ MB\n" + ] + } + ], + "source": [ + "transformed_df.info()" + ] + }, + { + "source": [ + "ಭವಿಷ್ಯದಲ್ಲಿ ಬಳಸಲು ಫೈಲ್ ಅನ್ನು ಉಳಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "transformed_df.to_csv(\"../../data/cleaned_cuisines.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "1da12ed6d238756959b8de9cac2a35a2", + "translation_date": "2025-12-19T17:04:22+00:00", + "source_file": "4-Classification/1-Introduction/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/kn/4-Classification/2-Classifiers-1/README.md b/translations/kn/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 000000000..9c5fe6e64 --- /dev/null +++ b/translations/kn/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,257 @@ + +# ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 1 + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಹಿಂದಿನ ಪಾಠದಿಂದ ಉಳಿಸಿಕೊಂಡ ಸಮತೋಲನ, ಸ್ವಚ್ಛವಾದ ಆಹಾರಗಳ ಬಗ್ಗೆ ಸಂಪೂರ್ಣ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಬಳಸುತ್ತೀರಿ. + +ನೀವು ಈ ಡೇಟಾಸೆಟ್ ಅನ್ನು ವಿವಿಧ ವರ್ಗೀಕರಣಕಾರಿಗಳೊಂದಿಗೆ ಬಳಸುತ್ತೀರಿ _ಒಂದು ಗುಂಪಿನ ಪದಾರ್ಥಗಳ ಆಧಾರದ ಮೇಲೆ ನೀಡಲಾದ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು_. ಇದನ್ನು ಮಾಡುವಾಗ, ವರ್ಗೀಕರಣ ಕಾರ್ಯಗಳಿಗೆ ಆಲ್ಗೋರಿದಮ್‌ಗಳನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದರ ಬಗ್ಗೆ ನೀವು ಹೆಚ್ಚು ತಿಳಿಯುತ್ತೀರಿ. + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) +# ತಯಾರಿ + +ನೀವು [ಪಾಠ 1](../1-Introduction/README.md) ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ ಎಂದು ಊಹಿಸಿ, ಈ ನಾಲ್ಕು ಪಾಠಗಳಿಗಾಗಿ ರೂಟ್ `/data` ಫೋಲ್ಡರ್‌ನಲ್ಲಿ _cleaned_cuisines.csv_ ಫೈಲ್ ಇರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. + +## ವ್ಯಾಯಾಮ - ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿ + +1. ಈ ಪಾಠದ _notebook.ipynb_ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತ, ಆ ಫೈಲ್ ಮತ್ತು Pandas ಲೈಬ್ರರಿಯನ್ನು ಆಮದುಮಾಡಿ: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + ಡೇಟಾ ಹೀಗೆ ಕಾಣುತ್ತದೆ: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. ಈಗ, ಇನ್ನಷ್ಟು ಲೈಬ್ರರಿಗಳನ್ನು ಆಮದುಮಾಡಿ: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. ತರಬೇತಿಗಾಗಿ X ಮತ್ತು y ಸಂಯೋಜನೆಗಳನ್ನು ಎರಡು ಡೇಟಾಫ್ರೇಮ್‌ಗಳಾಗಿ ವಿಭಜಿಸಿ. `cuisine` ಲೇಬಲ್‌ಗಳ ಡೇಟಾಫ್ರೇಮ್ ಆಗಬಹುದು: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + ಇದು ಹೀಗೆ ಕಾಣುತ್ತದೆ: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. ಆ `Unnamed: 0` ಕಾಲಮ್ ಮತ್ತು `cuisine` ಕಾಲಮ್ ಅನ್ನು `drop()` ಕರೆ ಮಾಡಿ ತೆಗೆದುಹಾಕಿ. ಉಳಿದ ಡೇಟಾವನ್ನು ತರಬೇತಿಗೆ ಬಳಸಬಹುದಾದ ಲಕ್ಷಣಗಳಾಗಿ ಉಳಿಸಿ: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + ನಿಮ್ಮ ಲಕ್ಷಣಗಳು ಹೀಗೆ ಕಾಣುತ್ತವೆ: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +ಈಗ ನೀವು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೀರಿ! + +## ನಿಮ್ಮ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು + +ನಿಮ್ಮ ಡೇಟಾ ಸ್ವಚ್ಛವಾಗಿದ್ದು ತರಬೇತಿಗೆ ಸಿದ್ಧವಾಗಿದೆ, ನೀವು ಯಾವ ಆಲ್ಗೋರಿದಮ್ ಅನ್ನು ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸಬೇಕು. + +Scikit-learn ವರ್ಗೀಕರಣವನ್ನು Supervised Learning ಅಡಿಯಲ್ಲಿ ಗುಂಪುಮಾಡುತ್ತದೆ, ಮತ್ತು ಆ ವರ್ಗದಲ್ಲಿ ನೀವು ವರ್ಗೀಕರಿಸಲು ಹಲವಾರು ವಿಧಾನಗಳನ್ನು ಕಾಣುತ್ತೀರಿ. [ವೈವಿಧ್ಯ](https://scikit-learn.org/stable/supervised_learning.html) ಮೊದಲ ನೋಟದಲ್ಲಿ ಸ್ವಲ್ಪ ಗೊಂದಲಕಾರಿಯಾಗಿದೆ. ಕೆಳಗಿನ ವಿಧಾನಗಳು ಎಲ್ಲವೂ ವರ್ಗೀಕರಣ ತಂತ್ರಗಳನ್ನು ಒಳಗೊಂಡಿವೆ: + +- ರೇಖೀಯ ಮಾದರಿಗಳು +- ಬೆಂಬಲ ವೆಕ್ಟರ್ ಯಂತ್ರಗಳು +- ಸ್ಟೋಚಾಸ್ಟಿಕ್ ಗ್ರೇಡಿಯಂಟ್ ಡಿಸೆಂಟ್ +- ಸಮೀಪದ ನೆರೆಹೊರೆಯವರು +- ಗೌಸಿಯನ್ ಪ್ರಕ್ರಿಯೆಗಳು +- ನಿರ್ಧಾರ ಮರಗಳು +- ಎನ್ಸೆಂಬಲ್ ವಿಧಾನಗಳು (ಮತದಾನ ವರ್ಗೀಕರಣಕಾರಿಗಳು) +- ಬಹು ವರ್ಗ ಮತ್ತು ಬಹು ಔಟ್‌ಪುಟ್ ಆಲ್ಗೋರಿದಮ್‌ಗಳು (ಬಹು ವರ್ಗ ಮತ್ತು ಬಹು ಲೇಬಲ್ ವರ್ಗೀಕರಣ, ಬಹು ವರ್ಗ-ಬಹು ಔಟ್‌ಪುಟ್ ವರ್ಗೀಕರಣ) + +> ನೀವು [ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಡೇಟಾ ವರ್ಗೀಕರಿಸಲು](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification) ಕೂಡ ಬಳಸಬಹುದು, ಆದರೆ ಅದು ಈ ಪಾಠದ ವ್ಯಾಪ್ತಿಗೆ ಹೊರಗಿದೆ. + +### ಯಾವ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕು? + +ಹೀಗಾಗಿ, ನೀವು ಯಾವ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕು? ಬಹುಶಃ, ಹಲವಾರು ವಿಧಾನಗಳನ್ನು ಪ್ರಯೋಗಿಸಿ ಉತ್ತಮ ಫಲಿತಾಂಶವನ್ನು ಹುಡುಕುವುದು ಪರೀಕ್ಷಿಸುವ ಒಂದು ಮಾರ್ಗ. Scikit-learn ಒಂದು [ಪಕ್ಕಪಕ್ಕದ ಹೋಲಿಕೆ](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) ಒದಗಿಸುತ್ತದೆ, ಇದರಲ್ಲಿ KNeighbors, SVC ಎರಡು ರೀತಿಗಳು, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ಮತ್ತು QuadraticDiscrinationAnalysis ಹೋಲಿಕೆ ಮಾಡಲಾಗಿದೆ, ಫಲಿತಾಂಶಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸಲಾಗಿದೆ: + +![classification ಹೋಲಿಕೆ](../../../../translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.kn.png) +> Scikit-learn ಡಾಕ್ಯುಮೆಂಟೇಶನ್‌ನಲ್ಲಿ ರಚಿಸಲಾದ ಪ್ಲಾಟ್‌ಗಳು + +> AutoML ಈ ಸಮಸ್ಯೆಯನ್ನು ಕ್ಲೌಡ್‌ನಲ್ಲಿ ಈ ಹೋಲಿಕೆಗಳನ್ನು ನಡೆಸಿ ನಿಮ್ಮ ಡೇಟಾಗೆ ಅತ್ಯುತ್ತಮ ಆಲ್ಗೋರಿದಮ್ ಆಯ್ಕೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಇದನ್ನು [ಇಲ್ಲಿ](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) ಪ್ರಯತ್ನಿಸಿ + +### ಉತ್ತಮ ವಿಧಾನ + +ಅನಿರೀಕ್ಷಿತವಾಗಿ ಊಹಿಸುವುದಕ್ಕಿಂತ ಉತ್ತಮ ವಿಧಾನವೆಂದರೆ, ಈ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದಾದ [ML ಚೀಟ್ ಶೀಟ್](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) ನಲ್ಲಿ ನೀಡಲಾದ ಆಲೋಚನೆಗಳನ್ನು ಅನುಸರಿಸುವುದು. ಇಲ್ಲಿ, ನಮ್ಮ ಬಹು ವರ್ಗ ಸಮಸ್ಯೆಗೆ ಕೆಲವು ಆಯ್ಕೆಗಳು ಇವೆ: + +![ಬಹು ವರ್ಗ ಸಮಸ್ಯೆಗಳ ಚೀಟ್‌ಶೀಟ್](../../../../translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.kn.png) +> ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ ಆಲ್ಗೋರಿದಮ್ ಚೀಟ್ ಶೀಟ್‌ನ ಒಂದು ಭಾಗ, ಬಹು ವರ್ಗ ವರ್ಗೀಕರಣ ಆಯ್ಕೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ + +✅ ಈ ಚೀಟ್ ಶೀಟ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ, ಮುದ್ರಿಸಿ, ನಿಮ್ಮ ಗೋಡೆಯ ಮೇಲೆ ಹಚ್ಚಿ! + +### ತರ್ಕ + +ನಾವು ಹೊಂದಿರುವ ನಿರ್ಬಂಧಗಳನ್ನು ಗಮನಿಸಿ ವಿಭಿನ್ನ ವಿಧಾನಗಳ ಮೂಲಕ ತರ್ಕ ಮಾಡೋಣ: + +- **ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ತುಂಬಾ ಭಾರವಾಗಿವೆ**. ನಮ್ಮ ಸ್ವಚ್ಛ ಆದರೆ ಕನಿಷ್ಠ ಡೇಟಾಸೆಟ್ ಮತ್ತು ನೋಟ್ಬುಕ್‌ಗಳ ಮೂಲಕ ಸ್ಥಳೀಯವಾಗಿ ತರಬೇತಿ ನಡೆಸುತ್ತಿರುವುದರಿಂದ, ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಈ ಕಾರ್ಯಕ್ಕೆ ತುಂಬಾ ಭಾರವಾಗಿವೆ. +- **ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ**. ನಾವು ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ one-vs-all ನಿಯಮ ಹೊರತುಪಡಿಸಲಾಗಿದೆ. +- **ನಿರ್ಧಾರ ಮರ ಅಥವಾ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಕೆಲಸ ಮಾಡಬಹುದು**. ನಿರ್ಧಾರ ಮರ ಕೆಲಸ ಮಾಡಬಹುದು, ಅಥವಾ ಬಹು ವರ್ಗ ಡೇಟಾಗೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್. +- **ಬಹು ವರ್ಗ ಬೂಸ್ಟೆಡ್ ನಿರ್ಧಾರ ಮರಗಳು ಬೇರೆ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತವೆ**. ಬಹು ವರ್ಗ ಬೂಸ್ಟೆಡ್ ನಿರ್ಧಾರ ಮರವು ಅಪ್ರಮಾಣಿತ ಕಾರ್ಯಗಳಿಗೆ ಸೂಕ್ತ, ಉದಾ: ರ್ಯಾಂಕಿಂಗ್ ನಿರ್ಮಾಣಕ್ಕೆ, ಆದ್ದರಿಂದ ನಮ್ಮಿಗೆ ಉಪಯುಕ್ತವಲ್ಲ. + +### Scikit-learn ಬಳಕೆ + +ನಾವು ನಮ್ಮ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸಲು Scikit-learn ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಆದರೆ, Scikit-learn ನಲ್ಲಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಳಸಲು ಹಲವಾರು ವಿಧಾನಗಳಿವೆ. [ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression) ನೋಡಿ. + +ಮೂಲತಃ ಎರಡು ಪ್ರಮುಖ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಿವೆ - `multi_class` ಮತ್ತು `solver` - ನಾವು Scikit-learn ಗೆ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾಡಲು ಕೇಳುವಾಗ ಅವುಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು. `multi_class` ಮೌಲ್ಯವು ನಿರ್ದಿಷ್ಟ ವರ್ತನೆಯನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ. `solver` ಮೌಲ್ಯವು ಯಾವ ಆಲ್ಗೋರಿದಮ್ ಬಳಸಬೇಕೆಂದು ಸೂಚಿಸುತ್ತದೆ. ಎಲ್ಲಾ ಸೊಲ್ವರ್‌ಗಳು ಎಲ್ಲಾ `multi_class` ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. + +ಡಾಕ್ಯುಮೆಂಟ್ ಪ್ರಕಾರ, ಬಹು ವರ್ಗ ಪ್ರಕರಣದಲ್ಲಿ, ತರಬೇತಿ ಆಲ್ಗೋರಿದಮ್: + +- **`multi_class` ಆಯ್ಕೆಯನ್ನು `ovr` ಗೆ ಸೆಟ್ ಮಾಡಿದರೆ one-vs-rest (OvR) ಯೋಜನೆಯನ್ನು ಬಳಸುತ್ತದೆ** +- **`multi_class` ಆಯ್ಕೆಯನ್ನು `multinomial` ಗೆ ಸೆಟ್ ಮಾಡಿದರೆ ಕ್ರಾಸ್-ಎಂಟ್ರೋಪಿ ನಷ್ಟವನ್ನು ಬಳಸುತ್ತದೆ**. (ಪ್ರಸ್ತುತ `multinomial` ಆಯ್ಕೆ ‘lbfgs’, ‘sag’, ‘saga’ ಮತ್ತು ‘newton-cg’ ಸೊಲ್ವರ್‌ಗಳಿಗೆ ಮಾತ್ರ ಬೆಂಬಲ ಇದೆ.)" + +> 🎓 ಇಲ್ಲಿ 'ಯೋಜನೆ' ಎಂದರೆ 'ovr' (ಒಂದು-ವಿರುದ್ಧ-ಮತ್ತು) ಅಥವಾ 'multinomial'. ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮೂಲತಃ ದ್ವಿವರ್ಗ ವರ್ಗೀಕರಣಕ್ಕೆ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ಈ ಯೋಜನೆಗಳು ಬಹು ವರ್ಗ ವರ್ಗೀಕರಣ ಕಾರ್ಯಗಳನ್ನು ಉತ್ತಮವಾಗಿ ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. [ಮೂಲ](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 'ಸೊಲ್ವರ್' ಅನ್ನು "ಆಪ್ಟಿಮೈಜೆಷನ್ ಸಮಸ್ಯೆಯಲ್ಲಿ ಬಳಸುವ ಆಲ್ಗೋರಿದಮ್" ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. [ಮೂಲ](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn ಈ ಟೇಬಲ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ವಿವಿಧ ಡೇಟಾ ರಚನೆಗಳಿಂದ ಉಂಟಾಗುವ ಸವಾಲುಗಳನ್ನು ಸೊಲ್ವರ್‌ಗಳು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ವಿವರಿಸಲು: + +![ಸೊಲ್ವರ್‌ಗಳು](../../../../translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.kn.png) + +## ವ್ಯಾಯಾಮ - ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ + +ನೀವು ಇತ್ತೀಚೆಗೆ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಬಗ್ಗೆ ಕಲಿತಿದ್ದೀರಿ, ಆದ್ದರಿಂದ ಮೊದಲ ತರಬೇತಿ ಪ್ರಯತ್ನಕ್ಕಾಗಿ ನಾವು ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮೇಲೆ ಗಮನಹರಿಸಬಹುದು. +`train_test_split()` ಅನ್ನು ಕರೆ ಮಾಡಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಗುಂಪುಗಳಾಗಿ ವಿಭಜಿಸಿ: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## ವ್ಯಾಯಾಮ - ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಅನ್ವಯಿಸಿ + +ನೀವು ಬಹು ವರ್ಗ ಪ್ರಕರಣವನ್ನು ಬಳಸುತ್ತಿರುವುದರಿಂದ, ಯಾವ _ಯೋಜನೆ_ ಬಳಸಬೇಕು ಮತ್ತು ಯಾವ _ಸೊಲ್ವರ್_ ಸೆಟ್ ಮಾಡಬೇಕು ಎಂದು ಆಯ್ಕೆ ಮಾಡಬೇಕು. ಬಹು ವರ್ಗ ಸೆಟ್ಟಿಂಗ್ ಮತ್ತು **liblinear** ಸೊಲ್ವರ್ ಬಳಸಿ LogisticRegression ಅನ್ನು ತರಬೇತಿಗೆ ಬಳಸಿ. + +1. multi_class ಅನ್ನು `ovr` ಗೆ ಮತ್ತು ಸೊಲ್ವರ್ ಅನ್ನು `liblinear` ಗೆ ಸೆಟ್ ಮಾಡಿ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ರಚಿಸಿ: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ `lbfgs` ಎಂಬ ಬೇರೆ ಸೊಲ್ವರ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ, ಅದು ಸಾಮಾನ್ಯವಾಗಿ ಡೀಫಾಲ್ಟ್ ಆಗಿರುತ್ತದೆ + + > ಗಮನಿಸಿ, ಅಗತ್ಯವಿದ್ದಾಗ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಫ್ಲ್ಯಾಟ್ ಮಾಡಲು Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) ಫಂಕ್ಷನ್ ಬಳಸಿ. + + ನಿಖರತೆ **80%** ಕ್ಕಿಂತ ಹೆಚ್ಚು ಉತ್ತಮವಾಗಿದೆ! + +1. ನೀವು ಈ ಮಾದರಿಯನ್ನು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವುದನ್ನು ಡೇಟಾದ ಒಂದು ಸಾಲನ್ನು (#50) ಪರೀಕ್ಷಿಸುವ ಮೂಲಕ ನೋಡಬಹುದು: + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + ಫಲಿತಾಂಶ ಮುದ್ರಿತವಾಗಿದೆ: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ ಬೇರೆ ಸಾಲಿನ ಸಂಖ್ಯೆಯನ್ನು ಪ್ರಯತ್ನಿಸಿ ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ಪರಿಶೀಲಿಸಿ + +1. ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಪರಿಶೀಲಿಸುವಾಗ, ನೀವು ಈ ಭವಿಷ್ಯವಾಣಿಯ ನಿಖರತೆಯನ್ನು ಪರಿಶೀಲಿಸಬಹುದು: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + ಫಲಿತಾಂಶ ಮುದ್ರಿಸಲಾಗಿದೆ - ಭಾರತೀಯ ಆಹಾರವೇ ಇದರ ಅತ್ಯುತ್ತಮ ಊಹೆ, ಉತ್ತಮ ಸಾಧ್ಯತೆಯೊಂದಿಗೆ: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ ಈ ಮಾದರಿ ಭಾರತೀಯ ಆಹಾರ ಎಂದು ಬಹುಶಃ ಖಚಿತವಾಗಿರುವುದಕ್ಕೆ ನೀವು ಕಾರಣವನ್ನು ವಿವರಿಸಬಹುದೇ? + +1. ನೀವು ರಿಗ್ರೆಶನ್ ಪಾಠಗಳಲ್ಲಿ ಮಾಡಿದಂತೆ ವರ್ಗೀಕರಣ ವರದಿಯನ್ನು ಮುದ್ರಿಸುವ ಮೂಲಕ ಹೆಚ್ಚಿನ ವಿವರಗಳನ್ನು ಪಡೆಯಿರಿ: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀ಸವಾಲು + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಸ್ವಚ್ಛಗೊಳಿಸಿದ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ಒಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಇದು ಪದಾರ್ಥಗಳ ಸರಣಿಯ ಆಧಾರದ ಮೇಲೆ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು. ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸಲು ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ನೀಡುವ ಅನೇಕ ಆಯ್ಕೆಗಳನ್ನು ಓದಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಿ. 'ಸಾಲ್ವರ್' ಎಂಬ ಕಲ್ಪನೆಗೆ ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ಹೋಗಿ, ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಏನು ನಡೆಯುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ. + +## [ಪಾಠೋತ್ತರ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಹಿಂದಿನ ಗಣಿತವನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಿ [ಈ ಪಾಠದಲ್ಲಿ](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## ನಿಯೋಜನೆ + +[ಸಾಲ್ವರ್‌ಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/2-Classifiers-1/assignment.md b/translations/kn/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 000000000..27cd96cf9 --- /dev/null +++ b/translations/kn/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,25 @@ + +# ಸೊಲ್ವರ್‌ಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡಿ +## ಸೂಚನೆಗಳು + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನ ಪ್ರಕ್ರಿಯೆಯೊಂದಿಗೆ ಅಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಜೋಡಿಸುವ ವಿವಿಧ ಸೊಲ್ವರ್‌ಗಳ ಬಗ್ಗೆ ಕಲಿತಿರಿ, ಅವುಗಳು ನಿಖರ ಮಾದರಿಯನ್ನು ರಚಿಸುತ್ತವೆ. ಪಾಠದಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾದ ಸೊಲ್ವರ್‌ಗಳ ಮೂಲಕ ಸಾಗಿರಿ ಮತ್ತು ಎರಡು ಸೊಲ್ವರ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ. ನಿಮ್ಮ ಸ್ವಂತ ಪದಗಳಲ್ಲಿ, ಈ ಎರಡು ಸೊಲ್ವರ್‌ಗಳನ್ನು ಹೋಲಿಸಿ ಮತ್ತು ಭೇದಿಸಿ. ಅವು ಯಾವ ರೀತಿಯ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತವೆ? ಅವು ವಿವಿಧ ಡೇಟಾ ರಚನೆಗಳೊಂದಿಗೆ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತವೆ? ನೀವು ಒಂದನ್ನು ಮತ್ತೊಂದಕ್ಕಿಂತ ಏಕೆ ಆಯ್ಕೆಮಾಡುತ್ತೀರಿ? +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | ಎರಡು ಪ್ಯಾರಾಗ್ರಾಫ್‌ಗಳೊಂದಿಗೆ .doc ಫೈಲ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ, ಪ್ರತಿ ಸೊಲ್ವರ್ ಬಗ್ಗೆ ಚಿಂತನೆಯೊಂದಿಗೆ ಹೋಲಿಕೆ ಮಾಡಲಾಗಿದೆ. | ಒಂದು ಪ್ಯಾರಾಗ್ರಾಫ್ ಮಾತ್ರ ಇರುವ .doc ಫೈಲ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಕಾರ್ಯಪತ್ರ ಅಪೂರ್ಣವಾಗಿದೆ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/2-Classifiers-1/notebook.ipynb b/translations/kn/4-Classification/2-Classifiers-1/notebook.ipynb new file mode 100644 index 000000000..03e470181 --- /dev/null +++ b/translations/kn/4-Classification/2-Classifiers-1/notebook.ipynb @@ -0,0 +1,41 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "68829b06b4dcd512d3327849191f4d7f", + "translation_date": "2025-12-19T17:03:28+00:00", + "source_file": "4-Classification/2-Classifiers-1/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ವರ್ಗೀಕರಣ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/kn/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 000000000..9ea1cbb9c --- /dev/null +++ b/translations/kn/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb b/translations/kn/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb new file mode 100644 index 000000000..938a80b0b --- /dev/null +++ b/translations/kn/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb @@ -0,0 +1,1302 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_11-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "6ea6a5171b1b99b7b5a55f7469c048d2", + "translation_date": "2025-12-19T17:22:41+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# ವರ್ಗೀಕರಣ ಮಾದರಿ ನಿರ್ಮಿಸಿ: ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು\n" + ], + "metadata": { + "id": "zs2woWv_HoE8" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 1\n", + "\n", + "ಈ ಪಾಠದಲ್ಲಿ, ನಾವು ವಿವಿಧ ವರ್ಗೀಕರಣಗಳನ್ನು *ಒಂದು ಗುಂಪಿನ ಪದಾರ್ಥಗಳ ಆಧಾರದ ಮೇಲೆ ನೀಡಲಾದ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು* ಅನ್ವೇಷಿಸುವೆವು. ಇದನ್ನು ಮಾಡುವಾಗ, ವರ್ಗೀಕರಣ ಕಾರ್ಯಗಳಿಗೆ ಆಲ್ಗೋರಿದಮ್‌ಗಳನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದರ ಬಗ್ಗೆ ಹೆಚ್ಚು ತಿಳಿಯುವೆವು.\n", + "\n", + "### [**ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/)\n", + "\n", + "### **ತಯಾರಿ**\n", + "\n", + "ಈ ಪಾಠವು ನಮ್ಮ [ಹಿಂದಿನ ಪಾಠ](https://github.com/microsoft/ML-For-Beginners/blob/main/4-Classification/1-Introduction/solution/lesson_10-R.ipynb) ಮೇಲೆ ನಿರ್ಮಿತವಾಗಿದೆ, ಅಲ್ಲಿ ನಾವು:\n", + "\n", + "- ಏಷ್ಯಾ ಮತ್ತು ಭಾರತದ ಎಲ್ಲಾ ಅದ್ಭುತ ಆಹಾರಗಳ ಬಗ್ಗೆ ಡೇಟಾಸೆಟ್ ಬಳಸಿ ವರ್ಗೀಕರಣಗಳಿಗೆ ಸೌಮ್ಯ ಪರಿಚಯ ನೀಡಿದ್ದೇವೆ 😋.\n", + "\n", + "- ನಮ್ಮ ಡೇಟಾವನ್ನು ತಯಾರಿಸಲು ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಕೆಲವು [dplyr ಕ್ರಿಯಾಪದಗಳನ್ನು](https://dplyr.tidyverse.org/) ಅನ್ವೇಷಿಸಿದ್ದೇವೆ.\n", + "\n", + "- ggplot2 ಬಳಸಿ ಸುಂದರ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಮಾಡಿದ್ದೇವೆ.\n", + "\n", + "- ಅಸಮತೋಲನ ಡೇಟಾವನ್ನು [recipes](https://recipes.tidymodels.org/articles/Simple_Example.html) ಬಳಸಿ ಪೂರ್ವಪ್ರಕ್ರಿಯೆ ಮಾಡುವ ಮೂಲಕ ಹೇಗೆ ನಿಭಾಯಿಸಬಹುದು ಎಂದು ತೋರಿಸಿದ್ದೇವೆ.\n", + "\n", + "- ನಮ್ಮ ರೆಸಿಪಿಯನ್ನು `prep` ಮತ್ತು `bake` ಮಾಡುವ ಮೂಲಕ ಅದು ನಿರೀಕ್ಷಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ದೃಢೀಕರಿಸಿದ್ದೇವೆ.\n", + "\n", + "#### **ಪೂರ್ವಾಪೇಕ್ಷಿತ**\n", + "\n", + "ಈ ಪಾಠಕ್ಕಾಗಿ, ನಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಲು, ತಯಾರಿಸಲು ಮತ್ತು ದೃಶ್ಯೀಕರಿಸಲು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳು ಅಗತ್ಯವಿದೆ:\n", + "\n", + "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಹೆಚ್ಚು ಮನರಂಜನೀಯವಾಗಿ ಮಾಡುತ್ತದೆ!\n", + "\n", + "- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ.\n", + "\n", + "- `themis`: [themis ಪ್ಯಾಕೇಜ್](https://themis.tidymodels.org/) ಅಸಮತೋಲನ ಡೇಟಾವನ್ನು ನಿಭಾಯಿಸಲು ಹೆಚ್ಚುವರಿ ರೆಸಿಪಿ ಹಂತಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "- `nnet`: [nnet ಪ್ಯಾಕೇಜ್](https://cran.r-project.org/web/packages/nnet/nnet.pdf) ಒಂದು ಸಿಂಗಲ್ ಹಿಡನ್ ಲೇಯರ್ ಹೊಂದಿರುವ ಫೀಡ್-ಫಾರ್ವರ್ಡ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಅಂದಾಜಿಸಲು ಮತ್ತು ಬಹುಮಾನ ಲಾಜಿಸ್ಟಿಕ್ ರೆಗ್ರೆಷನ್ ಮಾದರಿಗಳನ್ನು ಮಾಡಲು ಕಾರ್ಯಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n" + ], + "metadata": { + "id": "iDFOb3ebHwQC" + } + }, + { + "cell_type": "markdown", + "source": [ + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n", + "\n", + "ಬದಲಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ನೀವು ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜುಗಳು ನಿಮ್ಮ ಬಳಿ ಇದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ಅವು ಇಲ್ಲದಿದ್ದರೆ ಅವುಗಳನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಸ್ಥಾಪಿಸುತ್ತದೆ.\n" + ], + "metadata": { + "id": "4V85BGCjII7F" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n", + "\r\n", + "pacman::p_load(tidyverse, tidymodels, themis, here)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading required package: pacman\n", + "\n" + ] + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "an5NPyyKIKNR", + "outputId": "834d5e74-f4b8-49f9-8ab5-4c52ff2d7bc8" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ, ನಾವು ತಕ್ಷಣವೇ ಪ್ರಾರಂಭಿಸೋಣ!\n", + "\n", + "## 1. ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗಳಿಗೆ ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ.\n", + "\n", + "ನಾವು ನಮ್ಮ ಹಿಂದಿನ ಪಾಠದಿಂದ ಕೆಲವು ಹಂತಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ ಪ್ರಾರಂಭಿಸೋಣ.\n", + "\n", + "### ವಿಭಿನ್ನ ಆಹಾರಶೈಲಿಗಳ ನಡುವೆ ಗೊಂದಲವನ್ನು ಉಂಟುಮಾಡುವ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳನ್ನು `dplyr::select()` ಬಳಸಿ ತೆಗೆದುಹಾಕಿ.\n", + "\n", + "ಎಲ್ಲರೂ ಅಕ್ಕಿ, ಬೆಳ್ಳುಳ್ಳಿ ಮತ್ತು ಶುಂಠಿ ಅನ್ನು ಪ್ರೀತಿಸುತ್ತಾರೆ!\n" + ], + "metadata": { + "id": "0ax9GQLBINVv" + } + }, + { + "cell_type": "code", + "execution_count": 3, + "source": [ + "# Load the original cuisines data\r\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n", + "\r\n", + "# Drop id column, rice, garlic and ginger from our original data set\r\n", + "df_select <- df %>% \r\n", + " select(-c(1, rice, garlic, ginger)) %>%\r\n", + " # Encode cuisine column as categorical\r\n", + " mutate(cuisine = factor(cuisine))\r\n", + "\r\n", + "# Display new data set\r\n", + "df_select %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "# Display distribution of cuisines\r\n", + "df_select %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "New names:\n", + "* `` -> ...1\n", + "\n", + "\u001b[1m\u001b[1mRows: \u001b[1m\u001b[22m\u001b[34m\u001b[34m2448\u001b[34m\u001b[39m \u001b[1m\u001b[1mColumns: \u001b[1m\u001b[22m\u001b[34m\u001b[34m385\u001b[34m\u001b[39m\n", + "\n", + "\u001b[36m──\u001b[39m \u001b[1m\u001b[1mColumn specification\u001b[1m\u001b[22m \u001b[36m────────────────────────────────────────────────────────\u001b[39m\n", + "\u001b[1mDelimiter:\u001b[22m \",\"\n", + "\u001b[31mchr\u001b[39m (1): cuisine\n", + "\u001b[32mdbl\u001b[39m (384): ...1, almond, angelica, anise, anise_seed, apple, apple_brandy, a...\n", + "\n", + "\n", + "\u001b[36mℹ\u001b[39m Use \u001b[30m\u001b[47m\u001b[30m\u001b[47m`spec()`\u001b[47m\u001b[30m\u001b[49m\u001b[39m to retrieve the full column specification for this data.\n", + "\u001b[36mℹ\u001b[39m Specify the column types or set \u001b[30m\u001b[47m\u001b[30m\u001b[47m`show_col_types = FALSE`\u001b[47m\u001b[30m\u001b[49m\u001b[39m to quiet this message.\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac\n", + "1 indian 0 0 0 0 0 0 0 0 \n", + "2 indian 1 0 0 0 0 0 0 0 \n", + "3 indian 0 0 0 0 0 0 0 0 \n", + "4 indian 0 0 0 0 0 0 0 0 \n", + "5 indian 0 0 0 0 0 0 0 0 \n", + " artemisia ⋯ whiskey white_bread white_wine whole_grain_wheat_flour wine wood\n", + "1 0 ⋯ 0 0 0 0 0 0 \n", + "2 0 ⋯ 0 0 0 0 0 0 \n", + "3 0 ⋯ 0 0 0 0 0 0 \n", + "4 0 ⋯ 0 0 0 0 0 0 \n", + "5 0 ⋯ 0 0 0 0 0 0 \n", + " yam yeast yogurt zucchini\n", + "1 0 0 0 0 \n", + "2 0 0 0 0 \n", + "3 0 0 0 0 \n", + "4 0 0 0 0 \n", + "5 0 0 1 0 " + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 381\n", + "\n", + "| cuisine <fct> | almond <dbl> | angelica <dbl> | anise <dbl> | anise_seed <dbl> | apple <dbl> | apple_brandy <dbl> | apricot <dbl> | armagnac <dbl> | artemisia <dbl> | ⋯ ⋯ | whiskey <dbl> | white_bread <dbl> | white_wine <dbl> | whole_grain_wheat_flour <dbl> | wine <dbl> | wood <dbl> | yam <dbl> | yeast <dbl> | yogurt <dbl> | zucchini <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 381\n", + "\\begin{tabular}{lllllllllllllllllllll}\n", + " cuisine & almond & angelica & anise & anise\\_seed & apple & apple\\_brandy & apricot & armagnac & artemisia & ⋯ & whiskey & white\\_bread & white\\_wine & whole\\_grain\\_wheat\\_flour & wine & wood & yam & yeast & yogurt & zucchini\\\\\n", + " & & & & & & & & & & ⋯ & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 381
cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiawhiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
<fct><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
indian0000000000000000000
indian1000000000000000000
indian0000000000000000000
indian0000000000000000000
indian0000000000000000010
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine n \n", + "1 korean 799\n", + "2 indian 598\n", + "3 chinese 442\n", + "4 japanese 320\n", + "5 thai 289" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| cuisine <fct> | n <int> |\n", + "|---|---|\n", + "| korean | 799 |\n", + "| indian | 598 |\n", + "| chinese | 442 |\n", + "| japanese | 320 |\n", + "| thai | 289 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " cuisine & n\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t korean & 799\\\\\n", + "\t indian & 598\\\\\n", + "\t chinese & 442\\\\\n", + "\t japanese & 320\\\\\n", + "\t thai & 289\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
cuisinen
<fct><int>
korean 799
indian 598
chinese 442
japanese320
thai 289
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 735 + }, + "id": "jhCrrH22IWVR", + "outputId": "d444a85c-1d8b-485f-bc4f-8be2e8f8217c" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಅದ್ಭುತ! ಈಗ, ಡೇಟಾವನ್ನು 70% ತರಬೇತಿಗೆ ಮತ್ತು 30% ಪರೀಕ್ಷೆಗೆ ಹಂಚುವ ಸಮಯ ಬಂದಿದೆ. ತರಬೇತಿ ಮತ್ತು ಮಾನ್ಯತೆ ಡೇಟಾಸೆಟ್‌ಗಳಲ್ಲಿ ಪ್ರತಿ ಆಹಾರ ಶೈಲಿಯ ಅನುಪಾತವನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳಲು ಡೇಟಾವನ್ನು ಹಂಚುವಾಗ `stratification` ತಂತ್ರವನ್ನು ನಾವು ಅನ್ವಯಿಸುವೆವು.\n", + "\n", + "[rsample](https://rsample.tidymodels.org/), Tidymodels‌ನ ಪ್ಯಾಕೇಜ್, ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಡೇಟಾ ಹಂಚಿಕೆ ಮತ್ತು ಮರುನಮೂನೆಗಾಗಿ ಮೂಲಸೌಕರ್ಯವನ್ನು ಒದಗಿಸುತ್ತದೆ:\n" + ], + "metadata": { + "id": "AYTjVyajIdny" + } + }, + { + "cell_type": "code", + "execution_count": 4, + "source": [ + "# Load the core Tidymodels packages into R session\r\n", + "library(tidymodels)\r\n", + "\r\n", + "# Create split specification\r\n", + "set.seed(2056)\r\n", + "cuisines_split <- initial_split(data = df_select,\r\n", + " strata = cuisine,\r\n", + " prop = 0.7)\r\n", + "\r\n", + "# Extract the data in each split\r\n", + "cuisines_train <- training(cuisines_split)\r\n", + "cuisines_test <- testing(cuisines_split)\r\n", + "\r\n", + "# Print the number of cases in each split\r\n", + "cat(\"Training cases: \", nrow(cuisines_train), \"\\n\",\r\n", + " \"Test cases: \", nrow(cuisines_test), sep = \"\")\r\n", + "\r\n", + "# Display the first few rows of the training set\r\n", + "cuisines_train %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "\r\n", + "# Display distribution of cuisines in the training set\r\n", + "cuisines_train %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Training cases: 1712\n", + "Test cases: 736" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac\n", + "1 chinese 0 0 0 0 0 0 0 0 \n", + "2 chinese 0 0 0 0 0 0 0 0 \n", + "3 chinese 0 0 0 0 0 0 0 0 \n", + "4 chinese 0 0 0 0 0 0 0 0 \n", + "5 chinese 0 0 0 0 0 0 0 0 \n", + " artemisia ⋯ whiskey white_bread white_wine whole_grain_wheat_flour wine wood\n", + "1 0 ⋯ 0 0 0 0 1 0 \n", + "2 0 ⋯ 0 0 0 0 1 0 \n", + "3 0 ⋯ 0 0 0 0 0 0 \n", + "4 0 ⋯ 0 0 0 0 0 0 \n", + "5 0 ⋯ 0 0 0 0 0 0 \n", + " yam yeast yogurt zucchini\n", + "1 0 0 0 0 \n", + "2 0 0 0 0 \n", + "3 0 0 0 0 \n", + "4 0 0 0 0 \n", + "5 0 0 0 0 " + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 381\n", + "\n", + "| cuisine <fct> | almond <dbl> | angelica <dbl> | anise <dbl> | anise_seed <dbl> | apple <dbl> | apple_brandy <dbl> | apricot <dbl> | armagnac <dbl> | artemisia <dbl> | ⋯ ⋯ | whiskey <dbl> | white_bread <dbl> | white_wine <dbl> | whole_grain_wheat_flour <dbl> | wine <dbl> | wood <dbl> | yam <dbl> | yeast <dbl> | yogurt <dbl> | zucchini <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 381\n", + "\\begin{tabular}{lllllllllllllllllllll}\n", + " cuisine & almond & angelica & anise & anise\\_seed & apple & apple\\_brandy & apricot & armagnac & artemisia & ⋯ & whiskey & white\\_bread & white\\_wine & whole\\_grain\\_wheat\\_flour & wine & wood & yam & yeast & yogurt & zucchini\\\\\n", + " & & & & & & & & & & ⋯ & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 381
cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiawhiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
<fct><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
chinese0000000000000100000
chinese0000000000000100000
chinese0000000000000000000
chinese0000000000000000000
chinese0000000000000000000
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine n \n", + "1 korean 559\n", + "2 indian 418\n", + "3 chinese 309\n", + "4 japanese 224\n", + "5 thai 202" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| cuisine <fct> | n <int> |\n", + "|---|---|\n", + "| korean | 559 |\n", + "| indian | 418 |\n", + "| chinese | 309 |\n", + "| japanese | 224 |\n", + "| thai | 202 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " cuisine & n\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t korean & 559\\\\\n", + "\t indian & 418\\\\\n", + "\t chinese & 309\\\\\n", + "\t japanese & 224\\\\\n", + "\t thai & 202\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
cuisinen
<fct><int>
korean 559
indian 418
chinese 309
japanese224
thai 202
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 535 + }, + "id": "w5FWIkEiIjdN", + "outputId": "2e195fd9-1a8f-4b91-9573-cce5582242df" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 2. ಅಸಮತೋಲನದ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸುವುದು\n", + "\n", + "ನೀವು ಮೂಲ ಡೇಟಾ ಸೆಟ್ ಮತ್ತು ನಮ್ಮ ತರಬೇತಿ ಸೆಟ್‌ನಲ್ಲಿ ಗಮನಿಸಿದ್ದೀರಾ, ಅಡುಗೆಶೈಲಿಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಸಮತೋಲನವಿಲ್ಲದ ವಿತರಣೆ ಇದೆ. ಕೊರಿಯನ್ ಅಡುಗೆಶೈಲಿಗಳು *ಸುಮಾರು* 3 ಪಟ್ಟು ತಾಯಿ ಅಡುಗೆಶೈಲಿಗಳಿಗಿಂತ ಹೆಚ್ಚು. ಅಸಮತೋಲನದ ಡೇಟಾ ಸಾಮಾನ್ಯವಾಗಿ ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ. ಬಹುತೇಕ ಮಾದರಿಗಳು ಗಮನಗಳ ಸಂಖ್ಯೆ ಸಮಾನವಾಗಿದ್ದಾಗ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಮತ್ತು ಆದ್ದರಿಂದ ಅಸಮತೋಲನದ ಡೇಟಾ ಜೊತೆ ಹೋರಾಡುತ್ತವೆ.\n", + "\n", + "ಅಸಮತೋಲನದ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಎರಡು ಪ್ರಮುಖ ವಿಧಾನಗಳಿವೆ:\n", + "\n", + "- ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗಕ್ಕೆ ಗಮನಗಳನ್ನು ಸೇರಿಸುವುದು: `ಓವರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್` ಉದಾಹರಣೆಗೆ SMOTE ಆಲ್ಗಾರಿದಮ್ ಬಳಸಿ, ಇದು ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗದ ಹೊಸ ಉದಾಹರಣೆಗಳನ್ನು ಸಮೀಪದ ನೆರೆಹೊರೆಯವರನ್ನು ಬಳಸಿ ಸೃಷ್ಟಿಸುತ್ತದೆ.\n", + "\n", + "- ಬಹುಸಂಖ್ಯಾತ ವರ್ಗದಿಂದ ಗಮನಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು: `ಅಂಡರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್`\n", + "\n", + "ನಮ್ಮ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು `ರೆಸಿಪಿ` ಬಳಸಿ ಅಸಮತೋಲನದ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದನ್ನು ತೋರಿಸಿದ್ದೇವೆ. ರೆಸಿಪಿ ಎಂದರೆ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ಸಿದ್ಧಪಡಿಸಲು ಡೇಟಾ ಸೆಟ್‌ಗೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂಬುದನ್ನು ವಿವರಿಸುವ ಬ್ಲೂಪ್ರಿಂಟ್ ಎಂದು ಭಾವಿಸಬಹುದು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು ನಮ್ಮ `ತರಬೇತಿ ಸೆಟ್`ಗಾಗಿ ಅಡುಗೆಶೈಲಿಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಸಮಾನ ವಿತರಣೆ ಇರಬೇಕೆಂದು ಬಯಸುತ್ತೇವೆ. ಅದಕ್ಕೆ ನೇರವಾಗಿ ಹೋಗೋಣ.\n" + ], + "metadata": { + "id": "daBi9qJNIwqW" + } + }, + { + "cell_type": "code", + "execution_count": 5, + "source": [ + "# Load themis package for dealing with imbalanced data\r\n", + "library(themis)\r\n", + "\r\n", + "# Create a recipe for preprocessing training data\r\n", + "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>% \r\n", + " step_smote(cuisine)\r\n", + "\r\n", + "# Print recipe\r\n", + "cuisines_recipe" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Data Recipe\n", + "\n", + "Inputs:\n", + "\n", + " role #variables\n", + " outcome 1\n", + " predictor 380\n", + "\n", + "Operations:\n", + "\n", + "SMOTE based on cuisine" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 200 + }, + "id": "Az6LFBGxI1X0", + "outputId": "29d71d85-64b0-4e62-871e-bcd5398573b6" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನೀವು ಖಂಡಿತವಾಗಿಯೂ ಮುಂದುವರಿದು (prep+bake ಬಳಸಿ) ರೆಸಿಪಿ ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ದೃಢೀಕರಿಸಬಹುದು - ಎಲ್ಲಾ ಆಹಾರ ಲೇಬಲ್ಗಳಿಗೆ `559` ವೀಕ್ಷಣೆಗಳಿವೆ.\n", + "\n", + "ನಾವು ಈ ರೆಸಿಪಿಯನ್ನು ಮಾದರಿಗಾಗಿ ಪೂರ್ವಸಿದ್ಧತೆಯಾಗಿ ಬಳಸಲಿದ್ದೇವೆ, ಆದ್ದರಿಂದ `workflow()` ನಮ್ಮಿಗಾಗಿ ಎಲ್ಲಾ prep ಮತ್ತು bake ಅನ್ನು ಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ನಾವು ಕೈಯಿಂದ ರೆಸಿಪಿಯನ್ನು ಅಂದಾಜಿಸಲು ಅಗತ್ಯವಿಲ್ಲ.\n", + "\n", + "ಈಗ ನಾವು ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೇವೆ 👩‍💻👨‍💻!\n", + "\n", + "## 3. ನಿಮ್ಮ ವರ್ಗೀಕರಣಕಾರರನ್ನು ಆಯ್ಕೆಮಾಡುವುದು\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n" + ], + "metadata": { + "id": "NBL3PqIWJBBB" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ ನಾವು ಕೆಲಸಕ್ಕೆ ಯಾವ ಆಲ್ಗೋರಿದಮ್ ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸಬೇಕು 🤔.\n", + "\n", + "Tidymodels ನಲ್ಲಿ, [`parsnip package`](https://parsnip.tidymodels.org/index.html) ವಿವಿಧ ಎಂಜಿನ್‌ಗಳ (ಪ್ಯಾಕೇಜ್‌ಗಳ) ಮೂಲಕ ಮಾದರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಸತತ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ದಯವಿಟ್ಟು parsnip ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಅನ್ನು ನೋಡಿ [ಮಾದರಿ ಪ್ರಕಾರಗಳು & ಎಂಜಿನ್‌ಗಳು](https://www.tidymodels.org/find/parsnip/#models) ಮತ್ತು ಅವುಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ [ಮಾದರಿ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳು](https://www.tidymodels.org/find/parsnip/#model-args) ಅನ್ನು ಅನ್ವೇಷಿಸಿ. ಪ್ರಥಮ ದೃಷ್ಟಿಯಲ್ಲಿ ವೈವಿಧ್ಯತೆಯು ಸ್ವಲ್ಪ ಗೊಂದಲಕಾರಿಯಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ಕೆಳಗಿನ ವಿಧಾನಗಳು ಎಲ್ಲವೂ ವರ್ಗೀಕರಣ ತಂತ್ರಗಳನ್ನು ಒಳಗೊಂಡಿವೆ:\n", + "\n", + "- C5.0 ನಿಯಮಾಧಾರಿತ ವರ್ಗೀಕರಣ ಮಾದರಿಗಳು\n", + "\n", + "- ಲವಚಿಕ ವಿಭಜನಾ ಮಾದರಿಗಳು\n", + "\n", + "- ರೇಖೀಯ ವಿಭಜನಾ ಮಾದರಿಗಳು\n", + "\n", + "- ನಿಯಮಿತ ವಿಭಜನಾ ಮಾದರಿಗಳು\n", + "\n", + "- ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳು\n", + "\n", + "- ಬಹುಪದ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳು\n", + "\n", + "- ನೈವ್ ಬೇಯ್ಸ್ ಮಾದರಿಗಳು\n", + "\n", + "- ಬೆಂಬಲ ವೆಕ್ಟರ್ ಯಂತ್ರಗಳು\n", + "\n", + "- ಸಮೀಪದ ನೆರೆಹೊರೆಯವರು\n", + "\n", + "- ನಿರ್ಣಯ ಮರಗಳು\n", + "\n", + "- ಸಂಯೋಜಿತ ವಿಧಾನಗಳು\n", + "\n", + "- ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು\n", + "\n", + "ಪಟ್ಟಿ ಮುಂದುವರಿಯುತ್ತದೆ!\n", + "\n", + "### **ಯಾವ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕು?**\n", + "\n", + "ಹೀಗಾಗಿ, ನೀವು ಯಾವ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಕು? ಬಹುಶಃ, ಹಲವಾರು ವಿಧಾನಗಳನ್ನು ಪ್ರಯೋಗಿಸಿ ಉತ್ತಮ ಫಲಿತಾಂಶವನ್ನು ಹುಡುಕುವುದು ಪರೀಕ್ಷಿಸುವ ಒಂದು ಮಾರ್ಗವಾಗಿದೆ.\n", + "\n", + "> AutoML ಈ ಸಮಸ್ಯೆಯನ್ನು ಸುಗಮವಾಗಿ ಪರಿಹರಿಸುತ್ತದೆ, ಈ ಹೋಲಿಕೆಗಳನ್ನು ಕ್ಲೌಡ್‌ನಲ್ಲಿ ನಡೆಸಿ, ನಿಮ್ಮ ಡೇಟಾಗೆ ಅತ್ಯುತ್ತಮ ಆಲ್ಗೋರಿದಮ್ ಆಯ್ಕೆಮಾಡಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಇದನ್ನು [ಇಲ್ಲಿ](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) ಪ್ರಯತ್ನಿಸಿ\n", + "\n", + "ಮತ್ತಷ್ಟು, ವರ್ಗೀಕರಣಕಾರಿಯ ಆಯ್ಕೆ ನಮ್ಮ ಸಮಸ್ಯೆಯ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ಫಲಿತಾಂಶವನ್ನು `ಎರಡು ತರಗತಿಗಳಿಗಿಂತ ಹೆಚ್ಚು` ವರ್ಗೀಕರಿಸಬಹುದಾದಾಗ, ನಮ್ಮ ಪ್ರಕರಣದಂತೆ, ನೀವು `ಬಹುತರಗತಿ ವರ್ಗೀಕರಣ ಆಲ್ಗೋರಿದಮ್` ಅನ್ನು ಬಳಸಬೇಕು, `ದ್ವಿತೀಯ ವರ್ಗೀಕರಣ` ಬದಲು.\n", + "\n", + "### **ಒಂದು ಉತ್ತಮ ವಿಧಾನ**\n", + "\n", + "ಅನಿರೀಕ್ಷಿತವಾಗಿ ಊಹಿಸುವುದಕ್ಕಿಂತ ಉತ್ತಮ ವಿಧಾನವೆಂದರೆ, ಈ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದಾದ [ML ಚೀಟ್ ಶೀಟ್](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) ನಲ್ಲಿ ನೀಡಲಾದ ಆಲೋಚನೆಗಳನ್ನು ಅನುಸರಿಸುವುದು. ಇಲ್ಲಿ, ನಮ್ಮ ಬಹುತರಗತಿ ಸಮಸ್ಯೆಗೆ, ನಮಗೆ ಕೆಲವು ಆಯ್ಕೆಗಳು ಇವೆ:\n", + "\n", + "

\n", + " \n", + "

ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ ಆಲ್ಗೋರಿದಮ್ ಚೀಟ್ ಶೀಟ್‌ನ ಒಂದು ವಿಭಾಗ, ಬಹುತರಗತಿ ವರ್ಗೀಕರಣ ಆಯ್ಕೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ
\n" + ], + "metadata": { + "id": "a6DLAZ3vJZ14" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **ಕಾರಣ**\n", + "\n", + "ನಾವು ಹೊಂದಿರುವ ನಿರ್ಬಂಧಗಳನ್ನು ಗಮನಿಸಿ ವಿಭಿನ್ನ ವಿಧಾನಗಳ ಮೂಲಕ ನಾವು ಯೋಚಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ:\n", + "\n", + "- **ಡೀಪ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ತುಂಬಾ ಭಾರವಾಗಿವೆ**. ನಮ್ಮ ಸ್ವಚ್ಛ, ಆದರೆ ಕನಿಷ್ಠ ಡೇಟಾಸೆಟ್ ಮತ್ತು ನಾವು ನೋಟ್‌ಬುಕ್‌ಗಳ ಮೂಲಕ ಸ್ಥಳೀಯವಾಗಿ ತರಬೇತಿ ನಡೆಸುತ್ತಿರುವುದರಿಂದ, ಡೀಪ್ ನ್ಯೂರಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಈ ಕಾರ್ಯಕ್ಕೆ ತುಂಬಾ ಭಾರವಾಗಿವೆ.\n", + "\n", + "- **ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ**. ನಾವು ಎರಡು ವರ್ಗದ ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ಒನ್-ವಿಎಸ್-ಆಲ್ ಅನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ.\n", + "\n", + "- **ನಿರ್ಣಯ ಮರ ಅಥವಾ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಕೆಲಸ ಮಾಡಬಹುದು**. ನಿರ್ಣಯ ಮರ ಕೆಲಸ ಮಾಡಬಹುದು, ಅಥವಾ ಬಹು ವರ್ಗದ ಡೇಟಾಗಾಗಿ ಬಹುಪದ ರಿಗ್ರೆಶನ್/ಬಹು ವರ್ಗದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್.\n", + "\n", + "- **ಬಹು ವರ್ಗದ ಬೂಸ್ಟೆಡ್ ನಿರ್ಣಯ ಮರಗಳು ಬೇರೆ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತವೆ**. ಬಹು ವರ್ಗದ ಬೂಸ್ಟೆಡ್ ನಿರ್ಣಯ ಮರವು ಅಪ್ರಮಾಣಿತ ಕಾರ್ಯಗಳಿಗೆ ಸೂಕ್ತವಾಗಿದೆ, ಉದಾ: ರ್ಯಾಂಕಿಂಗ್ ನಿರ್ಮಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಿದ ಕಾರ್ಯಗಳು, ಆದ್ದರಿಂದ ಇದು ನಮಗೆ ಉಪಯುಕ್ತವಲ್ಲ.\n", + "\n", + "ಸಾಮಾನ್ಯವಾಗಿ, ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಯಂತ್ರ ಕಲಿಕೆ ಮಾದರಿಗಳಲ್ಲಿ (ಉದಾ: ಎನ್ಸೆಂಬಲ್ ವಿಧಾನಗಳು) ಕೈ ಹಾಕುವ ಮೊದಲು, ಏನಾಗುತ್ತಿದೆ ಎಂಬುದರ ಒಂದು ಕಲ್ಪನೆ ಪಡೆಯಲು ಸಾಧ್ಯವಾದಷ್ಟು ಸರಳ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸುವುದು ಉತ್ತಮ. ಆದ್ದರಿಂದ ಈ ಪಾಠಕ್ಕಾಗಿ, ನಾವು `ಬಹುಪದ ರಿಗ್ರೆಶನ್` ಮಾದರಿಯಿಂದ ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ.\n", + "\n", + "> ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಒಂದು ತಂತ್ರವಾಗಿದೆ, ಇದನ್ನು ಫಲಿತಾಂಶ ಚರವು ವರ್ಗೀಕೃತ (ಅಥವಾ ನಾಮಮಾತ್ರ) ಆಗಿರುವಾಗ ಬಳಸಲಾಗುತ್ತದೆ. ದ್ವಿಚರ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ನಲ್ಲಿ ಫಲಿತಾಂಶ ಚರಗಳ ಸಂಖ್ಯೆ ಎರಡು, ಆದರೆ ಬಹುಪದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್‌ನಲ್ಲಿ ಫಲಿತಾಂಶ ಚರಗಳ ಸಂಖ್ಯೆ ಎರಡುಕ್ಕಿಂತ ಹೆಚ್ಚು. ಹೆಚ್ಚಿನ ಓದಿಗಾಗಿ [ಅಡ್ವಾನ್ಸ್ಡ್ ರಿಗ್ರೆಶನ್ ವಿಧಾನಗಳು](https://bookdown.org/chua/ber642_advanced_regression/multinomial-logistic-regression.html) ನೋಡಿ.\n", + "\n", + "## 4. ಬಹುಪದ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ತರಬೇತಿ ಮಾಡಿ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ.\n", + "\n", + "ಟಿಡಿಮೋಡಲ್ಸ್‌ನಲ್ಲಿ, `parsnip::multinom_reg()`, ಬಹುಪದ ವಿತರಣೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಬಹು ವರ್ಗದ ಡೇಟಾವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲು ರೇಖೀಯ ಪೂರ್ವಾನುಮಾನಕಾರಿಗಳನ್ನು ಬಳಸುವ ಮಾದರಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಈ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸಲು ನೀವು ಬಳಸಬಹುದಾದ ವಿಭಿನ್ನ ವಿಧಾನಗಳು/ಎಂಜಿನ್‌ಗಳಿಗಾಗಿ `?multinom_reg()` ನೋಡಿ.\n", + "\n", + "ಈ ಉದಾಹರಣೆಗೆ, ನಾವು ಡೀಫಾಲ್ಟ್ [nnet](https://cran.r-project.org/web/packages/nnet/nnet.pdf) ಎಂಜಿನ್ ಮೂಲಕ ಬಹುಪದ ರಿಗ್ರೆಶನ್ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸುವೆವು.\n", + "\n", + "> ನಾನು `penalty` ಗೆ ಮರುಕಳಿಸುವಂತೆ ಒಂದು ಮೌಲ್ಯವನ್ನು ಆಯ್ಕೆಮಾಡಿದೆ. ಈ ಮೌಲ್ಯವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಉತ್ತಮ ವಿಧಾನಗಳಿವೆ, ಅಂದರೆ `ರಿಸ್ಯಾಂಪ್ಲಿಂಗ್` ಮತ್ತು `ಟ್ಯೂನಿಂಗ್` ಮಾದರಿಯನ್ನು ಬಳಸುವುದು, ಇದನ್ನು ನಾವು ನಂತರ ಚರ್ಚಿಸುವೆವು.\n", + ">\n", + "> ಮಾದರಿ ಹೈಪರ್‌ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಹೇಗೆ ಟ್ಯೂನ್ ಮಾಡುವುದು ಎಂಬುದನ್ನು ತಿಳಿಯಲು [ಟಿಡಿಮೋಡಲ್ಸ್: ಪ್ರಾರಂಭಿಸಿ](https://www.tidymodels.org/start/tuning/) ನೋಡಿ.\n" + ], + "metadata": { + "id": "gWMsVcbBJemu" + } + }, + { + "cell_type": "code", + "execution_count": 6, + "source": [ + "# Create a multinomial regression model specification\r\n", + "mr_spec <- multinom_reg(penalty = 1) %>% \r\n", + " set_engine(\"nnet\", MaxNWts = 2086) %>% \r\n", + " set_mode(\"classification\")\r\n", + "\r\n", + "# Print model specification\r\n", + "mr_spec" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Multinomial Regression Model Specification (classification)\n", + "\n", + "Main Arguments:\n", + " penalty = 1\n", + "\n", + "Engine-Specific Arguments:\n", + " MaxNWts = 2086\n", + "\n", + "Computational engine: nnet \n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 166 + }, + "id": "Wq_fcyQiJvfG", + "outputId": "c30449c7-3864-4be7-f810-72a003743e2d" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಉತ್ತಮ ಕೆಲಸ 🥳! ಈಗ ನಮಗೆ ಒಂದು ರೆಸಿಪಿ ಮತ್ತು ಒಂದು ಮಾದರಿ ವಿವರಣೆ ಇದ್ದು, ಅವುಗಳನ್ನು ಒಟ್ಟಿಗೆ ಒಂದು ವಸ್ತುವಾಗಿ ಬಂಡಲ್ ಮಾಡುವ ಮಾರ್ಗವನ್ನು ಕಂಡುಹಿಡಿಯಬೇಕಾಗಿದೆ, ಅದು ಮೊದಲು ಡೇಟಾವನ್ನು ಪೂರ್ವಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ ನಂತರ ಪೂರ್ವಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ ಡೇಟಾದ ಮೇಲೆ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸಿ ಮತ್ತು ಸಾಧ್ಯವಾದ ನಂತರದ ಪ್ರಕ್ರಿಯೆಗಳಿಗೂ ಅವಕಾಶ ನೀಡುತ್ತದೆ. Tidymodels ನಲ್ಲಿ, ಈ ಅನುಕೂಲಕರ ವಸ್ತುವನ್ನು [`workflow`](https://workflows.tidymodels.org/) ಎಂದು ಕರೆಯುತ್ತಾರೆ ಮತ್ತು ಇದು ನಿಮ್ಮ ಮಾದರಿ ಘಟಕಗಳನ್ನು ಸುಲಭವಾಗಿ ಹಿಡಿದಿಡುತ್ತದೆ! Python ನಲ್ಲಿ ಇದನ್ನು *pipelines* ಎಂದು ಕರೆಯುತ್ತಾರೆ.\n", + "\n", + "ಹೀಗಾಗಿ ಎಲ್ಲವನ್ನೂ ಒಂದು workflow ಗೆ ಬಂಡಲ್ ಮಾಡೋಣ!📦\n" + ], + "metadata": { + "id": "NlSbzDfgJ0zh" + } + }, + { + "cell_type": "code", + "execution_count": 7, + "source": [ + "# Bundle recipe and model specification\r\n", + "mr_wf <- workflow() %>% \r\n", + " add_recipe(cuisines_recipe) %>% \r\n", + " add_model(mr_spec)\r\n", + "\r\n", + "# Print out workflow\r\n", + "mr_wf" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "══ Workflow ════════════════════════════════════════════════════════════════════\n", + "\u001b[3mPreprocessor:\u001b[23m Recipe\n", + "\u001b[3mModel:\u001b[23m multinom_reg()\n", + "\n", + "── Preprocessor ────────────────────────────────────────────────────────────────\n", + "1 Recipe Step\n", + "\n", + "• step_smote()\n", + "\n", + "── Model ───────────────────────────────────────────────────────────────────────\n", + "Multinomial Regression Model Specification (classification)\n", + "\n", + "Main Arguments:\n", + " penalty = 1\n", + "\n", + "Engine-Specific Arguments:\n", + " MaxNWts = 2086\n", + "\n", + "Computational engine: nnet \n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 333 + }, + "id": "Sc1TfPA4Ke3_", + "outputId": "82c70013-e431-4e7e-cef6-9fcf8aad4a6c" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಕಾರ್ಯಪ್ರವಾಹಗಳು 👌👌! ಒಂದು **`workflow()`** ಅನ್ನು ಮಾದರಿಯನ್ನು ಹೊಂದಿಸುವಂತೆ ಸರಿಹೊಂದಿಸಬಹುದು. ಆದ್ದರಿಂದ, ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸುವ ಸಮಯ ಬಂದಿದೆ!\n" + ], + "metadata": { + "id": "TNQ8i85aKf9L" + } + }, + { + "cell_type": "code", + "execution_count": 8, + "source": [ + "# Train a multinomial regression model\n", + "mr_fit <- fit(object = mr_wf, data = cuisines_train)\n", + "\n", + "mr_fit" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "══ Workflow [trained] ══════════════════════════════════════════════════════════\n", + "\u001b[3mPreprocessor:\u001b[23m Recipe\n", + "\u001b[3mModel:\u001b[23m multinom_reg()\n", + "\n", + "── Preprocessor ────────────────────────────────────────────────────────────────\n", + "1 Recipe Step\n", + "\n", + "• step_smote()\n", + "\n", + "── Model ───────────────────────────────────────────────────────────────────────\n", + "Call:\n", + "nnet::multinom(formula = ..y ~ ., data = data, decay = ~1, MaxNWts = ~2086, \n", + " trace = FALSE)\n", + "\n", + "Coefficients:\n", + " (Intercept) almond angelica anise anise_seed apple\n", + "indian 0.19723325 0.2409661 0 -5.004955e-05 -0.1657635 -0.05769734\n", + "japanese 0.13961959 -0.6262400 0 -1.169155e-04 -0.4893596 -0.08585717\n", + "korean 0.22377347 -0.1833485 0 -5.560395e-05 -0.2489401 -0.15657804\n", + "thai -0.04336577 -0.6106258 0 4.903828e-04 -0.5782866 0.63451105\n", + " apple_brandy apricot armagnac artemisia artichoke asparagus\n", + "indian 0 0.37042636 0 -0.09122797 0 -0.27181970\n", + "japanese 0 0.28895643 0 -0.12651100 0 0.14054037\n", + "korean 0 -0.07981259 0 0.55756709 0 -0.66979948\n", + "thai 0 -0.33160904 0 -0.10725182 0 -0.02602152\n", + " avocado bacon baked_potato balm banana barley\n", + "indian -0.46624197 0.16008055 0 0 -0.2838796 0.2230625\n", + "japanese 0.90341344 0.02932727 0 0 -0.4142787 2.0953906\n", + "korean -0.06925382 -0.35804134 0 0 -0.2686963 -0.7233404\n", + "thai -0.21473955 -0.75594439 0 0 0.6784880 -0.4363320\n", + " bartlett_pear basil bay bean beech\n", + "indian 0 -0.7128756 0.1011587 -0.8777275 -0.0004380795\n", + "japanese 0 0.1288697 0.9425626 -0.2380748 0.3373437611\n", + "korean 0 -0.2445193 -0.4744318 -0.8957870 -0.0048784496\n", + "thai 0 1.5365848 0.1333256 0.2196970 -0.0113078024\n", + " beef beef_broth beef_liver beer beet\n", + "indian -0.7985278 0.2430186 -0.035598065 -0.002173738 0.01005813\n", + "japanese 0.2241875 -0.3653020 -0.139551027 0.128905553 0.04923911\n", + "korean 0.5366515 -0.6153237 0.213455197 -0.010828645 0.27325423\n", + "thai 0.1570012 -0.9364154 -0.008032213 -0.035063746 -0.28279823\n", + " bell_pepper bergamot berry bitter_orange black_bean\n", + "indian 0.49074330 0 0.58947607 0.191256164 -0.1945233\n", + "japanese 0.09074167 0 -0.25917977 -0.118915977 -0.3442400\n", + "korean -0.57876763 0 -0.07874180 -0.007729435 -0.5220672\n", + "thai 0.92554006 0 -0.07210196 -0.002983296 -0.4614426\n", + " black_currant black_mustard_seed_oil black_pepper black_raspberry\n", + "indian 0 0.38935801 -0.4453495 0\n", + "japanese 0 -0.05452887 -0.5440869 0\n", + "korean 0 -0.03929970 0.8025454 0\n", + "thai 0 -0.21498372 -0.9854806 0\n", + " black_sesame_seed black_tea blackberry blackberry_brandy\n", + "indian -0.2759246 0.3079977 0.191256164 0\n", + "japanese -0.6101687 -0.1671913 -0.118915977 0\n", + "korean 1.5197674 -0.3036261 -0.007729435 0\n", + "thai -0.1755656 -0.1487033 -0.002983296 0\n", + " blue_cheese blueberry bone_oil bourbon_whiskey brandy\n", + "indian 0 0.216164294 -0.2276744 0 0.22427587\n", + "japanese 0 -0.119186087 0.3913019 0 -0.15595599\n", + "korean 0 -0.007821986 0.2854487 0 -0.02562342\n", + "thai 0 -0.004947048 -0.0253658 0 -0.05715244\n", + "\n", + "...\n", + "and 308 more lines." + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "GMbdfVmTKkJI", + "outputId": "adf9ebdf-d69d-4a64-e9fd-e06e5322292e" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಮಾದರಿ ತರಬೇತಿ ಸಮಯದಲ್ಲಿ ಕಲಿತ ಗುಣಾಂಕಗಳನ್ನು ಔಟ್‌ಪುಟ್ ತೋರಿಸುತ್ತದೆ.\n", + "\n", + "### ತರಬೇತಿಗೊಂಡ ಮಾದರಿಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ\n", + "\n", + "ಮಾದರಿ ಪರೀಕ್ಷಾ ಸೆಟ್‌ನಲ್ಲಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸಿತು ಎಂದು ನೋಡಲು ಸಮಯವಾಗಿದೆ 📏! ಪರೀಕ್ಷಾ ಸೆಟ್‌ನಲ್ಲಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ.\n" + ], + "metadata": { + "id": "tt2BfOxrKmcJ" + } + }, + { + "cell_type": "code", + "execution_count": 9, + "source": [ + "# Make predictions on the test set\n", + "results <- cuisines_test %>% select(cuisine) %>% \n", + " bind_cols(mr_fit %>% predict(new_data = cuisines_test))\n", + "\n", + "# Print out results\n", + "results %>% \n", + " slice_head(n = 5)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine .pred_class\n", + "1 indian thai \n", + "2 indian indian \n", + "3 indian indian \n", + "4 indian indian \n", + "5 indian indian " + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| cuisine <fct> | .pred_class <fct> |\n", + "|---|---|\n", + "| indian | thai |\n", + "| indian | indian |\n", + "| indian | indian |\n", + "| indian | indian |\n", + "| indian | indian |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " cuisine & .pred\\_class\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t indian & thai \\\\\n", + "\t indian & indian\\\\\n", + "\t indian & indian\\\\\n", + "\t indian & indian\\\\\n", + "\t indian & indian\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
cuisine.pred_class
<fct><fct>
indianthai
indianindian
indianindian
indianindian
indianindian
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "id": "CqtckvtsKqax", + "outputId": "e57fe557-6a68-4217-fe82-173328c5436d" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಉತ್ತಮ ಕೆಲಸ! Tidymodels ನಲ್ಲಿ, ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಲು [yardstick](https://yardstick.tidymodels.org/) ಅನ್ನು ಬಳಸಬಹುದು - ಇದು ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಮಾಪಕಗಳನ್ನು ಬಳಸಿ ಮಾದರಿಗಳ ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ಅಳೆಯಲು ಬಳಸುವ ಪ್ಯಾಕೇಜ್. ನಾವು ನಮ್ಮ ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಪಾಠದಲ್ಲಿ ಮಾಡಿದಂತೆ, ಬಿಕ್ಕಟ್ಟು ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಲೆಕ್ಕಹಾಕುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ.\n" + ], + "metadata": { + "id": "8w5N6XsBKss7" + } + }, + { + "cell_type": "code", + "execution_count": 10, + "source": [ + "# Confusion matrix for categorical data\n", + "conf_mat(data = results, truth = cuisine, estimate = .pred_class)\n" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " Truth\n", + "Prediction chinese indian japanese korean thai\n", + " chinese 83 1 8 15 10\n", + " indian 4 163 1 2 6\n", + " japanese 21 5 73 25 1\n", + " korean 15 0 11 191 0\n", + " thai 10 11 3 7 70" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 133 + }, + "id": "YvODvsLkK0iG", + "outputId": "bb69da84-1266-47ad-b174-d43b88ca2988" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಬಹು ವರ್ಗಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ, ಇದನ್ನು ಹೀಟ್ ಮ್ಯಾಪ್ ಆಗಿ ದೃಶ್ಯೀಕರಿಸುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಹೆಚ್ಚು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸುಲಭವಾಗಿರುತ್ತದೆ, ಹೀಗೆ:\n" + ], + "metadata": { + "id": "c0HfPL16Lr6U" + } + }, + { + "cell_type": "code", + "execution_count": 11, + "source": [ + "update_geom_defaults(geom = \"tile\", new = list(color = \"black\", alpha = 0.7))\n", + "# Visualize confusion matrix\n", + "results %>% \n", + " conf_mat(cuisine, .pred_class) %>% \n", + " autoplot(type = \"heatmap\")" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "plot without title" + ], + "image/png": "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" + }, + "metadata": { + "image/png": { + "width": 420, + "height": 420 + } + } + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 436 + }, + "id": "HsAtwukyLsvt", + "outputId": "3032a224-a2c8-4270-b4f2-7bb620317400" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಕನ್ಫ್ಯೂಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಪ್ಲಾಟ್‌ನಲ್ಲಿ ಗಾಢ ಬಣ್ಣದ ಚೌಕಗಳು ಹೆಚ್ಚಿನ ಪ್ರಕರಣಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸುತ್ತವೆ, ಮತ್ತು ನೀವು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಮತ್ತು ನಿಜವಾದ ಲೇಬಲ್ ಒಂದೇ ಇರುವ ಪ್ರಕರಣಗಳನ್ನು ಸೂಚಿಸುವ ಗಾಢ ಬಣ್ಣದ ಚೌಕಗಳ ತಿರಸ್ಕೃತ ರೇಖೆಯನ್ನು ನೋಡಬಹುದು ಎಂದು ಆಶಿಸುತ್ತೇವೆ.\n", + "\n", + "ಇದೀಗ ಕನ್ಫ್ಯೂಷನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್‌ಗೆ ಸಾರಾಂಶ ಅಂಕಿಅಂಶಗಳನ್ನು ಲೆಕ್ಕಹಾಕೋಣ.\n" + ], + "metadata": { + "id": "oOJC87dkLwPr" + } + }, + { + "cell_type": "code", + "execution_count": 12, + "source": [ + "# Summary stats for confusion matrix\n", + "conf_mat(data = results, truth = cuisine, estimate = .pred_class) %>% \n", + "summary()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " .metric .estimator .estimate\n", + "1 accuracy multiclass 0.7880435\n", + "2 kap multiclass 0.7276583\n", + "3 sens macro 0.7780927\n", + "4 spec macro 0.9477598\n", + "5 ppv macro 0.7585583\n", + "6 npv macro 0.9460080\n", + "7 mcc multiclass 0.7292724\n", + "8 j_index macro 0.7258524\n", + "9 bal_accuracy macro 0.8629262\n", + "10 detection_prevalence macro 0.2000000\n", + "11 precision macro 0.7585583\n", + "12 recall macro 0.7780927\n", + "13 f_meas macro 0.7641862" + ], + "text/markdown": [ + "\n", + "A tibble: 13 × 3\n", + "\n", + "| .metric <chr> | .estimator <chr> | .estimate <dbl> |\n", + "|---|---|---|\n", + "| accuracy | multiclass | 0.7880435 |\n", + "| kap | multiclass | 0.7276583 |\n", + "| sens | macro | 0.7780927 |\n", + "| spec | macro | 0.9477598 |\n", + "| ppv | macro | 0.7585583 |\n", + "| npv | macro | 0.9460080 |\n", + "| mcc | multiclass | 0.7292724 |\n", + "| j_index | macro | 0.7258524 |\n", + "| bal_accuracy | macro | 0.8629262 |\n", + "| detection_prevalence | macro | 0.2000000 |\n", + "| precision | macro | 0.7585583 |\n", + "| recall | macro | 0.7780927 |\n", + "| f_meas | macro | 0.7641862 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 13 × 3\n", + "\\begin{tabular}{lll}\n", + " .metric & .estimator & .estimate\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t accuracy & multiclass & 0.7880435\\\\\n", + "\t kap & multiclass & 0.7276583\\\\\n", + "\t sens & macro & 0.7780927\\\\\n", + "\t spec & macro & 0.9477598\\\\\n", + "\t ppv & macro & 0.7585583\\\\\n", + "\t npv & macro & 0.9460080\\\\\n", + "\t mcc & multiclass & 0.7292724\\\\\n", + "\t j\\_index & macro & 0.7258524\\\\\n", + "\t bal\\_accuracy & macro & 0.8629262\\\\\n", + "\t detection\\_prevalence & macro & 0.2000000\\\\\n", + "\t precision & macro & 0.7585583\\\\\n", + "\t recall & macro & 0.7780927\\\\\n", + "\t f\\_meas & macro & 0.7641862\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 13 × 3
.metric.estimator.estimate
<chr><chr><dbl>
accuracy multiclass0.7880435
kap multiclass0.7276583
sens macro 0.7780927
spec macro 0.9477598
ppv macro 0.7585583
npv macro 0.9460080
mcc multiclass0.7292724
j_index macro 0.7258524
bal_accuracy macro 0.8629262
detection_prevalencemacro 0.2000000
precision macro 0.7585583
recall macro 0.7780927
f_meas macro 0.7641862
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 494 + }, + "id": "OYqetUyzL5Wz", + "outputId": "6a84d65e-113d-4281-dfc1-16e8b70f37e6" + } + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ಕೆಲವು ಮೆಟ್ರಿಕ್ಸ್‌ಗಳಿಗೆ, ಉದಾಹರಣೆಗೆ ಶುದ್ಧತೆ, ಸಂವೇದನಶೀಲತೆ, ppv ಇತ್ಯಾದಿಗಳಿಗೆ ಸೀಮಿತಗೊಳ್ಳುವಾಗ, ಪ್ರಾರಂಭಕ್ಕೆ ನಾವು ಕೆಟ್ಟದಾಗಿ ಇಲ್ಲವೇ ಇಲ್ಲ 🥳!\n", + "\n", + "## 4. ಆಳವಾಗಿ ತೊಳೆಯುವುದು\n", + "\n", + "ಒಂದು ಸೂಕ್ಷ್ಮ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳೋಣ: ನಿರ್ದಿಷ್ಟ ರೀತಿಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಫಲಿತಾಂಶವಾಗಿ ನಿಗದಿಪಡಿಸಲು ಯಾವ ಮಾನದಂಡವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ?\n", + "\n", + "ಸರಿ, ಲಾಜಿಸ್ಟಿಕ್ ರಿಗ್ರೆಶನ್ ಮುಂತಾದ ಸಾಂಖ್ಯಿಕ ಯಂತ್ರ ಅಧ್ಯಯನ ಆಲ್ಗಾರಿದಮ್ಗಳು `ಸಂಭಾವ್ಯತೆ` ಆಧಾರಿತವಾಗಿವೆ; ಆದ್ದರಿಂದ ವರ್ಗೀಕರಿಸುವ ಯಂತ್ರವು ಭವಿಷ್ಯವಾಣಿ ಮಾಡುವುದೇನಂದರೆ ಸಾಧ್ಯವಾದ ಫಲಿತಾಂಶಗಳ ಸಮೂಹದ ಮೇಲೆ ಒಂದು ಸಾಧ್ಯತೆ ವಿತರಣೆಯಾಗಿದೆ. ಅತ್ಯಧಿಕ ಸಾಧ್ಯತೆಯಿರುವ ವರ್ಗವನ್ನು ನಂತರ ನೀಡಲಾದ ಅವಲೋಕನಗಳಿಗೆ ಅತ್ಯಂತ ಸಾಧ್ಯತೆಯ ಫಲಿತಾಂಶವಾಗಿ ಆಯ್ಕೆಮಾಡಲಾಗುತ್ತದೆ.\n", + "\n", + "ಕಠಿಣ ವರ್ಗ ಭವಿಷ್ಯವಾಣಿಗಳು ಮತ್ತು ಸಾಧ್ಯತೆಗಳನ್ನು ಎರಡನ್ನೂ ಮಾಡಿ ಇದನ್ನು ಕಾರ್ಯಾಚರಣೆಯಲ್ಲಿ ನೋಡೋಣ.\n" + ], + "metadata": { + "id": "43t7vz8vMJtW" + } + }, + { + "cell_type": "code", + "execution_count": 13, + "source": [ + "# Make hard class prediction and probabilities\n", + "results_prob <- cuisines_test %>%\n", + " select(cuisine) %>% \n", + " bind_cols(mr_fit %>% predict(new_data = cuisines_test)) %>% \n", + " bind_cols(mr_fit %>% predict(new_data = cuisines_test, type = \"prob\"))\n", + "\n", + "# Print out results\n", + "results_prob %>% \n", + " slice_head(n = 5)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine .pred_class .pred_chinese .pred_indian .pred_japanese .pred_korean\n", + "1 indian thai 1.551259e-03 0.4587877 5.988039e-04 2.428503e-04\n", + "2 indian indian 2.637133e-05 0.9999488 6.648651e-07 2.259993e-05\n", + "3 indian indian 1.049433e-03 0.9909982 1.060937e-03 1.644947e-05\n", + "4 indian indian 6.237482e-02 0.4763035 9.136702e-02 3.660913e-01\n", + "5 indian indian 1.431745e-02 0.9418551 2.945239e-02 8.721782e-03\n", + " .pred_thai \n", + "1 5.388194e-01\n", + "2 1.577948e-06\n", + "3 6.874989e-03\n", + "4 3.863391e-03\n", + "5 5.653283e-03" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 7\n", + "\n", + "| cuisine <fct> | .pred_class <fct> | .pred_chinese <dbl> | .pred_indian <dbl> | .pred_japanese <dbl> | .pred_korean <dbl> | .pred_thai <dbl> |\n", + "|---|---|---|---|---|---|---|\n", + "| indian | thai | 1.551259e-03 | 0.4587877 | 5.988039e-04 | 2.428503e-04 | 5.388194e-01 |\n", + "| indian | indian | 2.637133e-05 | 0.9999488 | 6.648651e-07 | 2.259993e-05 | 1.577948e-06 |\n", + "| indian | indian | 1.049433e-03 | 0.9909982 | 1.060937e-03 | 1.644947e-05 | 6.874989e-03 |\n", + "| indian | indian | 6.237482e-02 | 0.4763035 | 9.136702e-02 | 3.660913e-01 | 3.863391e-03 |\n", + "| indian | indian | 1.431745e-02 | 0.9418551 | 2.945239e-02 | 8.721782e-03 | 5.653283e-03 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 7\n", + "\\begin{tabular}{lllllll}\n", + " cuisine & .pred\\_class & .pred\\_chinese & .pred\\_indian & .pred\\_japanese & .pred\\_korean & .pred\\_thai\\\\\n", + " & & & & & & \\\\\n", + "\\hline\n", + "\t indian & thai & 1.551259e-03 & 0.4587877 & 5.988039e-04 & 2.428503e-04 & 5.388194e-01\\\\\n", + "\t indian & indian & 2.637133e-05 & 0.9999488 & 6.648651e-07 & 2.259993e-05 & 1.577948e-06\\\\\n", + "\t indian & indian & 1.049433e-03 & 0.9909982 & 1.060937e-03 & 1.644947e-05 & 6.874989e-03\\\\\n", + "\t indian & indian & 6.237482e-02 & 0.4763035 & 9.136702e-02 & 3.660913e-01 & 3.863391e-03\\\\\n", + "\t indian & indian & 1.431745e-02 & 0.9418551 & 2.945239e-02 & 8.721782e-03 & 5.653283e-03\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 7
cuisine.pred_class.pred_chinese.pred_indian.pred_japanese.pred_korean.pred_thai
<fct><fct><dbl><dbl><dbl><dbl><dbl>
indianthai 1.551259e-030.45878775.988039e-042.428503e-045.388194e-01
indianindian2.637133e-050.99994886.648651e-072.259993e-051.577948e-06
indianindian1.049433e-030.99099821.060937e-031.644947e-056.874989e-03
indianindian6.237482e-020.47630359.136702e-023.660913e-013.863391e-03
indianindian1.431745e-020.94185512.945239e-028.721782e-035.653283e-03
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "id": "xdKNs-ZPMTJL", + "outputId": "68f6ac5a-725a-4eff-9ea6-481fef00e008" + } + }, + { + "cell_type": "markdown", + "source": [ + "ಬಹಳ ಉತ್ತಮ!\n", + "\n", + "✅ ಮೊದಲ ಅವಲೋಕನವು ಥಾಯ್ ಎಂದು ಮಾದರಿ pretty sure ಆಗಿರುವುದಕ್ಕೆ ನೀವು ವಿವರಿಸಬಹುದುವೇ?\n", + "\n", + "## **🚀ಸವಾಲು**\n", + "\n", + "ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಸ್ವಚ್ಛಗೊಳಿಸಿದ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ಒಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ, ಅದು ಒಂದು ಸರಣಿಯ ಪದಾರ್ಥಗಳ ಆಧಾರದ ಮೇಲೆ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬಹುದು. ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸಲು Tidymodels ನೀಡುವ [ಬಹುಮಾನ ಆಯ್ಕೆಗಳನ್ನು](https://www.tidymodels.org/find/parsnip/#models) ಮತ್ತು ಬಹುಪದವಿಧಾನ ರಿಗ್ರೆಶನ್ ಹೊಂದಿಸಲು [ಇತರೆ ಮಾರ್ಗಗಳನ್ನು](https://parsnip.tidymodels.org/articles/articles/Examples.html#multinom_reg-models) ಓದಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಿ.\n", + "\n", + "#### ಧನ್ಯವಾದಗಳು:\n", + "\n", + "[`ಆಲಿಸನ್ ಹೋರ್ಸ್ಟ್`](https://twitter.com/allison_horst/) ಅವರಿಗೆ R ಅನ್ನು ಹೆಚ್ಚು ಆತಿಥ್ಯಪೂರ್ಣ ಮತ್ತು ಆಕರ್ಷಕವಾಗಿಸುವ ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ. ಅವರ [ಗ್ಯಾಲರಿ](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಚಿತ್ರಣಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ.\n", + "\n", + "[ಕ್ಯಾಸಿ ಬ್ರೇವಿಯು](https://www.twitter.com/cassieview) ಮತ್ತು [ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ಅವರಿಗೆ ಈ ಮಾಯಾಜಾಲದ ಮೂಲ Python ಆವೃತ್ತಿಯನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ ♥️\n", + "\n", + "
\n", + "ಕೆಲವು ಹಾಸ್ಯಗಳನ್ನು ಸೇರಿಸುವುದಾಗಿತ್ತು ಆದರೆ ನಾನು ಆಹಾರ ಪನ್ಸ್ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲಾರೆ 😅.\n", + "\n", + "
\n", + "\n", + "ಶುಭ ಕಲಿಕೆ,\n", + "\n", + "[ಎರಿಕ್](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n" + ], + "metadata": { + "id": "2tWVHMeLMYdM" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/2-Classifiers-1/solution/notebook.ipynb b/translations/kn/4-Classification/2-Classifiers-1/solution/notebook.ipynb new file mode 100644 index 000000000..d7af1381a --- /dev/null +++ b/translations/kn/4-Classification/2-Classifiers-1/solution/notebook.ipynb @@ -0,0 +1,281 @@ +{ + "cells": [ + { + "source": [ + "# ವರ್ಗೀಕರಣ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "source": [ + "import pandas as pd\n", + "cuisines_df = pd.read_csv(\"../../data/cleaned_cuisines.csv\")\n", + "cuisines_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n", + "from sklearn.svm import SVC\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian\n", + "Name: cuisine, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "cuisines_label_df = cuisines_df['cuisine']\n", + "cuisines_label_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n", + "cuisines_feature_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy is 0.8181818181818182\n" + ] + } + ], + "source": [ + "lr = LogisticRegression(multi_class='ovr',solver='liblinear')\n", + "model = lr.fit(X_train, np.ravel(y_train))\n", + "\n", + "accuracy = model.score(X_test, y_test)\n", + "print (\"Accuracy is {}\".format(accuracy))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "ingredients: Index(['artemisia', 'black_pepper', 'mushroom', 'shiitake', 'soy_sauce',\n 'vegetable_oil'],\n dtype='object')\ncuisine: korean\n" + ] + } + ], + "source": [ + "# test an item\n", + "print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')\n", + "print(f'cuisine: {y_test.iloc[50]}')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " 0\n", + "korean 0.392231\n", + "chinese 0.372872\n", + "japanese 0.218825\n", + "thai 0.013427\n", + "indian 0.002645" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
0
korean0.392231
chinese0.372872
japanese0.218825
thai0.013427
indian0.002645
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "#rehsape to 2d array and transpose\n", + "test= X_test.iloc[50].values.reshape(-1, 1).T\n", + "# predict with score\n", + "proba = model.predict_proba(test)\n", + "classes = model.classes_\n", + "# create df with classes and scores\n", + "resultdf = pd.DataFrame(data=proba, columns=classes)\n", + "\n", + "# create df to show results\n", + "topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])\n", + "topPrediction.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n\n chinese 0.75 0.73 0.74 223\n indian 0.93 0.88 0.90 255\n japanese 0.78 0.78 0.78 253\n korean 0.87 0.86 0.86 236\n thai 0.76 0.84 0.80 232\n\n accuracy 0.82 1199\n macro avg 0.82 0.82 0.82 1199\nweighted avg 0.82 0.82 0.82 1199\n\n" + ] + } + ], + "source": [ + "y_pred = model.predict(X_test)\r\n", + "print(classification_report(y_test,y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "9408506dd864f2b6e334c62f80c0cfcc", + "translation_date": "2025-12-19T17:18:25+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/kn/4-Classification/3-Classifiers-2/README.md b/translations/kn/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 000000000..2913f2a4c --- /dev/null +++ b/translations/kn/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,251 @@ + +# ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 2 + +ಈ ಎರಡನೇ ವರ್ಗೀಕರಣ ಪಾಠದಲ್ಲಿ, ನೀವು ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ ಇನ್ನಷ್ಟು ವಿಧಾನಗಳನ್ನು ಅನ್ವೇಷಿಸುವಿರಿ. ನೀವು ಒಂದು ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಇನ್ನೊಂದರಿಗಿಂತ ಆಯ್ಕೆಮಾಡುವ ಪರಿಣಾಮಗಳ ಬಗ್ಗೆ ಸಹ ತಿಳಿಯುವಿರಿ. + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +### ಪೂರ್ವಾಪೇಕ್ಷೆ + +ನೀವು ಹಿಂದಿನ ಪಾಠಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ ಮತ್ತು ನಿಮ್ಮ `data` ಫೋಲ್ಡರ್‌ನಲ್ಲಿ _cleaned_cuisines.csv_ ಎಂಬ ಸ್ವಚ್ಛಗೊಳಿಸಿದ ಡೇಟಾಸೆಟ್ ಇದೆ ಎಂದು ನಾವು ಊಹಿಸುತ್ತೇವೆ, ಇದು ಈ 4-ಪಾಠ ಫೋಲ್ಡರ್‌ನ ರೂಟ್‌ನಲ್ಲಿ ಇದೆ. + +### ತಯಾರಿ + +ನಾವು ನಿಮ್ಮ _notebook.ipynb_ ಫೈಲ್ ಅನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿದ ಡೇಟಾಸೆಟ್‌ನೊಂದಿಗೆ ಲೋಡ್ ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ಅದನ್ನು X ಮತ್ತು y ಡೇಟಾಫ್ರೇಮ್‌ಗಳಾಗಿ ವಿಭಜಿಸಿದ್ದೇವೆ, ಮಾದರಿ ನಿರ್ಮಾಣ ಪ್ರಕ್ರಿಯೆಗೆ ಸಿದ್ಧವಾಗಿದೆ. + +## ವರ್ಗೀಕರಣ ನಕ್ಷೆ + +ಹಿಂದೆ, ನೀವು ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವಾಗ Microsoft ನ ಚೀಟ್ ಶೀಟ್ ಬಳಸಿ ವಿವಿಧ ಆಯ್ಕೆಗಳ ಬಗ್ಗೆ ಕಲಿತಿದ್ದೀರಿ. Scikit-learn ಒಂದು ಸಮಾನವಾದ, ಆದರೆ ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ಚೀಟ್ ಶೀಟ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ಇದು ನಿಮ್ಮ ಅಂದಾಜುಕಾರರನ್ನು (ಮತ್ತೊಂದು ಪದದಲ್ಲಿ ವರ್ಗೀಕರಣಕಾರರು) ಇನ್ನಷ್ಟು ನಿಖರಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ: + +![ML Map from Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.kn.png) +> ಟಿಪ್: [ಈ ನಕ್ಷೆಯನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಭೇಟಿ ನೀಡಿ](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ಮತ್ತು ದಾರಿಯಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಓದಿ. + +### ಯೋಜನೆ + +ನಿಮ್ಮ ಡೇಟಾ ಸ್ಪಷ್ಟವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಂಡ ನಂತರ ಈ ನಕ್ಷೆ ಬಹಳ ಸಹಾಯಕವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ನೀವು ಅದರ ದಾರಿಗಳಲ್ಲಿ 'ನಡೆದು' ನಿರ್ಧಾರಕ್ಕೆ ಬರಬಹುದು: + +- ನಮಗೆ >50 ಮಾದರಿಗಳು ಇವೆ +- ನಾವು ಒಂದು ವರ್ಗವನ್ನು ಊಹಿಸಲು ಬಯಸುತ್ತೇವೆ +- ನಮಗೆ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾ ಇದೆ +- ನಮಗೆ 100K ಕ್ಕಿಂತ ಕಡಿಮೆ ಮಾದರಿಗಳು ಇವೆ +- ✨ ನಾವು ಲೀನಿಯರ್ SVC ಆಯ್ಕೆಮಾಡಬಹುದು +- ಅದು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ಏಕೆಂದರೆ ನಮಗೆ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ಇದೆ + - ನಾವು ✨ KNeighbors ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು + - ಅದು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ✨ SVC ಮತ್ತು ✨ Ensemble ವರ್ಗೀಕರಣಕಾರಿಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ + +ಇದು ಅನುಸರಿಸಲು ಬಹಳ ಸಹಾಯಕ ದಾರಿಯಾಗಿದೆ. + +## ಅಭ್ಯಾಸ - ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ + +ಈ ದಾರಿಯನ್ನು ಅನುಸರಿಸಿ, ನಾವು ಕೆಲವು ಲೈಬ್ರರಿಗಳನ್ನು ಆಮದುಮಾಡುವುದರಿಂದ ಪ್ರಾರಂಭಿಸಬೇಕು. + +1. ಅಗತ್ಯವಿರುವ ಲೈಬ್ರರಿಗಳನ್ನು ಆಮದುಮಾಡಿ: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. ನಿಮ್ಮ ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## ಲೀನಿಯರ್ SVC ವರ್ಗೀಕರಣಕಾರ + +ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಕ್ಲಸ್ಟರಿಂಗ್ (SVC) ಎಂಬುದು ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಯಂತ್ರಗಳ ಕುಟುಂಬದ ಒಂದು ಭಾಗವಾಗಿದೆ (ಈ ಬಗ್ಗೆ ಕೆಳಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ). ಈ ವಿಧಾನದಲ್ಲಿ, ನೀವು ಲೇಬಲ್‌ಗಳನ್ನು ಹೇಗೆ ಕ್ಲಸ್ಟರ್ ಮಾಡಬೇಕೆಂದು ನಿರ್ಧರಿಸಲು 'ಕರ್ಣಲ್' ಆಯ್ಕೆಮಾಡಬಹುದು. 'C' ಪರಿಮಾಣವು 'ನಿಯಮಿತತೆ'ಗೆ ಸಂಬಂಧಿಸಿದೆ, ಇದು ಪರಿಮಾಣಗಳ ಪ್ರಭಾವವನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ಕರ್ಣಲ್ [ಬಹುಮಾನ](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC)ಗಳಲ್ಲೊಂದು ಆಗಿರಬಹುದು; ಇಲ್ಲಿ ನಾವು ಲೀನಿಯರ್ SVC ಬಳಸಲು 'linear' ಎಂದು ಹೊಂದಿಸಿದ್ದೇವೆ. Probability ಡೀಫಾಲ್ಟ್ 'false' ಆಗಿದೆ; ಇಲ್ಲಿ ನಾವು 'true' ಎಂದು ಹೊಂದಿಸಿದ್ದೇವೆ ಪ್ರಾಬಬಿಲಿಟಿ ಅಂದಾಜುಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು. ಡೇಟಾವನ್ನು ಶಫಲ್ ಮಾಡಲು random state ಅನ್ನು '0' ಎಂದು ಹೊಂದಿಸಿದ್ದೇವೆ. + +### ಅಭ್ಯಾಸ - ಲೀನಿಯರ್ SVC ಅನ್ವಯಿಸಿ + +ವರ್ಗೀಕರಣಕಾರರ ಅರೆ ಅನ್ನು ರಚಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸಿ. ನಾವು ಪರೀಕ್ಷಿಸುವಂತೆ ಈ ಅರೆಗೆ ಕ್ರಮೇಣ ಸೇರಿಸುತ್ತೇವೆ. + +1. ಲೀನಿಯರ್ SVC ನಿಂದ ಪ್ರಾರಂಭಿಸಿ: + + ```python + C = 10 + # ವಿಭಿನ್ನ ವರ್ಗೀಕರಿಸುವವರನ್ನು ರಚಿಸಿ. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. ಲೀನಿಯರ್ SVC ಬಳಸಿ ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ ಮತ್ತು ವರದಿಯನ್ನು ಮುದ್ರಿಸಿ: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + ಫಲಿತಾಂಶ ಚೆನ್ನಾಗಿದೆ: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## K-ನೆರೆಹೊರೆಯವರ ವರ್ಗೀಕರಣಕಾರ + +K-ನೆರೆಹೊರೆಯವರು "ನೆರೆಹೊರೆಯವರು" ಕುಟುಂಬದ ML ವಿಧಾನಗಳ ಭಾಗವಾಗಿದ್ದು, ಮೇಲ್ವಿಚಾರಣೆಯುಳ್ಳ ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆಯಿಲ್ಲದ ಕಲಿಕೆಗೆ ಬಳಸಬಹುದು. ಈ ವಿಧಾನದಲ್ಲಿ, ಪೂರ್ವನಿರ್ಧರಿತ ಸಂಖ್ಯೆಯ ಬಿಂದುಗಳನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಡೇಟಾ ಈ ಬಿಂದುಗಳ ಸುತ್ತ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ, ಇದರಿಂದ ಸಾಮಾನ್ಯ ಲೇಬಲ್‌ಗಳನ್ನು ಊಹಿಸಬಹುದು. + +### ಅಭ್ಯಾಸ - K-ನೆರೆಹೊರೆಯವರ ವರ್ಗೀಕರಣಕಾರ ಅನ್ವಯಿಸಿ + +ಹಿಂದಿನ ವರ್ಗೀಕರಣಕಾರ ಚೆನ್ನಾಗಿತ್ತು ಮತ್ತು ಡೇಟಾದೊಂದಿಗೆ ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡಿತು, ಆದರೆ ನಾವು ಉತ್ತಮ ನಿಖರತೆಯನ್ನು ಪಡೆಯಬಹುದು. K-ನೆರೆಹೊರೆಯವರ ವರ್ಗೀಕರಣಕಾರವನ್ನು ಪ್ರಯತ್ನಿಸಿ. + +1. ನಿಮ್ಮ ವರ್ಗೀಕರಣಕಾರ ಅರೆಗೆ ಒಂದು ಸಾಲು ಸೇರಿಸಿ (ಲೀನಿಯರ್ SVC ಐಟಂನ ನಂತರ ಕಾಮಾ ಸೇರಿಸಿ): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + ಫಲಿತಾಂಶ ಸ್ವಲ್ಪ ಕೆಟ್ಟಿದೆ: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ [K-ನೆರೆಹೊರೆಯವರು](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) ಬಗ್ಗೆ ತಿಳಿಯಿರಿ + +## ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ವರ್ಗೀಕರಣಕಾರ + +ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ವರ್ಗೀಕರಣಕಾರಗಳು [ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಯಂತ್ರ](https://wikipedia.org/wiki/Support-vector_machine) ಕುಟುಂಬದ ಭಾಗವಾಗಿದ್ದು, ವರ್ಗೀಕರಣ ಮತ್ತು ರಿಗ್ರೆಷನ್ ಕಾರ್ಯಗಳಿಗೆ ಬಳಸಲಾಗುತ್ತವೆ. SVM ಗಳು "ತರಬೇತಿ ಉದಾಹರಣೆಗಳನ್ನು ಸ್ಥಳದಲ್ಲಿ ಬಿಂದುಗಳಾಗಿ ನಕ್ಷೆ ಮಾಡುತ್ತವೆ" ಎರಡು ವರ್ಗಗಳ ನಡುವಿನ ದೂರವನ್ನು ಗರಿಷ್ಠಗೊಳಿಸಲು. ನಂತರದ ಡೇಟಾವನ್ನು ಈ ಸ್ಥಳದಲ್ಲಿ ನಕ್ಷೆ ಮಾಡಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಅವುಗಳ ವರ್ಗವನ್ನು ಊಹಿಸಬಹುದು. + +### ಅಭ್ಯಾಸ - ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ವರ್ಗೀಕರಣಕಾರ ಅನ್ವಯಿಸಿ + +ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ವರ್ಗೀಕರಣಕಾರದೊಂದಿಗೆ ಸ್ವಲ್ಪ ಉತ್ತಮ ನಿಖರತೆಯನ್ನು ಪ್ರಯತ್ನಿಸೋಣ. + +1. K-ನೆರೆಹೊರೆಯವರ ಐಟಂನ ನಂತರ ಕಾಮಾ ಸೇರಿಸಿ, ನಂತರ ಈ ಸಾಲನ್ನು ಸೇರಿಸಿ: + + ```python + 'SVC': SVC(), + ``` + + ಫಲಿತಾಂಶ ಬಹಳ ಚೆನ್ನಾಗಿದೆ! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ [ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್‌ಗಳ](https://scikit-learn.org/stable/modules/svm.html#svm) ಬಗ್ಗೆ ತಿಳಿಯಿರಿ + +## ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಕಾರಗಳು + +ಹಿಂದಿನ ಪರೀಕ್ಷೆ ಚೆನ್ನಾಗಿದ್ದರೂ, ನಾವು ದಾರಿಯ ಕೊನೆಯಲ್ಲಿ ಇರುವ ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಕಾರಗಳನ್ನು ಪ್ರಯತ್ನಿಸೋಣ, ವಿಶೇಷವಾಗಿ ರ್ಯಾಂಡಮ್ ಫಾರೆಸ್ಟ್ ಮತ್ತು ಅಡಾಬೂಸ್ಟ್: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +ಫಲಿತಾಂಶ ಬಹಳ ಚೆನ್ನಾಗಿದೆ, ವಿಶೇಷವಾಗಿ ರ್ಯಾಂಡಮ್ ಫಾರೆಸ್ಟ್‌ಗೆ: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ [ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಕಾರಗಳು](https://scikit-learn.org/stable/modules/ensemble.html) ಬಗ್ಗೆ ತಿಳಿಯಿರಿ + +ಈ ಯಂತ್ರ ಕಲಿಕೆಯ ವಿಧಾನವು "ಕೆಲವು ಮೂಲ ಅಂದಾಜುಕಾರರ ಭವಿಷ್ಯವಾಣಿಗಳನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ" ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು ಸುಧಾರಿಸಲು. ನಮ್ಮ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಾವು ರ್ಯಾಂಡಮ್ ಟ್ರೀಸ್ ಮತ್ತು ಅಡಾಬೂಸ್ಟ್ ಬಳಸಿದ್ದೇವೆ. + +- [ರ್ಯಾಂಡಮ್ ಫಾರೆಸ್ಟ್](https://scikit-learn.org/stable/modules/ensemble.html#forest), ಸರಾಸರಿ ವಿಧಾನ, 'ನಿರ್ಣಯ ಮರಗಳ' ಒಂದು 'ಕಾಡನ್ನು' ರಚಿಸುತ್ತದೆ, ಇದು ಅತಿಯಾದ ಹೊಂದಾಣಿಕೆಯನ್ನು ತಪ್ಪಿಸಲು ಯಾದೃಚ್ಛಿಕತೆಯನ್ನು ಒಳಗೊಂಡಿದೆ. n_estimators ಪರಿಮಾಣವನ್ನು ಮರಗಳ ಸಂಖ್ಯೆಗೆ ಹೊಂದಿಸಲಾಗಿದೆ. + +- [ಅಡಾಬೂಸ್ಟ್](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ಒಂದು ವರ್ಗೀಕರಣಕಾರವನ್ನು ಡೇಟಾಸೆಟ್‌ಗೆ ಹೊಂದಿಸುತ್ತದೆ ಮತ್ತು ನಂತರ ಆ ವರ್ಗೀಕರಣಕಾರದ ನಕಲುಗಳನ್ನು ಅದೇ ಡೇಟಾಸೆಟ್‌ಗೆ ಹೊಂದಿಸುತ್ತದೆ. ಇದು ತಪ್ಪಾಗಿ ವರ್ಗೀಕರಿಸಿದ ಐಟಂಗಳ ತೂಕಗಳ ಮೇಲೆ ಗಮನಹರಿಸಿ, ಮುಂದಿನ ವರ್ಗೀಕರಣಕಾರದ ಹೊಂದಾಣಿಕೆಯನ್ನು ಸರಿಪಡಿಸುತ್ತದೆ. + +--- + +## 🚀ಸವಾಲು + +ಈ ತಂತ್ರಗಳ ಪ್ರತಿಯೊಂದಕ್ಕೂ ನೀವು ತಿದ್ದುಪಡಿ ಮಾಡಬಹುದಾದ ಅನೇಕ ಪರಿಮಾಣಗಳಿವೆ. ಪ್ರತಿಯೊಂದರ ಡೀಫಾಲ್ಟ್ ಪರಿಮಾಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ ಮತ್ತು ಈ ಪರಿಮಾಣಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡುವುದು ಮಾದರಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಏನು ಅರ್ಥವಾಗುತ್ತದೆ ಎಂದು ಯೋಚಿಸಿ. + +## [ಪೋಸ್ಟ್-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ & ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಈ ಪಾಠಗಳಲ್ಲಿ ಬಹಳಷ್ಟು ತಾಂತ್ರಿಕ ಪದಗಳಿವೆ, ಆದ್ದರಿಂದ [ಈ ಪಟ್ಟಿ](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) ಯನ್ನು ಪರಿಶೀಲಿಸಲು ಒಂದು ನಿಮಿಷ ತೆಗೆದುಕೊಳ್ಳಿ! + +## ನಿಯೋಜನೆ + +[ಪರಿಮಾಣ ಆಟ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/3-Classifiers-2/assignment.md b/translations/kn/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 000000000..580b666da --- /dev/null +++ b/translations/kn/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,27 @@ + +# ಪ್ಯಾರಾಮೀಟರ್ ಪ್ಲೇ + +## ಸೂಚನೆಗಳು + +ಈ ವರ್ಗೀಕರಣಕಾರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಡೀಫಾಲ್ಟ್ ಆಗಿ ಸೆಟ್ ಆಗಿರುವ ಅನೇಕ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಿವೆ. VS ಕೋಡ್‌ನ ಇಂಟೆಲಿಸೆನ್ಸ್ ನಿಮಗೆ ಅವುಗಳನ್ನು ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡಬಹುದು. ಈ ಪಾಠದಲ್ಲಿ ಒಂದಾದ ML ವರ್ಗೀಕರಣ ತಂತ್ರಗಳನ್ನು ಅಳವಡಿಸಿ ಮತ್ತು ವಿವಿಧ ಪ್ಯಾರಾಮೀಟರ್ ಮೌಲ್ಯಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ ಮಾದರಿಗಳನ್ನು ಮರುಶಿಕ್ಷಣ ಮಾಡಿ. ಕೆಲವು ಬದಲಾವಣೆಗಳು ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು ಏಕೆ ಸಹಾಯ ಮಾಡುತ್ತವೆ ಮತ್ತು ಇತರವು ಅದನ್ನು ಹೇಗೆ ಹಾಳುಮಾಡುತ್ತವೆ ಎಂಬುದನ್ನು ವಿವರಿಸುವ ನೋಟ್ಬುಕ್ ರಚಿಸಿ. ನಿಮ್ಮ ಉತ್ತರದಲ್ಲಿ ವಿವರವಾಗಿ ಬರೆಯಿರಿ. + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆ ಅಗತ್ಯವಿದೆ | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| | ಸಂಪೂರ್ಣವಾಗಿ ನಿರ್ಮಿಸಲಾದ ವರ್ಗೀಕರಣಕಾರಿಯೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಅದರ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ ಬದಲಾವಣೆಗಳನ್ನು ಪಠ್ಯಪೆಟ್ಟಿಕೆಯಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ | ಭಾಗಶಃ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಅಥವಾ ಸರಿಯಾಗಿ ವಿವರಿಸಲಾಗಿಲ್ಲ | ನೋಟ್ಬುಕ್ ದೋಷಪೂರಿತ ಅಥವಾ ದೋಷಪೂರಿತವಾಗಿದೆ | + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/3-Classifiers-2/notebook.ipynb b/translations/kn/4-Classification/3-Classifiers-2/notebook.ipynb new file mode 100644 index 000000000..6ff2bb6e1 --- /dev/null +++ b/translations/kn/4-Classification/3-Classifiers-2/notebook.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ವರ್ಗೀಕರಣ ಮಾದರಿ ನಿರ್ಮಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "import pandas as pd\n", + "cuisines_df = pd.read_csv(\"../data/cleaned_cuisines.csv\")\n", + "cuisines_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian\n", + "Name: cuisine, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "cuisines_label_df = cuisines_df['cuisine']\n", + "cuisines_label_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n", + "cuisines_feature_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "15a83277036572e0773229b5f21c1e12", + "translation_date": "2025-12-19T17:02:55+00:00", + "source_file": "4-Classification/3-Classifiers-2/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/kn/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/kn/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 000000000..45e7bf7c6 --- /dev/null +++ b/translations/kn/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb b/translations/kn/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb new file mode 100644 index 000000000..76377b315 --- /dev/null +++ b/translations/kn/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb @@ -0,0 +1,654 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "lesson_12-R.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "fab50046ca413a38939d579f8432274f", + "translation_date": "2025-12-19T17:17:48+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "jsFutf_ygqSx" + }, + "source": [ + "# ವರ್ಗೀಕರಣ ಮಾದರಿ ನಿರ್ಮಿಸಿ: ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HD54bEefgtNO" + }, + "source": [ + "## ಆಹಾರ ವರ್ಗೀಕರಣಗಳು 2\n", + "\n", + "ಈ ಎರಡನೇ ವರ್ಗೀಕರಣ ಪಾಠದಲ್ಲಿ, ನಾವು ವರ್ಗೀಕೃತ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ `ಹೆಚ್ಚು ವಿಧಾನಗಳನ್ನು` ಅನ್ವೇಷಿಸುವೆವು. ನಾವು ಒಂದು ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ಮತ್ತೊಂದರ ಮೇಲೆ ಆಯ್ಕೆಮಾಡುವ ಪರಿಣಾಮಗಳ ಬಗ್ಗೆ ಸಹ ತಿಳಿಯುವೆವು.\n", + "\n", + "### [**ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n", + "\n", + "### **ಪೂರ್ವಾಪೇಕ್ಷಿತ**\n", + "\n", + "ನಾವು ಹಿಂದಿನ ಪಾಠಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ ಎಂದು ಊಹಿಸುತ್ತೇವೆ ಏಕೆಂದರೆ ನಾವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕಲಿತ ಕೆಲವು ತತ್ವಗಳನ್ನು ಮುಂದುವರಿಸುವೆವು.\n", + "\n", + "ಈ ಪಾಠಕ್ಕಾಗಿ, ನಾವು ಕೆಳಗಿನ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಅಗತ್ಯವಿದೆ:\n", + "\n", + "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) ಒಂದು [R ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidyverse.org/packages) ಆಗಿದ್ದು, ಡೇಟಾ ವಿಜ್ಞಾನವನ್ನು ವೇಗವಾಗಿ, ಸುಲಭವಾಗಿ ಮತ್ತು ಹೆಚ್ಚು ಮನರಂಜನೀಯವಾಗಿ ಮಾಡುತ್ತದೆ!\n", + "\n", + "- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ಫ್ರೇಮ್ವರ್ಕ್ ಒಂದು [ಪ್ಯಾಕೇಜುಗಳ ಸಂಗ್ರಹ](https://www.tidymodels.org/packages/) ಆಗಿದ್ದು, ಮಾದರೀಕರಣ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ.\n", + "\n", + "- `themis`: [themis ಪ್ಯಾಕೇಜ್](https://themis.tidymodels.org/) ಅಸಮತೋಲನ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಲು ಹೆಚ್ಚುವರಿ ರೆಸಿಪಿ ಹಂತಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n", + "\n", + "ಬದಲಾಗಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಮಾಯಾಜಾಲವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜುಗಳಿದ್ದರೆ ಪರಿಶೀಲಿಸಿ, ಅವು ಇಲ್ಲದಿದ್ದರೆ ನಿಮ್ಮಿಗಾಗಿ ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vZ57IuUxgyQt" + }, + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load(tidyverse, tidymodels, themis, kernlab, ranger, xgboost, kknn)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z22M-pj4g07x" + }, + "source": [ + "Now, let's hit the ground running!\n", + "\n", + "## **1. ವರ್ಗೀಕರಣ ನಕ್ಷೆ**\n", + "\n", + "ನಮ್ಮ [ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1), ನಾವು ಈ ಪ್ರಶ್ನೆಯನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸಿದ್ದೇವೆ: ನಾವು ಹಲವಾರು ಮಾದರಿಗಳಲ್ಲಿ ಹೇಗೆ ಆಯ್ಕೆ ಮಾಡಬೇಕು? ಬಹುಮಟ್ಟಿಗೆ, ಇದು ಡೇಟಾದ ಲಕ್ಷಣಗಳು ಮತ್ತು ನಾವು ಪರಿಹರಿಸಲು ಬಯಸುವ ಸಮಸ್ಯೆಯ ಪ್ರಕಾರ (ಉದಾಹರಣೆಗೆ ವರ್ಗೀಕರಣ ಅಥವಾ ರಿಗ್ರೆಶನ್?) ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ.\n", + "\n", + "ಹಿಂದೆ, ನಾವು ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ ಚೀಟ್ ಶೀಟ್ ಬಳಸಿ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವಾಗ ನಿಮಗೆ ಇರುವ ವಿವಿಧ ಆಯ್ಕೆಗಳನ್ನು ಕಲಿತಿದ್ದೇವೆ. ಪೈಥಾನ್‌ನ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಫ್ರೇಮ್ವರ್ಕ್, ಸ್ಕಿಕಿಟ್-ಲರ್ನ್, ಸಮಾನವಾದ ಆದರೆ ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ಚೀಟ್ ಶೀಟ್ ಅನ್ನು ನೀಡುತ್ತದೆ, ಇದು ನಿಮ್ಮ ಅಂದಾಜುಕಾರರನ್ನು (ಮತ್ತೊಂದು ಪದದಲ್ಲಿ ವರ್ಗೀಕರಣಕಾರರು) ಇನ್ನಷ್ಟು ಸೀಮಿತಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು:\n", + "\n", + "

\n", + " \n", + "

\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "u1i3xRIVg7vG" + }, + "source": [ + "> ಟಿಪ್: [ಈ ನಕ್ಷೆಯನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಭೇಟಿ ನೀಡಿ](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ಮತ್ತು ದಾರಿಯಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಓದಿರಿ.\n", + ">\n", + "> [Tidymodels ರೆಫರೆನ್ಸ್ ಸೈಟ್](https://www.tidymodels.org/find/parsnip/#models) ವಿವಿಧ ಮಾದರಿಗಳ ಬಗ್ಗೆ ಅತ್ಯುತ್ತಮ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "### **ಯೋಜನೆ** 🗺️\n", + "\n", + "ನಿಮ್ಮ ಡೇಟಾ ಬಗ್ಗೆ ಸ್ಪಷ್ಟವಾದ ಅರ್ಥವಿದ್ದಾಗ ಈ ನಕ್ಷೆ ಬಹಳ ಸಹಾಯಕವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ನೀವು ನಿರ್ಧಾರಕ್ಕೆ ದಾರಿಯ ಮೇಲೆ 'ನಡೆದಾಡಬಹುದು':\n", + "\n", + "- ನಮಗೆ \\>50 ಮಾದರಿಗಳು ಇವೆ\n", + "\n", + "- ನಾವು ಒಂದು ವರ್ಗವನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಬೇಕಾಗಿದೆ\n", + "\n", + "- ನಮಗೆ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾ ಇದೆ\n", + "\n", + "- ನಮಗೆ 100K ಕ್ಕಿಂತ ಕಡಿಮೆ ಮಾದರಿಗಳು ಇವೆ\n", + "\n", + "- ✨ ನಾವು ಲೀನಿಯರ್ SVC ಆಯ್ಕೆ ಮಾಡಬಹುದು\n", + "\n", + "- ಅದು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ಏಕೆಂದರೆ ನಮಗೆ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ಇದೆ\n", + "\n", + " - ನಾವು ✨ KNeighbors ವರ್ಗೀಕರಣವನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು\n", + "\n", + " - ಅದು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ✨ SVC ಮತ್ತು ✨ ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ\n", + "\n", + "ಇದು ಅನುಸರಿಸಲು ಬಹಳ ಸಹಾಯಕ ದಾರಿಯಾಗಿದೆ. ಈಗ, [tidymodels](https://www.tidymodels.org/) ಮಾದರೀಕರಣ ಫ್ರೇಮ್ವರ್ಕ್ ಬಳಸಿ ನೇರವಾಗಿ ಪ್ರಾರಂಭಿಸೋಣ: ಇದು ಉತ್ತಮ ಸಂಖ್ಯಾಶಾಸ್ತ್ರೀಯ ಅಭ್ಯಾಸವನ್ನು ಉತ್ತೇಜಿಸಲು ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾದ R ಪ್ಯಾಕೇಜುಗಳ ಸತತ ಮತ್ತು ಲವಚಿಕ ಸಂಗ್ರಹ 😊.\n", + "\n", + "## 2. ಡೇಟಾವನ್ನು ವಿಭಜಿಸಿ ಮತ್ತು ಅಸಮತೋಲನ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ನಿರ್ವಹಿಸಿ.\n", + "\n", + "ನಮ್ಮ ಹಿಂದಿನ ಪಾಠಗಳಿಂದ, ನಮ್ಮ ಆಹಾರ ಶೈಲಿಗಳಲ್ಲಿ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳ ಒಂದು ಸೆಟ್ ಇದ್ದವು ಎಂದು ಕಲಿತೆವು. ಜೊತೆಗೆ, ಆಹಾರ ಶೈಲಿಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಅಸಮತೋಲನ ವಿತರಣೆಯೂ ಇತ್ತು.\n", + "\n", + "ನಾವು ಈ ಕೆಳಗಿನ ಮೂಲಕ ಈ ಸಮಸ್ಯೆಗಳನ್ನು ನಿರ್ವಹಿಸುವೆವು\n", + "\n", + "- ವಿಭಿನ್ನ ಆಹಾರ ಶೈಲಿಗಳ ನಡುವೆ ಗೊಂದಲ ಉಂಟುಮಾಡುವ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪದಾರ್ಥಗಳನ್ನು `dplyr::select()` ಬಳಸಿ ತೆಗೆದುಹಾಕುವುದು.\n", + "\n", + "- `over-sampling` ಆಲ್ಗಾರಿದಮ್ ಅನ್ನು ಅನ್ವಯಿಸುವ ಮೂಲಕ ಮಾದರೀಕರಣಕ್ಕೆ ಸಿದ್ಧವಾಗಲು ಡೇಟಾವನ್ನು ಪೂರ್ವಸಿದ್ಧಗೊಳಿಸುವ `recipe` ಅನ್ನು ಬಳಸುವುದು.\n", + "\n", + "ನಾವು ಈ ಮೇಲಿನ ವಿಷಯಗಳನ್ನು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಈಗಾಗಲೇ ನೋಡಿದ್ದೇವೆ ಆದ್ದರಿಂದ ಇದು ಸುಲಭವಾಗಿರುತ್ತದೆ 🥳!\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6tj_rN00hClA" + }, + "source": [ + "# Load the core Tidyverse and Tidymodels packages\n", + "library(tidyverse)\n", + "library(tidymodels)\n", + "\n", + "# Load the original cuisines data\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\n", + "\n", + "# Drop id column, rice, garlic and ginger from our original data set\n", + "df_select <- df %>% \n", + " select(-c(1, rice, garlic, ginger)) %>%\n", + " # Encode cuisine column as categorical\n", + " mutate(cuisine = factor(cuisine))\n", + "\n", + "\n", + "# Create data split specification\n", + "set.seed(2056)\n", + "cuisines_split <- initial_split(data = df_select,\n", + " strata = cuisine,\n", + " prop = 0.7)\n", + "\n", + "# Extract the data in each split\n", + "cuisines_train <- training(cuisines_split)\n", + "cuisines_test <- testing(cuisines_split)\n", + "\n", + "# Display distribution of cuisines in the training set\n", + "cuisines_train %>% \n", + " count(cuisine) %>% \n", + " arrange(desc(n))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zFin5yw3hHb1" + }, + "source": [ + "### ಅಸಮತೋಲಿತ ಡೇಟಾ ನಿರ್ವಹಣೆ\n", + "\n", + "ಅಸಮತೋಲಿತ ಡೇಟಾ ಸಾಮಾನ್ಯವಾಗಿ ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಗಮನಾರ್ಹ ಸಂಖ್ಯೆಯ ವೀಕ್ಷಣೆಗಳು ಸಮಾನವಾಗಿರುವಾಗ ಬಹುತೇಕ ಮಾದರಿಗಳು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಮತ್ತು ಆದ್ದರಿಂದ ಅಸಮತೋಲಿತ ಡೇಟಾ ಜೊತೆ ಹೋರಾಡುತ್ತವೆ.\n", + "\n", + "ಅಸಮತೋಲಿತ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಎರಡು ಪ್ರಮುಖ ವಿಧಾನಗಳಿವೆ:\n", + "\n", + "- ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗಕ್ಕೆ ವೀಕ್ಷಣೆಗಳನ್ನು ಸೇರಿಸುವುದು: `ಓವರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್` ಉದಾಹರಣೆಗೆ SMOTE ಆಲ್ಗಾರಿದಮ್ ಬಳಸಿ, ಇದು ಅಲ್ಪಸಂಖ್ಯಾತ ವರ್ಗದ ಹೊಸ ಉದಾಹರಣೆಗಳನ್ನು ಸಮೀಪದ ನೆರೆಹೊರೆಯವರನ್ನು ಬಳಸಿ ಸೃಷ್ಟಿಸುತ್ತದೆ.\n", + "\n", + "- ಬಹುಸಂಖ್ಯಾತ ವರ್ಗದಿಂದ ವೀಕ್ಷಣೆಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು: `ಅಂಡರ್-ಸ್ಯಾಂಪ್ಲಿಂಗ್`\n", + "\n", + "ನಮ್ಮ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು `ರೆಸಿಪಿ` ಬಳಸಿ ಅಸಮತೋಲಿತ ಡೇಟಾ ಸೆಟ್‌ಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದನ್ನು ತೋರಿಸಿದ್ದೇವೆ. ರೆಸಿಪಿ ಎಂದರೆ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ಸಿದ್ಧವಾಗಲು ಡೇಟಾ ಸೆಟ್‌ಗೆ ಯಾವ ಹಂತಗಳನ್ನು ಅನ್ವಯಿಸಬೇಕು ಎಂದು ವಿವರಿಸುವ ಬ್ಲೂಪ್ರಿಂಟ್ ಎಂದು ಪರಿಗಣಿಸಬಹುದು. ನಮ್ಮ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು ನಮ್ಮ `ಪ್ರಶಿಕ್ಷಣ ಸೆಟ್`ಗಾಗಿ ನಮ್ಮ ಆಹಾರವರ್ಗಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಸಮಾನ ವಿತರಣೆ ಇರಬೇಕೆಂದು ಬಯಸುತ್ತೇವೆ. ಬನ್ನಿ, ಅದಕ್ಕೆ ನೇರವಾಗಿ ಹೋಗೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cRzTnHolhLWd" + }, + "source": [ + "# Load themis package for dealing with imbalanced data\n", + "library(themis)\n", + "\n", + "# Create a recipe for preprocessing training data\n", + "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>%\n", + " step_smote(cuisine) \n", + "\n", + "# Print recipe\n", + "cuisines_recipe" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KxOQ2ORhhO81" + }, + "source": [ + "ಈಗ ನಾವು ಮಾದರಿಗಳನ್ನು ತರಬೇತಿಗೆ ಸಿದ್ಧರಾಗಿದ್ದೇವೆ 👩‍💻👨‍💻!\n", + "\n", + "## 3. ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳಿಗಿಂತ ಮುಂದೆ\n", + "\n", + "ನಮ್ಮ ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು ಬಹುಪದೀಯ ರಿಗ್ರೆಶನ್ ಮಾದರಿಗಳನ್ನು ನೋಡಿದ್ದೇವೆ. ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ಇನ್ನಷ್ಟು ಲವಚಿಕ ಮಾದರಿಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ.\n", + "\n", + "### ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್.\n", + "\n", + "ವರ್ಗೀಕರಣದ ಸಂದರ್ಭದಲ್ಲಿ, `ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್` ಎಂಬುದು ಒಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ತಂತ್ರಜ್ಞಾನವಾಗಿದ್ದು, ವರ್ಗಗಳನ್ನು \"ಉತ್ತಮವಾಗಿ\" ವಿಭಜಿಸುವ *ಹೈಪರ್ಪ್ಲೇನ್* ಅನ್ನು ಹುಡುಕಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಸರಳ ಉದಾಹರಣೆಯನ್ನು ನೋಡೋಣ:\n", + "\n", + "

\n", + " \n", + "

https://commons.wikimedia.org/w/index.php?curid=22877598
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C4Wsd0vZhXYu" + }, + "source": [ + "H1~ ವರ್ಗಗಳನ್ನು ವಿಭಜಿಸುವುದಿಲ್ಲ. H2~ ವಿಭಜಿಸುತ್ತದೆ, ಆದರೆ ಸಣ್ಣ ಮಾರ್ಜಿನ್‌ನೊಂದಿಗೆ ಮಾತ್ರ. H3~ ಅವುಗಳನ್ನು ಗರಿಷ್ಠ ಮಾರ್ಜಿನ್‌ನೊಂದಿಗೆ ವಿಭಜಿಸುತ್ತದೆ.\n", + "\n", + "#### ಲೀನಿಯರ್ ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಕ್ಲಾಸಿಫೈಯರ್\n", + "\n", + "ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಕ್ಲಸ್ಟರಿಂಗ್ (SVC) ಎಂಎಲ್ ತಂತ್ರಜ್ಞಾನಗಳ ಸಪೋರ್ಟ್-ವೆಕ್ಟರ್ ಯಂತ್ರಗಳ ಕುಟುಂಬದ ಒಂದು ಶಾಖೆಯಾಗಿದೆ. SVC ನಲ್ಲಿ, ಹೈಪರ್ಪ್ಲೇನ್ ಅನ್ನು ತರಬೇತಿ ಅವಲೋಕನಗಳ `ಬಹುತೇಕ` ಸರಿಯಾಗಿ ವಿಭಜಿಸಲು ಆಯ್ಕೆಮಾಡಲಾಗುತ್ತದೆ, ಆದರೆ ಕೆಲವು ಅವಲೋಕನಗಳನ್ನು `ತಪ್ಪಾಗಿ ವರ್ಗೀಕರಿಸಬಹುದು`. ಕೆಲವು ಬಿಂದುಗಳನ್ನು ತಪ್ಪು ಬದಿಯಲ್ಲಿ ಇರಲು ಅನುಮತಿಸುವ ಮೂಲಕ, SVM ಔಟ್‌ಲೈಯರ್‌ಗಳಿಗೆ ಹೆಚ್ಚು ಪ್ರತಿರೋಧಕವಾಗುತ್ತದೆ ಮತ್ತು ಹೀಗಾಗಿ ಹೊಸ ಡೇಟಾಗೆ ಉತ್ತಮ ಸಾಮಾನ್ಯೀಕರಣವನ್ನು ನೀಡುತ್ತದೆ. ಈ ಉಲ್ಲಂಘನೆಯನ್ನು ನಿಯಂತ್ರಿಸುವ ಪರಿಮಾಣವನ್ನು `cost` ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಇದರ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ 1 ಆಗಿದೆ (`help(\"svm_poly\")` ನೋಡಿ).\n", + "\n", + "ಪೋಲಿನೋಮಿಯಲ್ SVM ಮಾದರಿಯಲ್ಲಿ `degree = 1` ಅನ್ನು ಹೊಂದಿಸಿ ಲೀನಿಯರ್ SVC ಅನ್ನು ರಚಿಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vJpp6nuChlBz" + }, + "source": [ + "# Make a linear SVC specification\n", + "svc_linear_spec <- svm_poly(degree = 1) %>% \n", + " set_engine(\"kernlab\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle specification and recipe into a worklow\n", + "svc_linear_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(svc_linear_spec)\n", + "\n", + "# Print out workflow\n", + "svc_linear_wf" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rDs8cWNkhoqu" + }, + "source": [ + "ಈಗ ನಾವು ಪೂರ್ವಸಿದ್ಧತೆ ಹಂತಗಳು ಮತ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟೀಕರಣವನ್ನು *ಕಾರ್ಯಪ್ರವಾಹ*ದಲ್ಲಿ ಸೆರೆಹಿಡಿದಿದ್ದೇವೆ, ನಾವು ಲೀನಿಯರ್ SVC ಅನ್ನು ತರಬೇತುಗೊಳಿಸಿ ಫಲಿತಾಂಶಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡಬಹುದು. ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಮಾಪಕಗಳಿಗಾಗಿ, ನಾವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವ ಮೌಲ್ಯಮಾಪಕ ಸೆಟ್ ಅನ್ನು ರಚಿಸೋಣ: `accuracy`, `sensitivity`, `Positive Predicted Value` ಮತ್ತು `F Measure`\n", + "\n", + "> `augment()` ನೀಡಲಾದ ಡೇಟಾಗೆ ಭವಿಷ್ಯವಾಣಿಗಳಿಗಾಗಿ ಕಾಲಮ್(ಗಳು) ಸೇರಿಸುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "81wiqcwuhrnq" + }, + "source": [ + "# Train a linear SVC model\n", + "svc_linear_fit <- svc_linear_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "# Create a metric set\n", + "eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "svc_linear_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0UFQvHf-huo3" + }, + "source": [ + "#### ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷಿನ್\n", + "\n", + "ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷಿನ್ (SVM) ಕ್ಲಾಸ್‌ಗಳ ನಡುವೆ ರೇಖೀಯವಲ್ಲದ ಗಡಿಯನ್ನು ಹೊಂದಿಸಲು ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ವರ್ಗೀಕರಣಕಾರನ ವಿಸ್ತರಣೆ ಆಗಿದೆ. ಮೂಲತಃ, SVMಗಳು ವರ್ಗಗಳ ನಡುವೆ ರೇಖೀಯವಲ್ಲದ ಸಂಬಂಧಗಳಿಗೆ ಹೊಂದಿಕೊಳ್ಳಲು ವೈಶಿಷ್ಟ್ಯ ಸ್ಥಳವನ್ನು ವಿಸ್ತರಿಸಲು *ಕರ್ಣಲ್ ಟ್ರಿಕ್* ಅನ್ನು ಬಳಸುತ್ತವೆ. SVMಗಳು ಬಳಸುವ ಜನಪ್ರಿಯ ಮತ್ತು ಅತ್ಯಂತ ಲವಚಿಕ ಕರ್ಣಲ್ ಫಂಕ್ಷನ್ ಒಂದು *ರೇಡಿಯಲ್ ಬೇಸಿಸ್ ಫಂಕ್ಷನ್.* ನಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ನೋಡೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-KX4S8mzhzmp" + }, + "source": [ + "set.seed(2056)\n", + "\n", + "# Make an RBF SVM specification\n", + "svm_rbf_spec <- svm_rbf() %>% \n", + " set_engine(\"kernlab\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle specification and recipe into a worklow\n", + "svm_rbf_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(svm_rbf_spec)\n", + "\n", + "\n", + "# Train an RBF model\n", + "svm_rbf_fit <- svm_rbf_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "svm_rbf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QBFSa7WSh4HQ" + }, + "source": [ + "ಬಹಳ ಉತ್ತಮ 🤩!\n", + "\n", + "> ✅ ದಯವಿಟ್ಟು ನೋಡಿ:\n", + ">\n", + "> - [*ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್*](https://bradleyboehmke.github.io/HOML/svm.html), R ಜೊತೆಗೆ ಹ್ಯಾಂಡ್ಸ್-ಆನ್ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್\n", + ">\n", + "> - [*ಸಪೋರ್ಟ್ ವೆಕ್ಟರ್ ಮೆಷೀನ್ಸ್*](https://www.statlearning.com/), R ನಲ್ಲಿ ಅನ್ವಯಗಳೊಂದಿಗೆ ಸಾಂಖ್ಯಿಕ ಲರ್ನಿಂಗ್ ಗೆ ಪರಿಚಯ\n", + ">\n", + "> ಮುಂದಿನ ಓದಿಗಾಗಿ.\n", + "\n", + "### ಸಮೀಪದ ನೆರೆಹೊರೆಯ ವರ್ಗೀಕರಣಗಳು\n", + "\n", + "*K*-ಸಮೀಪದ ನೆರೆಹೊರೆಯ (KNN) ಒಂದು ಆಲ್ಗಾರಿದಮ್ ಆಗಿದ್ದು, ಪ್ರತಿಯೊಂದು ಅವಲೋಕನವನ್ನು ಅದರ ಇತರ ಅವಲೋಕನಗಳ *ಸಮಾನತೆ* ಆಧಾರವಾಗಿ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಲಾಗುತ್ತದೆ.\n", + "\n", + "ನಮ್ಮ ಡೇಟಾಗೆ ಒಂದನ್ನು ಹೊಂದಿಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "k4BxxBcdh9Ka" + }, + "source": [ + "# Make a KNN specification\n", + "knn_spec <- nearest_neighbor() %>% \n", + " set_engine(\"kknn\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle recipe and model specification into a workflow\n", + "knn_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(knn_spec)\n", + "\n", + "# Train a boosted tree model\n", + "knn_wf_fit <- knn_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "knn_wf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HaegQseriAcj" + }, + "source": [ + "ಈ ಮಾದರಿ ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲದಂತೆ ಕಾಣುತ್ತಿದೆ. ಬಹುಶಃ ಮಾದರಿಯ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುವುದು (`help(\"nearest_neighbor\")` ನೋಡಿ) ಮಾದರಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಬಹುದು. ಅದನ್ನು ಪ್ರಯತ್ನಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.\n", + "\n", + "> ✅ ದಯವಿಟ್ಟು ನೋಡಿ:\n", + ">\n", + "> - [Hands-on Machine Learning with R](https://bradleyboehmke.github.io/HOML/)\n", + ">\n", + "> - [An Introduction to Statistical Learning with Applications in R](https://www.statlearning.com/)\n", + ">\n", + "> *K*-Nearest Neighbors ವರ್ಗೀಕರಣಗಳ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಲು.\n", + "\n", + "### ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಗಳು\n", + "\n", + "ಎನ್ಸೆಂಬಲ್ ಆಲ್ಗಾರಿದಮ್ಗಳು ಬಹುಮಟ್ಟದ ಮೂಲ ಅಂದಾಜುಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಉತ್ತಮ ಮಾದರಿಯನ್ನು ಉತ್ಪಾದಿಸುತ್ತವೆ, ಅದು ಕೆಳಗಿನ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ:\n", + "\n", + "`bagging`: ಮೂಲ ಮಾದರಿಗಳ ಸಂಗ್ರಹಕ್ಕೆ *ಸರಾಸರಿ ಕಾರ್ಯ* ಅನ್ವಯಿಸುವುದು\n", + "\n", + "`boosting`: ಪರಸ್ಪರ ಆಧಾರಿತ ಮಾದರಿಗಳ ಸರಣಿಯನ್ನು ನಿರ್ಮಿಸುವುದು, ಇದು ಭವಿಷ್ಯವಾಣಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.\n", + "\n", + "ನಾವು ಪ್ರಾರಂಭಿಸೋಣ Random Forest ಮಾದರಿಯನ್ನು ಪ್ರಯತ್ನಿಸುವುದರಿಂದ, ಇದು ನಿರ್ಣಯ ಮರಗಳ ದೊಡ್ಡ ಸಂಗ್ರಹವನ್ನು ನಿರ್ಮಿಸಿ ನಂತರ ಒಟ್ಟಾರೆ ಉತ್ತಮ ಮಾದರಿಗಾಗಿ ಸರಾಸರಿ ಕಾರ್ಯವನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "49DPoVs6iK1M" + }, + "source": [ + "# Make a random forest specification\n", + "rf_spec <- rand_forest() %>% \n", + " set_engine(\"ranger\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle recipe and model specification into a workflow\n", + "rf_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(rf_spec)\n", + "\n", + "# Train a random forest model\n", + "rf_wf_fit <- rf_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "rf_wf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RGVYwC_aiUWc" + }, + "source": [ + "ಚೆನ್ನಾಗಿದೆ 👏!\n", + "\n", + "ನಾವು Boosted Tree ಮಾದರಿಯೊಂದಿಗೆ ಕೂಡ ಪ್ರಯೋಗ ಮಾಡೋಣ.\n", + "\n", + "Boosted Tree ಒಂದು ಎನ್ಸೆಂಬಲ್ ವಿಧಾನವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ, ಇದು ಕ್ರಮವಾಗಿ ನಿರ್ಧಾರ ಮರಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ, ಪ್ರತಿಯೊಂದು ಮರವು ಹಿಂದಿನ ಮರಗಳ ಫಲಿತಾಂಶಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದ್ದು, ದೋಷವನ್ನು ಕ್ರಮೇಣ ಕಡಿಮೆ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಇದು ತಪ್ಪಾಗಿ ವರ್ಗೀಕರಿಸಲಾದ ಐಟಂಗಳ ತೂಕಗಳ ಮೇಲೆ ಗಮನಹರಿಸುತ್ತದೆ ಮತ್ತು ಮುಂದಿನ ವರ್ಗೀಕರಿಸುವವರಿಗಾಗಿ ಹೊಂದಾಣಿಕೆಯನ್ನು ಸರಿಪಡಿಸುತ್ತದೆ.\n", + "\n", + "ಈ ಮಾದರಿಯನ್ನು ಹೊಂದಿಸುವ ವಿವಿಧ ವಿಧಾನಗಳಿವೆ (`help(\"boost_tree\")` ನೋಡಿ). ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಾವು `xgboost` ಎಂಜಿನ್ ಮೂಲಕ Boosted ಮರಗಳನ್ನು ಹೊಂದಿಸುವೆವು.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Py1YWo-micWs" + }, + "source": [ + "# Make a boosted tree specification\n", + "boost_spec <- boost_tree(trees = 200) %>% \n", + " set_engine(\"xgboost\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle recipe and model specification into a workflow\n", + "boost_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(boost_spec)\n", + "\n", + "# Train a boosted tree model\n", + "boost_wf_fit <- boost_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "boost_wf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zNQnbuejigZM" + }, + "source": [ + "> ✅ ದಯವಿಟ್ಟು ನೋಡಿ:\n", + ">\n", + "> - [ಸಾಮಾಜಿಕ ವಿಜ್ಞಾನಿಗಳಿಗಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನ](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n", + ">\n", + "> - [R ಜೊತೆಗೆ ಹ್ಯಾಂಡ್ಸ್-ಆನ್ ಯಂತ್ರ ಅಧ್ಯಯನ](https://bradleyboehmke.github.io/HOML/)\n", + ">\n", + "> - [R ನಲ್ಲಿ ಅನ್ವಯಗಳೊಂದಿಗೆ ಸಾಂಖ್ಯಿಕ ಅಧ್ಯಯನಕ್ಕೆ ಪರಿಚಯ](https://www.statlearning.com/)\n", + ">\n", + "> - - xgboost ಗೆ ಉತ್ತಮ ಪರ್ಯಾಯವಾದ AdaBoost ಮಾದರಿಯನ್ನು ಅನ್ವೇಷಿಸುತ್ತದೆ.\n", + ">\n", + "> ಎನ್ಸೆಂಬಲ್ ವರ್ಗೀಕರಣಗಳ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಯಲು.\n", + "\n", + "## 4. ಹೆಚ್ಚುವರಿ - ಬಹು ಮಾದರಿಗಳನ್ನು ಹೋಲಿಕೆ\n", + "\n", + "ನಾವು ಈ ಪ್ರಯೋಗಶಾಲೆಯಲ್ಲಿ ಸಾಕಷ್ಟು ಮಾದರಿಗಳನ್ನು ಹೊಂದಿಸಿದ್ದೇವೆ 🙌. ವಿಭಿನ್ನ ಪೂರ್ವಸಿದ್ಧತೆಗಳ ಮತ್ತು/ಅಥವಾ ಮಾದರಿ ನಿರ್ದಿಷ್ಟತೆಗಳ ಸೆಟ್‌ಗಳಿಂದ ಅನೇಕ ವರ್ಕ್‌ಫ್ಲೋಗಳನ್ನು ರಚಿಸುವುದು ಮತ್ತು ನಂತರ ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಗಳನ್ನು ಒಂದೊಂದಾಗಿ ಲೆಕ್ಕಹಾಕುವುದು ಕಠಿಣ ಅಥವಾ ಭಾರವಾಗಬಹುದು.\n", + "\n", + "ಪ್ರಶಿಕ್ಷಣ ಸೆಟ್‌ನಲ್ಲಿ ವರ್ಕ್‌ಫ್ಲೋಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸುವ ಮತ್ತು ನಂತರ ಪರೀಕ್ಷಾ ಸೆಟ್ ಆಧಾರಿತ ಕಾರ್ಯಕ್ಷಮತೆ ಮೌಲ್ಯಗಳನ್ನು ಹಿಂತಿರುಗಿಸುವ ಫಂಕ್ಷನ್ ಅನ್ನು ರಚಿಸುವ ಮೂಲಕ ಇದನ್ನು ಪರಿಹರಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ. ನಾವು ಪಟ್ಟಿಯ ಪ್ರತಿಯೊಂದು ಅಂಶಕ್ಕೆ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲು [purrr](https://purrr.tidyverse.org/) ಪ್ಯಾಕೇಜ್‌ನ `map()` ಮತ್ತು `map_dfr()` ಅನ್ನು ಬಳಸುತ್ತೇವೆ.\n", + "\n", + "> [`map()`](https://purrr.tidyverse.org/reference/map.html) ಫಂಕ್ಷನ್‌ಗಳು ಅನೇಕ for ಲೂಪ್ಗಳನ್ನು ಕಡಿಮೆ ಮತ್ತು ಓದಲು ಸುಲಭವಾಗುವ ಕೋಡ್‌ನೊಂದಿಗೆ ಬದಲಾಯಿಸಲು ಅನುಮತಿಸುತ್ತವೆ. [`map()`](https://purrr.tidyverse.org/reference/map.html) ಫಂಕ್ಷನ್‌ಗಳ ಬಗ್ಗೆ ತಿಳಿಯಲು ಅತ್ಯುತ್ತಮ ಸ್ಥಳ R for data science ನಲ್ಲಿ ಇರುವ [ಪುನರಾವೃತ್ತಿ ಅಧ್ಯಾಯ](http://r4ds.had.co.nz/iteration.html).\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Qzb7LyZnimd2" + }, + "source": [ + "set.seed(2056)\n", + "\n", + "# Create a metric set\n", + "eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n", + "\n", + "# Define a function that returns performance metrics\n", + "compare_models <- function(workflow_list, train_set, test_set){\n", + " \n", + " suppressWarnings(\n", + " # Fit each model to the train_set\n", + " map(workflow_list, fit, data = train_set) %>% \n", + " # Make predictions on the test set\n", + " map_dfr(augment, new_data = test_set, .id = \"model\") %>%\n", + " # Select desired columns\n", + " select(model, cuisine, .pred_class) %>% \n", + " # Evaluate model performance\n", + " group_by(model) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class) %>% \n", + " ungroup()\n", + " )\n", + " \n", + "} # End of function" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fwa712sNisDA" + }, + "source": [ + "ನಾವು ನಮ್ಮ ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆದು ಮಾದರಿಗಳ accuracy ಅನ್ನು ಹೋಲಿಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3i4VJOi2iu-a" + }, + "source": [ + "# Make a list of workflows\n", + "workflow_list <- list(\n", + " \"svc\" = svc_linear_wf,\n", + " \"svm\" = svm_rbf_wf,\n", + " \"knn\" = knn_wf,\n", + " \"random_forest\" = rf_wf,\n", + " \"xgboost\" = boost_wf)\n", + "\n", + "# Call the function\n", + "set.seed(2056)\n", + "perf_metrics <- compare_models(workflow_list = workflow_list, train_set = cuisines_train, test_set = cuisines_test)\n", + "\n", + "# Print out performance metrics\n", + "perf_metrics %>% \n", + " group_by(.metric) %>% \n", + " arrange(desc(.estimate)) %>% \n", + " slice_head(n=7)\n", + "\n", + "# Compare accuracy\n", + "perf_metrics %>% \n", + " filter(.metric == \"accuracy\") %>% \n", + " arrange(desc(.estimate))\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KuWK_lEli4nW" + }, + "source": [ + "[**workflowset**](https://workflowsets.tidymodels.org/) ಪ್ಯಾಕೇಜ್ ಬಳಕೆದಾರರಿಗೆ ದೊಡ್ಡ ಸಂಖ್ಯೆಯ ಮಾದರಿಗಳನ್ನು ರಚಿಸಲು ಮತ್ತು ಸುಲಭವಾಗಿ ಹೊಂದಿಸಲು ಅನುಮತಿಸುತ್ತದೆ ಆದರೆ ಇದು ಮುಖ್ಯವಾಗಿ `cross-validation` ಎಂಬ ಪುನರಾವೃತ್ತಿ ತಂತ್ರಗಳನ್ನು ಬಳಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ಇದು ನಾವು ಇನ್ನೂ ಆವರಿಸಬೇಕಾದ ವಿಧಾನವಾಗಿದೆ.\n", + "\n", + "## **🚀ಸವಾಲು**\n", + "\n", + "ಈ ತಂತ್ರಗಳ ಪ್ರತಿಯೊಂದಕ್ಕೂ ನೀವು ಬದಲಾಯಿಸಬಹುದಾದ ಹೆಚ್ಚಿನ ಪರಿಮಾಣಗಳಿವೆ ಉದಾಹರಣೆಗೆ SVM ಗಳಲ್ಲಿ `cost`, KNN ನಲ್ಲಿ `neighbors`, Random Forest ನಲ್ಲಿ `mtry` (ಯಾದೃಚ್ಛಿಕವಾಗಿ ಆಯ್ದ ನಿರೀಕ್ಷಕರು).\n", + "\n", + "ಪ್ರತಿಯೊಂದು ಮಾದರಿಯ ಡೀಫಾಲ್ಟ್ ಪರಿಮಾಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ ಮತ್ತು ಈ ಪರಿಮಾಣಗಳನ್ನು ಬದಲಾಯಿಸುವುದರಿಂದ ಮಾದರಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಏನು ಅರ್ಥವಾಗುತ್ತದೆ ಎಂದು ಯೋಚಿಸಿ.\n", + "\n", + "ನಿರ್ದಿಷ್ಟ ಮಾದರಿ ಮತ್ತು ಅದರ ಪರಿಮಾಣಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ಬಳಸಿ: `help(\"model\")` ಉದಾ: `help(\"rand_forest\")`\n", + "\n", + "> ಪ್ರಾಯೋಗಿಕವಾಗಿ, ನಾವು ಸಾಮಾನ್ಯವಾಗಿ ಈ ಪರಿಮಾಣಗಳ *ಉತ್ತಮ ಮೌಲ್ಯಗಳನ್ನು* ಅಂದಾಜು ಮಾಡುತ್ತೇವೆ `ನಕಲಿ ಡೇಟಾ ಸೆಟ್` ಮೇಲೆ ಅನೇಕ ಮಾದರಿಗಳನ್ನು ತರಬೇತುಗೊಳಿಸಿ ಮತ್ತು ಈ ಎಲ್ಲಾ ಮಾದರಿಗಳು ಎಷ್ಟು ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂದು ಅಳೆಯುವ ಮೂಲಕ. ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು **ಟ್ಯೂನಿಂಗ್** ಎಂದು ಕರೆಯುತ್ತಾರೆ.\n", + "\n", + "### [**ಪಾಠದ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n", + "\n", + "### **ಪುನರಾವಲೋಕನ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ**\n", + "\n", + "ಈ ಪಾಠಗಳಲ್ಲಿ ಬಹಳಷ್ಟು ತಾಂತ್ರಿಕ ಪದಗಳಿವೆ, ಆದ್ದರಿಂದ [ಈ ಪಟ್ಟಿ](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) ಯನ್ನು ಪರಿಶೀಲಿಸಲು ಒಂದು ನಿಮಿಷ ತೆಗೆದುಕೊಳ್ಳಿ!\n", + "\n", + "#### ಧನ್ಯವಾದಗಳು:\n", + "\n", + "[`Allison Horst`](https://twitter.com/allison_horst/) ಅವರಿಗೆ R ಅನ್ನು ಹೆಚ್ಚು ಆತಿಥ್ಯಪೂರ್ಣ ಮತ್ತು ಆಕರ್ಷಕವಾಗಿಸುವ ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ. ಅವಳ [ಗ್ಯಾಲರಿ](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಚಿತ್ರಣಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ.\n", + "\n", + "[Cassie Breviu](https://www.twitter.com/cassieview) ಮತ್ತು [Jen Looper](https://www.twitter.com/jenlooper) ಅವರಿಗೆ ಈ ಮಾಯಾಜಾಲದ ಮೂಲ Python ಆವೃತ್ತಿಯನ್ನು ಸೃಷ್ಟಿಸಿದಕ್ಕಾಗಿ ♥️\n", + "\n", + "ಶುಭ ಕಲಿಕೆ,\n", + "\n", + "[Eric](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/3-Classifiers-2/solution/notebook.ipynb b/translations/kn/4-Classification/3-Classifiers-2/solution/notebook.ipynb new file mode 100644 index 000000000..eb9fbaf25 --- /dev/null +++ b/translations/kn/4-Classification/3-Classifiers-2/solution/notebook.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "source": [ + "# ಇನ್ನಷ್ಟು ವರ್ಗೀಕರಣ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "source": [ + "import pandas as pd\n", + "cuisines_df = pd.read_csv(\"../../data/cleaned_cuisines.csv\")\n", + "cuisines_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian\n", + "Name: cuisine, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "source": [ + "cuisines_label_df = cuisines_df['cuisine']\n", + "cuisines_label_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n", + "cuisines_feature_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ವಿಭಿನ್ನ ವರ್ಗೀಕರಿಸುವವರನ್ನು ಪ್ರಯತ್ನಿಸಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.svm import SVC\n", + "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "C = 10\n", + "# Create different classifiers.\n", + "classifiers = {\n", + " 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0),\n", + " 'KNN classifier': KNeighborsClassifier(C),\n", + " 'SVC': SVC(),\n", + " 'RFST': RandomForestClassifier(n_estimators=100),\n", + " 'ADA': AdaBoostClassifier(n_estimators=100)\n", + " \n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy (train) for Linear SVC: 76.4% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.64 0.66 0.65 242\n", + " indian 0.91 0.86 0.89 236\n", + " japanese 0.72 0.73 0.73 245\n", + " korean 0.83 0.75 0.79 234\n", + " thai 0.75 0.82 0.78 242\n", + "\n", + " accuracy 0.76 1199\n", + " macro avg 0.77 0.76 0.77 1199\n", + "weighted avg 0.77 0.76 0.77 1199\n", + "\n", + "Accuracy (train) for KNN classifier: 70.7% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.65 0.63 0.64 242\n", + " indian 0.84 0.81 0.82 236\n", + " japanese 0.60 0.81 0.69 245\n", + " korean 0.89 0.53 0.67 234\n", + " thai 0.69 0.75 0.72 242\n", + "\n", + " accuracy 0.71 1199\n", + " macro avg 0.73 0.71 0.71 1199\n", + "weighted avg 0.73 0.71 0.71 1199\n", + "\n", + "Accuracy (train) for SVC: 80.1% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.71 0.69 0.70 242\n", + " indian 0.92 0.92 0.92 236\n", + " japanese 0.77 0.78 0.77 245\n", + " korean 0.87 0.77 0.82 234\n", + " thai 0.75 0.86 0.80 242\n", + "\n", + " accuracy 0.80 1199\n", + " macro avg 0.80 0.80 0.80 1199\n", + "weighted avg 0.80 0.80 0.80 1199\n", + "\n", + "Accuracy (train) for RFST: 82.8% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.80 0.75 0.77 242\n", + " indian 0.90 0.91 0.90 236\n", + " japanese 0.82 0.78 0.80 245\n", + " korean 0.85 0.82 0.83 234\n", + " thai 0.78 0.89 0.83 242\n", + "\n", + " accuracy 0.83 1199\n", + " macro avg 0.83 0.83 0.83 1199\n", + "weighted avg 0.83 0.83 0.83 1199\n", + "\n", + "Accuracy (train) for ADA: 71.1% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.60 0.57 0.58 242\n", + " indian 0.87 0.84 0.86 236\n", + " japanese 0.71 0.60 0.65 245\n", + " korean 0.68 0.78 0.72 234\n", + " thai 0.70 0.78 0.74 242\n", + "\n", + " accuracy 0.71 1199\n", + " macro avg 0.71 0.71 0.71 1199\n", + "weighted avg 0.71 0.71 0.71 1199\n", + "\n" + ] + } + ], + "source": [ + "n_classifiers = len(classifiers)\n", + "\n", + "for index, (name, classifier) in enumerate(classifiers.items()):\n", + " classifier.fit(X_train, np.ravel(y_train))\n", + "\n", + " y_pred = classifier.predict(X_test)\n", + " accuracy = accuracy_score(y_test, y_pred)\n", + " print(\"Accuracy (train) for %s: %0.1f%% \" % (name, accuracy * 100))\n", + " print(classification_report(y_test,y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "7ea2b714669c823a596d986ba2d5739f", + "translation_date": "2025-12-19T17:09:17+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/kn/4-Classification/4-Applied/README.md b/translations/kn/4-Classification/4-Applied/README.md new file mode 100644 index 000000000..451dfb13e --- /dev/null +++ b/translations/kn/4-Classification/4-Applied/README.md @@ -0,0 +1,331 @@ + +# ರುಚಿಕರ ಆಹಾರ ಶಿಫಾರಸು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕಲಿತ ಕೆಲವು ತಂತ್ರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವರ್ಗೀಕರಣ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸುವಿರಿ ಮತ್ತು ಈ ಸರಣಿಯಲ್ಲಿ ಬಳಸಲಾದ ರುಚಿಕರ ಆಹಾರ ಡೇಟಾಸೆಟ್‌ನೊಂದಿಗೆ. ಜೊತೆಗೆ, ನೀವು ಉಳಿಸಿದ ಮಾದರಿಯನ್ನು ಬಳಸಲು ಒಂದು ಸಣ್ಣ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು Onnx ನ ವೆಬ್ ರನ್‌ಟೈಮ್ ಅನ್ನು ಉಪಯೋಗಿಸಿ ನಿರ್ಮಿಸುವಿರಿ. + +ಯಂತ್ರ ಅಧ್ಯಯನದ ಅತ್ಯಂತ ಉಪಯುಕ್ತ ಪ್ರಾಯೋಗಿಕ ಬಳಕೆಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ ಶಿಫಾರಸು ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ಮಿಸುವುದು, ಮತ್ತು ನೀವು ಇಂದು ಆ ದಿಕ್ಕಿನಲ್ಲಿ ಮೊದಲ ಹೆಜ್ಜೆ ಇಡಬಹುದು! + +[![ಈ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸುವುದು](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋ ನೋಡಿ: ಜೆನ್ ಲೂಪರ್ ವರ್ಗೀಕೃತ ಆಹಾರ ಡೇಟಾ ಬಳಸಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸುತ್ತಿದ್ದಾರೆ + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು ಕಲಿಯುವಿರಿ: + +- ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ Onnx ಮಾದರಿಯಾಗಿ ಉಳಿಸುವುದು ಹೇಗೆ +- ಮಾದರಿಯನ್ನು ಪರಿಶೀಲಿಸಲು ನೆಟ್ರಾನ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು +- ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಉಪಯೋಗಿಸಿ ನಿರ್ಣಯ ಮಾಡಲು ಹೇಗೆ + +## ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ + +ಅನ್ವಯಿತ ಯಂತ್ರ ಅಧ್ಯಯನ ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ಮಿಸುವುದು ನಿಮ್ಮ ವ್ಯವಹಾರ ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಈ ತಂತ್ರಜ್ಞಾನಗಳನ್ನು ಉಪಯೋಗಿಸುವ ಪ್ರಮುಖ ಭಾಗವಾಗಿದೆ. ನೀವು Onnx ಬಳಸಿ ನಿಮ್ಮ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಮಾದರಿಗಳನ್ನು ಬಳಸಬಹುದು (ಅಗತ್ಯವಿದ್ದರೆ ಆಫ್‌ಲೈನ್ ಸನ್ನಿವೇಶದಲ್ಲಿಯೂ). + +[ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ](../../3-Web-App/1-Web-App/README.md), ನೀವು UFO ದೃಶ್ಯಗಳ ಬಗ್ಗೆ Regression ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ, ಅದನ್ನು "pickle" ಮಾಡಿ Flask ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸಿದ್ದಿರಿ. ಈ ವಾಸ್ತುಶಿಲ್ಪ ತಿಳಿದುಕೊಳ್ಳಲು ಬಹಳ ಉಪಯುಕ್ತವಾದರೂ, ಅದು ಪೂರ್ಣ-ಸ್ಟ್ಯಾಕ್ ಪೈಥಾನ್ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದ್ದು, ನಿಮ್ಮ ಅಗತ್ಯಗಳು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ ಬಳಕೆಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಮೂಲಭೂತ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆಧಾರಿತ ವ್ಯವಸ್ಥೆಯನ್ನು ನಿರ್ಣಯಕ್ಕಾಗಿ ನಿರ್ಮಿಸಬಹುದು. ಆದಾಗ್ಯೂ, ಮೊದಲು ನೀವು ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ Onnx ಗೆ ಪರಿವರ್ತಿಸಬೇಕು. + +## ಅಭ್ಯಾಸ - ವರ್ಗೀಕರಣ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ + +ಮೊದಲು, ನಾವು ಬಳಸಿದ ಸ್ವಚ್ಛಗೊಳಿಸಿದ ಆಹಾರ ಡೇಟಾಸೆಟ್ ಬಳಸಿ ವರ್ಗೀಕರಣ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಿ. + +1. ಉಪಯುಕ್ತ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಆಮದುಮಾಡಿ: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + ನಿಮ್ಮ Scikit-learn ಮಾದರಿಯನ್ನು Onnx ಫಾರ್ಮ್ಯಾಟ್‌ಗೆ ಪರಿವರ್ತಿಸಲು '[skl2onnx](https://onnx.ai/sklearn-onnx/)' ಬೇಕಾಗುತ್ತದೆ. + +1. ನಂತರ, ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಮಾಡಿದಂತೆ `read_csv()` ಬಳಸಿ CSV ಫೈಲ್ ಓದಿ ನಿಮ್ಮ ಡೇಟಾ ಮೇಲೆ ಕೆಲಸ ಮಾಡಿ: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. ಮೊದಲ ಎರಡು ಅನಗತ್ಯ ಕಾಲಮ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಉಳಿದ ಡೇಟಾವನ್ನು 'X' ಎಂದು ಉಳಿಸಿ: + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. ಲೇಬಲ್ಗಳನ್ನು 'y' ಎಂದು ಉಳಿಸಿ: + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### ತರಬೇತಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸಿ + +ನಾವು ಉತ್ತಮ ನಿಖರತೆ ಹೊಂದಿರುವ 'SVC' ಗ್ರಂಥಾಲಯವನ್ನು ಬಳಸುತ್ತೇವೆ. + +1. Scikit-learn ನಿಂದ ಸೂಕ್ತ ಗ್ರಂಥಾಲಯಗಳನ್ನು ಆಮದುಮಾಡಿ: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. ತರಬೇತಿ ಮತ್ತು ಪರೀಕ್ಷಾ ಸೆಟ್‌ಗಳನ್ನು ವಿಭಜಿಸಿ: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಮಾಡಿದಂತೆ SVC ವರ್ಗೀಕರಣ ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. ಈಗ, ನಿಮ್ಮ ಮಾದರಿಯನ್ನು `predict()` ಕರೆಮಾಡಿ ಪರೀಕ್ಷಿಸಿ: + + ```python + y_pred = model.predict(X_test) + ``` + +1. ಮಾದರಿಯ ಗುಣಮಟ್ಟವನ್ನು ಪರಿಶೀಲಿಸಲು ವರ್ಗೀಕರಣ ವರದಿಯನ್ನು ಮುದ್ರಿಸಿ: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + ನಾವು ಹಿಂದಿನಂತೆ ನೋಡಿದಂತೆ, ನಿಖರತೆ ಉತ್ತಮವಾಗಿದೆ: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### ನಿಮ್ಮ ಮಾದರಿಯನ್ನು Onnx ಗೆ ಪರಿವರ್ತಿಸಿ + +ಸರಿಯಾದ ಟೆನ್ಸರ್ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ಪರಿವರ್ತನೆ ಮಾಡುವುದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ 380 ಪದಾರ್ಥಗಳಿವೆ, ಆದ್ದರಿಂದ ನೀವು `FloatTensorType` ನಲ್ಲಿ ಆ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸಬೇಕು: + +1. 380 ಟೆನ್ಸರ್ ಸಂಖ್ಯೆಯನ್ನು ಬಳಸಿ ಪರಿವರ್ತಿಸಿ. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. onx ಅನ್ನು ರಚಿಸಿ ಮತ್ತು **model.onnx** ಫೈಲ್ ಆಗಿ ಉಳಿಸಿ: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > ಗಮನಿಸಿ, ನಿಮ್ಮ ಪರಿವರ್ತನೆ ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ನೀವು [ಆಯ್ಕೆಗಳು](https://onnx.ai/sklearn-onnx/parameterized.html) ಅನ್ನು ಪಾಸ್ ಮಾಡಬಹುದು. ಈ ಪ್ರಕರಣದಲ್ಲಿ, ನಾವು 'nocl' ಅನ್ನು True ಮತ್ತು 'zipmap' ಅನ್ನು False ಆಗಿ ಪಾಸ್ ಮಾಡಿದ್ದೇವೆ. ಇದು ವರ್ಗೀಕರಣ ಮಾದರಿ ಆದ್ದರಿಂದ ZipMap ಅನ್ನು ತೆಗೆದುಹಾಕುವ ಆಯ್ಕೆಯಿದೆ, ಇದು ಡಿಕ್ಷನರಿಗಳ ಪಟ್ಟಿಯನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ (ಅಗತ್ಯವಿಲ್ಲ). `nocl` ಎಂದರೆ ಮಾದರಿಯಲ್ಲಿ ವರ್ಗ ಮಾಹಿತಿ ಸೇರಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಮಾದರಿಯ ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡಲು `nocl` ಅನ್ನು 'True' ಆಗಿ ಸೆಟ್ ಮಾಡಿ. + +ನೋಟ್‌ಬುಕ್ ಅನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ರನ್ ಮಾಡಿದರೆ ಈಗ Onnx ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ ಈ ಫೋಲ್ಡರ್‌ಗೆ ಉಳಿಸುತ್ತದೆ. + +## ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ವೀಕ್ಷಿಸಿ + +Onnx ಮಾದರಿಗಳು Visual Studio ಕೋಡ್‌ನಲ್ಲಿ ಬಹಳ ಸ್ಪಷ್ಟವಾಗಿ ಕಾಣುವುದಿಲ್ಲ, ಆದರೆ ಬಹಳ ಉತ್ತಮ ಉಚಿತ ಸಾಫ್ಟ್‌ವೇರ್ ಇದೆ, ಅನೇಕ ಸಂಶೋಧಕರು ಮಾದರಿಯನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಬಳಸುತ್ತಾರೆ. [Netron](https://github.com/lutzroeder/Netron) ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ನಿಮ್ಮ model.onnx ಫೈಲ್ ತೆರೆಯಿರಿ. ನೀವು ಸರಳ ಮಾದರಿಯನ್ನು, ಅದರ 380 ಇನ್‌ಪುಟ್‌ಗಳು ಮತ್ತು ವರ್ಗೀಕರಣಕಾರಿಯನ್ನು ನೋಡಬಹುದು: + +![Netron visual](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.kn.png) + +Netron ನಿಮ್ಮ ಮಾದರಿಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸಹಾಯಕ ಸಾಧನವಾಗಿದೆ. + +ಈಗ ನೀವು ಈ ಸುಂದರ ಮಾದರಿಯನ್ನು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ. ನಿಮ್ಮ ಫ್ರಿಜ್‌ನಲ್ಲಿ ಉಳಿದಿರುವ ಪದಾರ್ಥಗಳ ಸಂಯೋಜನೆಯನ್ನು ನೋಡಿ ಯಾವ ಆಹಾರವನ್ನು ನಿಮ್ಮ ಮಾದರಿ ಸೂಚಿಸುತ್ತದೆ ಎಂದು ತಿಳಿದುಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುವ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿರ್ಮಿಸೋಣ. + +## ಶಿಫಾರಸು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ + +ನೀವು ನಿಮ್ಮ ಮಾದರಿಯನ್ನು ನೇರವಾಗಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸಬಹುದು. ಈ ವಾಸ್ತುಶಿಲ್ಪವು ಅದನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಮತ್ತು ಅಗತ್ಯವಿದ್ದರೆ ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಕೂಡ ಚಾಲನೆ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ. ನಿಮ್ಮ `model.onnx` ಫೈಲ್ ಉಳಿಸಿದ ಅದೇ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ `index.html` ಫೈಲ್ ರಚಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸಿ. + +1. ಈ _index.html_ ಫೈಲ್‌ನಲ್ಲಿ ಕೆಳಗಿನ ಮಾರ್ಕ್‌ಅಪ್ ಸೇರಿಸಿ: + + ```html + + +
+ Cuisine Matcher +
+ + ... + + + ``` + +1. ಈಗ, `body` ಟ್ಯಾಗ್‌ಗಳ ಒಳಗೆ, ಕೆಲವು ಪದಾರ್ಥಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವ ಚೆಕ್‌ಬಾಕ್ಸ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಲು ಸ್ವಲ್ಪ ಮಾರ್ಕ್‌ಅಪ್ ಸೇರಿಸಿ: + + ```html +

Check your refrigerator. What can you create?

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ ``` + + ಪ್ರತಿ ಚೆಕ್‌ಬಾಕ್ಸ್‌ಗೆ ಒಂದು ಮೌಲ್ಯ ನೀಡಲಾಗಿದೆ. ಇದು ಡೇಟಾಸೆಟ್ ಪ್ರಕಾರ ಪದಾರ್ಥವು ಕಂಡುಬರುವ ಸೂಚ್ಯಂಕವನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಆಪಲ್ ಈ ಅಕ್ಷರಮಾಲೆಯ ಪಟ್ಟಿಯಲ್ಲಿ ಐದನೇ ಕಾಲಮ್‌ನಲ್ಲಿ ಇದೆ, ಆದ್ದರಿಂದ ಅದರ ಮೌಲ್ಯ '4' ಆಗಿದೆ ಏಕೆಂದರೆ ನಾವು 0 ರಿಂದ ಎಣಿಕೆ ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ. ನೀವು [ಪದಾರ್ಥಗಳ ಸ್ಪ್ರೆಡ್ಶೀಟ್](../../../../4-Classification/data/ingredient_indexes.csv) ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಯಾವುದೇ ಪದಾರ್ಥದ ಸೂಚ್ಯಂಕವನ್ನು ಕಂಡುಹಿಡಿಯಬಹುದು. + + index.html ಫೈಲ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಕೆಲಸವನ್ನು ಮುಂದುವರೆಸಿ, ಕೊನೆಯ `` ನಂತರ ಮಾದರಿಯನ್ನು ಕರೆಮಾಡುವ ಸ್ಕ್ರಿಪ್ಟ್ ಬ್ಲಾಕ್ ಸೇರಿಸಿ. + +1. ಮೊದಲು, [Onnx Runtime](https://www.onnxruntime.ai/) ಅನ್ನು ಆಮದುಮಾಡಿ: + + ```html + + ``` + + > Onnx Runtime ಅನ್ನು ನಿಮ್ಮ Onnx ಮಾದರಿಗಳನ್ನು ವಿವಿಧ ಹಾರ್ಡ್‌ವೇರ್ ವೇದಿಕೆಗಳಲ್ಲಿ ಚಾಲನೆ ಮಾಡಲು ಬಳಸಲಾಗುತ್ತದೆ, ಇದರಲ್ಲಿ ಆಪ್ಟಿಮೈಜೆಷನ್‌ಗಳು ಮತ್ತು API ಸಹ ಇದೆ. + +1. ರನ್‌ಟೈಮ್ ಸಿದ್ಧವಾದ ಮೇಲೆ, ನೀವು ಅದನ್ನು ಕರೆಮಾಡಬಹುದು: + + ```html + + ``` + +ಈ ಕೋಡ್‌ನಲ್ಲಿ ಹಲವಾರು ಕಾರ್ಯಗಳು ನಡೆಯುತ್ತವೆ: + +1. 380 ಸಾಧ್ಯ ಮೌಲ್ಯಗಳ (1 ಅಥವಾ 0) ಅರೆ ರಚಿಸಲಾಗಿದೆ, ಇದು ಮಾದರಿಗಾಗಿ ನಿರ್ಣಯಕ್ಕೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ, ಪದಾರ್ಥ ಚೆಕ್‌ಬಾಕ್ಸ್ ಪರಿಶೀಲಿತವೋ ಇಲ್ಲವೋ ಅವಲಂಬಿಸಿ. +2. ಚೆಕ್‌ಬಾಕ್ಸ್‌ಗಳ ಅರೆ ಮತ್ತು ಅವು ಪರಿಶೀಲಿತವೋ ಇಲ್ಲವೋ ತಿಳಿಯಲು `init` ಫಂಕ್ಷನ್ ರಚಿಸಲಾಗಿದೆ, ಇದು ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭವಾದಾಗ ಕರೆಮಾಡಲಾಗುತ್ತದೆ. ಚೆಕ್‌ಬಾಕ್ಸ್ ಪರಿಶೀಲಿತವಾಗಿದ್ದರೆ, `ingredients` ಅರೆ ಆಯ್ಕೆಮಾಡಿದ ಪದಾರ್ಥವನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ. +3. `testCheckboxes` ಫಂಕ್ಷನ್ ರಚಿಸಲಾಗಿದೆ, ಇದು ಯಾವುದೇ ಚೆಕ್‌ಬಾಕ್ಸ್ ಪರಿಶೀಲಿತವೋ ಇಲ್ಲವೋ ಪರಿಶೀಲಿಸುತ್ತದೆ. +4. ಬಟನ್ ಒತ್ತಿದಾಗ `startInference` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಮತ್ತು ಯಾವುದೇ ಚೆಕ್‌ಬಾಕ್ಸ್ ಪರಿಶೀಲಿತವಿದ್ದರೆ ನಿರ್ಣಯ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. +5. ನಿರ್ಣಯ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ: + 1. ಮಾದರಿಯನ್ನು ಅಸಿಂಕ್ರೋನಸ್ ಲೋಡ್ ಮಾಡುವುದು + 2. ಮಾದರಿಗೆ ಕಳುಹಿಸಲು ಟೆನ್ಸರ್ ರಚಿಸುವುದು + 3. ನೀವು ತರಬೇತುಗೊಂಡಾಗ ರಚಿಸಿದ `float_input` ಇನ್‌ಪುಟ್ ಅನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವ 'ಫೀಡ್ಸ್' ರಚಿಸುವುದು (ನೀವು ನೆಟ್ರಾನ್ ಬಳಸಿ ಆ ಹೆಸರು ಪರಿಶೀಲಿಸಬಹುದು) + 4. ಈ 'ಫೀಡ್ಸ್' ಅನ್ನು ಮಾದರಿಗೆ ಕಳುಹಿಸಿ ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ಕಾಯುವುದು + +## ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಪರೀಕ್ಷಿಸಿ + +Visual Studio Code ನಲ್ಲಿ ನಿಮ್ಮ index.html ಫೈಲ್ ಇರುವ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಟರ್ಮಿನಲ್ ಸೆಷನ್ ತೆರೆಯಿರಿ. ನೀವು [http-server](https://www.npmjs.com/package/http-server) ಅನ್ನು ಜಾಗತಿಕವಾಗಿ ಸ್ಥಾಪಿಸಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿ, ಮತ್ತು ಪ್ರಾಂಪ್ಟ್‌ನಲ್ಲಿ `http-server` ಟೈಪ್ ಮಾಡಿ. ಒಂದು ಲೋಕಲ್‌ಹೋಸ್ಟ್ ತೆರೆಯುತ್ತದೆ ಮತ್ತು ನೀವು ನಿಮ್ಮ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನೋಡಬಹುದು. ವಿವಿಧ ಪದಾರ್ಥಗಳ ಆಧಾರದ ಮೇಲೆ ಯಾವ ಆಹಾರ ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ ಎಂದು ಪರಿಶೀಲಿಸಿ: + +![ingredient web app](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.kn.png) + +ಅಭಿನಂದನೆಗಳು, ನೀವು ಕೆಲವು ಕ್ಷೇತ್ರಗಳೊಂದಿಗೆ 'ಶಿಫಾರಸು' ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿರ್ಮಿಸಿದ್ದೀರಿ. ಈ ವ್ಯವಸ್ಥೆಯನ್ನು ವಿಸ್ತರಿಸಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಿ! + +## 🚀ಸವಾಲು + +ನಿಮ್ಮ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಬಹಳ ಸಣ್ಣದಾಗಿದೆ, ಆದ್ದರಿಂದ [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) ಡೇಟಾದಿಂದ ಪದಾರ್ಥಗಳು ಮತ್ತು ಅವುಗಳ ಸೂಚ್ಯಂಕಗಳನ್ನು ಬಳಸಿ ಅದನ್ನು ವಿಸ್ತರಿಸಿ. ಯಾವ ರುಚಿ ಸಂಯೋಜನೆಗಳು ನಿರ್ದಿಷ್ಟ ರಾಷ್ಟ್ರೀಯ ಆಹಾರವನ್ನು ಸೃಷ್ಟಿಸಲು ಕೆಲಸ ಮಾಡುತ್ತವೆ? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಈ ಪಾಠವು ಆಹಾರ ಪದಾರ್ಥಗಳಿಗಾಗಿ ಶಿಫಾರಸು ವ್ಯವಸ್ಥೆಯನ್ನು ನಿರ್ಮಿಸುವ ಉಪಯುಕ್ತತೆಯನ್ನು ಸ್ಪರ್ಶಿಸಿದರೂ, ಯಂತ್ರ ಅಧ್ಯಯನ ಅನ್ವಯಿಕೆಗಳಲ್ಲಿ ಈ ಕ್ಷೇತ್ರವು ಉದಾಹರಣೆಗಳಿಂದ ತುಂಬಿದೆ. ಈ ವ್ಯವಸ್ಥೆಗಳು ಹೇಗೆ ನಿರ್ಮಿಸಲಾಗುತ್ತವೆ ಎಂಬುದರ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಓದಿ: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## ನಿಯೋಜನೆ + +[ಹೊಸ ಶಿಫಾರಸುಕಾರರನ್ನು ನಿರ್ಮಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/4-Applied/assignment.md b/translations/kn/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..1fc57d857 --- /dev/null +++ b/translations/kn/4-Classification/4-Applied/assignment.md @@ -0,0 +1,27 @@ + +# ಶಿಫಾರಸುಕಾರರನ್ನು ನಿರ್ಮಿಸಿ + +## ಸೂಚನೆಗಳು + +ಈ ಪಾಠದಲ್ಲಿ ನಿಮ್ಮ ವ್ಯಾಯಾಮಗಳನ್ನು ನೀಡಿದಂತೆ, ನೀವು ಈಗ Onnx Runtime ಮತ್ತು ಪರಿವರ್ತಿತ Onnx ಮಾದರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆಧಾರಿತ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸುವುದು ಎಂದು ತಿಳಿದಿದ್ದೀರಿ. ಈ ಪಾಠಗಳಿಂದ ಅಥವಾ ಬೇರೆಡೆಗಳಿಂದ ಪಡೆದ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ಹೊಸ ಶಿಫಾರಸುಕಾರರನ್ನು ನಿರ್ಮಿಸುವ ಪ್ರಯೋಗ ಮಾಡಿ (ದಯವಿಟ್ಟು ಕ್ರೆಡಿಟ್ ನೀಡಿ). ನೀವು ವಿವಿಧ ವ್ಯಕ್ತಿತ್ವ ಲಕ್ಷಣಗಳನ್ನು ಆಧರಿಸಿ ಪೆಟ್ ಶಿಫಾರಸುಕಾರರನ್ನು ಅಥವಾ ವ್ಯಕ್ತಿಯ ಮನೋಭಾವವನ್ನು ಆಧರಿಸಿ ಸಂಗೀತ ಶೈಲಿ ಶಿಫಾರಸುಕಾರರನ್ನು ರಚಿಸಬಹುದು. ಸೃಜನಶೀಲವಾಗಿರಿ! + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | ಒಂದು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಮತ್ತು ನೋಟ್‌ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ, ಎರಡೂ ಚೆನ್ನಾಗಿ ದಾಖಲೆ ಮಾಡಲ್ಪಟ್ಟಿದ್ದು ಮತ್ತು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿವೆ | ಅವುಗಳಲ್ಲಿ ಒಂದೇ ಇಲ್ಲ ಅಥವಾ ದೋಷಪೂರಿತವಾಗಿದೆ | ಎರಡೂ ಇಲ್ಲ ಅಥವಾ ದೋಷಪೂರಿತವಾಗಿವೆ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/4-Classification/4-Applied/notebook.ipynb b/translations/kn/4-Classification/4-Applied/notebook.ipynb new file mode 100644 index 000000000..91ca1bac8 --- /dev/null +++ b/translations/kn/4-Classification/4-Applied/notebook.ipynb @@ -0,0 +1,41 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 4, + "coopTranslator": { + "original_hash": "2f3e0d9e9ac5c301558fb8bf733ac0cb", + "translation_date": "2025-12-19T17:03:11+00:00", + "source_file": "4-Classification/4-Applied/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ಆಹಾರ ಶಿಫಾರಸು ಮಾಡುವ ವ್ಯವಸ್ಥೆ ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/4-Applied/solution/notebook.ipynb b/translations/kn/4-Classification/4-Applied/solution/notebook.ipynb new file mode 100644 index 000000000..88ea046b3 --- /dev/null +++ b/translations/kn/4-Classification/4-Applied/solution/notebook.ipynb @@ -0,0 +1,292 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "49325d6dd12a3628fc64fa7ccb1a80ff", + "translation_date": "2025-12-19T17:18:05+00:00", + "source_file": "4-Classification/4-Applied/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ಆಹಾರ ಶಿಫಾರಸು ಮಾಡುವ ವ್ಯವಸ್ಥೆ ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: skl2onnx in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (1.8.0)\n", + "Requirement already satisfied: protobuf in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (3.8.0)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.19.2)\n", + "Requirement already satisfied: onnx>=1.2.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.9.0)\n", + "Requirement already satisfied: six in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from skl2onnx) (1.12.0)\n", + "Requirement already satisfied: onnxconverter-common<1.9,>=1.6.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.8.1)\n", + "Requirement already satisfied: scikit-learn>=0.19 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (0.24.2)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.4.1)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from protobuf->skl2onnx) (45.1.0)\n", + "Requirement already satisfied: typing-extensions>=3.6.2.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from onnx>=1.2.1->skl2onnx) (3.10.0.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.19->skl2onnx) (2.1.0)\n", + "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.19->skl2onnx) (0.16.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "!pip install skl2onnx" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd \n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 60 + } + ], + "source": [ + "data = pd.read_csv('../../data/cleaned_cuisines.csv')\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 61 + } + ], + "source": [ + "X = data.iloc[:,2:]\n", + "X.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " cuisine\n", + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
cuisine
0indian
1indian
2indian
3indian
4indian
\n
" + }, + "metadata": {}, + "execution_count": 62 + } + ], + "source": [ + "y = data[['cuisine']]\n", + "y.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.svm import SVC\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "SVC(C=10, kernel='linear', probability=True, random_state=0)" + ] + }, + "metadata": {}, + "execution_count": 65 + } + ], + "source": [ + "model = SVC(kernel='linear', C=10, probability=True,random_state=0)\n", + "model.fit(X_train,y_train.values.ravel())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = model.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n\n chinese 0.72 0.70 0.71 236\n indian 0.91 0.88 0.89 243\n japanese 0.80 0.75 0.77 240\n korean 0.80 0.81 0.81 230\n thai 0.76 0.85 0.80 250\n\n accuracy 0.80 1199\n macro avg 0.80 0.80 0.80 1199\nweighted avg 0.80 0.80 0.80 1199\n\n" + ] + } + ], + "source": [ + "print(classification_report(y_test,y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "from skl2onnx import convert_sklearn\n", + "from skl2onnx.common.data_types import FloatTensorType\n", + "\n", + "initial_type = [('float_input', FloatTensorType([None, 380]))]\n", + "options = {id(model): {'nocl': True, 'zipmap': False}}\n", + "onx = convert_sklearn(model, initial_types=initial_type, options=options)\n", + "with open(\"./model.onnx\", \"wb\") as f:\n", + " f.write(onx.SerializeToString())\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/4-Classification/README.md b/translations/kn/4-Classification/README.md new file mode 100644 index 000000000..1315767c7 --- /dev/null +++ b/translations/kn/4-Classification/README.md @@ -0,0 +1,43 @@ + +# ವರ್ಗೀಕರಣದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುವುದು + +## ಪ್ರಾದೇಶಿಕ ವಿಷಯ: ರುಚಿಕರ ಏಷ್ಯನ್ ಮತ್ತು ಭಾರತೀಯ ಆಹಾರಗಳು 🍜 + +ಏಷ್ಯಾ ಮತ್ತು ಭಾರತದಲ್ಲಿ, ಆಹಾರ ಪರಂಪರೆಗಳು ಅತ್ಯಂತ ವೈವಿಧ್ಯಮಯವಾಗಿವೆ ಮತ್ತು ತುಂಬಾ ರುಚಿಕರವಾಗಿವೆ! ಅವರ ಪದಾರ್ಥಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಪ್ರಾದೇಶಿಕ ಆಹಾರಗಳ ಬಗ್ಗೆ ಡೇಟಾವನ್ನು ನೋಡೋಣ. + +![ಥಾಯ್ ಆಹಾರ ಮಾರಾಟಗಾರ](../../../translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.kn.jpg) +> ಫೋಟೋ ಲಿಶೆಂಗ್ ಚಾಂಗ್ ಅವರಿಂದ ಅನ್ಸ್ಪ್ಲ್ಯಾಶ್ ನಲ್ಲಿ + +## ನೀವು ಏನು ಕಲಿಯುತ್ತೀರಿ + +ಈ ವಿಭಾಗದಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಹಿಂದಿನ ರಿಗ್ರೆಶನ್ ಅಧ್ಯಯನದ ಮೇಲೆ ನಿರ್ಮಿಸಿ, ಡೇಟಾವನ್ನು ಉತ್ತಮವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಬಳಸಬಹುದಾದ ಇತರ ವರ್ಗೀಕರಣಗಳನ್ನು ತಿಳಿಯುತ್ತೀರಿ. + +> ವರ್ಗೀಕರಣ ಮಾದರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದನ್ನು ಕಲಿಯಲು ಸಹಾಯ ಮಾಡುವ ಉಪಯುಕ್ತ ಕಡಿಮೆ-ಕೋಡ್ ಸಾಧನಗಳಿವೆ. ಈ ಕಾರ್ಯಕ್ಕಾಗಿ [Azure ML ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## ಪಾಠಗಳು + +1. [ವರ್ಗೀಕರಣಕ್ಕೆ ಪರಿಚಯ](1-Introduction/README.md) +2. [ಹೆಚ್ಚಿನ ವರ್ಗೀಕರಣಗಳು](2-Classifiers-1/README.md) +3. [ಇನ್ನಷ್ಟು ವರ್ಗೀಕರಣಗಳು](3-Classifiers-2/README.md) +4. [ಅನ್ವಯಿಸಿದ ಎಂಎಲ್: ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಮಿಸಿ](4-Applied/README.md) + +## ಕ್ರೆಡಿಟ್ಸ್ + +"ವರ್ಗೀಕರಣದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುವುದು" ಅನ್ನು ♥️ ಸಹಿತ [ಕ್ಯಾಸಿ ಬ್ರೇವಿಯು](https://www.twitter.com/cassiebreviu) ಮತ್ತು [ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ರವರು ಬರೆಯಲಾಗಿದೆ + +ರುಚಿಕರ ಆಹಾರಗಳ ಡೇಟಾಸೆಟ್ ಅನ್ನು [ಕಾಗಲ್](https://www.kaggle.com/hoandan/asian-and-indian-cuisines) ನಿಂದ ಪಡೆದಿದೆ. + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/1-Visualize/README.md b/translations/kn/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..226f07474 --- /dev/null +++ b/translations/kn/5-Clustering/1-Visualize/README.md @@ -0,0 +1,349 @@ + +# ಕ್ಲಸ್ಟರಿಂಗ್ ಪರಿಚಯ + +ಕ್ಲಸ್ಟರಿಂಗ್ ಒಂದು ರೀತಿಯ [ಅನಿಯಂತ್ರಿತ ಕಲಿಕೆ](https://wikipedia.org/wiki/Unsupervised_learning) ಆಗಿದ್ದು, ಅದು ಡೇಟಾಸೆಟ್ ಲೇಬಲ್ ಮಾಡದಿರುವುದು ಅಥವಾ ಅದರ ಇನ್‌ಪುಟ್‌ಗಳು ಪೂರ್ವನಿರ್ಧರಿತ ಔಟ್‌ಪುಟ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆ ಮಾಡದಿರುವುದಾಗಿ ಊಹಿಸುತ್ತದೆ. ಇದು ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾದ ಮೂಲಕ ವಿವಿಧ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಡೇಟಾದಲ್ಲಿನ ಮಾದರಿಗಳನ್ನು ಗುರುತಿಸಿ ಗುಂಪುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. + +[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋವನ್ನು ನೋಡಿ. ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್‌ನೊಂದಿಗೆ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಅಧ್ಯಯನ ಮಾಡುತ್ತಿರುವಾಗ, ಕೆಲವು ನೈಜೀರಿಯನ್ ಡ್ಯಾನ್ಸ್ ಹಾಲ್ ಟ್ರ್ಯಾಕ್‌ಗಳನ್ನು ಆನಂದಿಸಿ - ಇದು 2014 ರಲ್ಲಿ PSquare ಅವರಿಂದ ಅತ್ಯಂತ ಶ್ರೇಯಾಂಕಿತ ಹಾಡಾಗಿದೆ. + +## [ಪೂರ್ವ-ಲೇಕ್ಚರ್ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +### ಪರಿಚಯ + +[ಕ್ಲಸ್ಟರಿಂಗ್](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ಡೇಟಾ ಅನ್ವೇಷಣೆಗೆ ಬಹಳ ಉಪಯುಕ್ತವಾಗಿದೆ. ನೈಜೀರಿಯನ್ ಪ್ರೇಕ್ಷಕರು ಸಂಗೀತವನ್ನು ಹೇಗೆ ಉಪಯೋಗಿಸುತ್ತಾರೆ ಎಂಬುದರಲ್ಲಿ ಟ್ರೆಂಡ್ಸ್ ಮತ್ತು ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಇದು ಸಹಾಯ ಮಾಡಬಹುದೇ ಎಂದು ನೋಡೋಣ. + +✅ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಉಪಯೋಗಗಳನ್ನು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ. ನಿಜ ಜೀವನದಲ್ಲಿ, ನೀವು ಬಟ್ಟೆಗಳನ್ನು ಗುಂಪುಮಾಡಬೇಕಾದಾಗ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಗುತ್ತದೆ 🧦👕👖🩲. ಡೇಟಾ ಸೈನ್ಸ್‌ನಲ್ಲಿ, ಬಳಕೆದಾರರ ಇಚ್ಛೆಗಳ ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಅಥವಾ ಯಾವುದೇ ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾಸೆಟ್‌ನ ಲಕ್ಷಣಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಗುತ್ತದೆ. ಕ್ಲಸ್ಟರಿಂಗ್, ಒಂದು ರೀತಿಯಲ್ಲಿ, ಗೊಂದಲವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಹೀಗಾಗಿ ಅದು ಒಂದು ಸಾಕ್ ಡ್ರಾಯರ್‌ನಂತೆ. + +[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") + +> 🎥 ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ ವೀಡಿಯೋವನ್ನು ನೋಡಿ: MIT ನ John Guttag ಕ್ಲಸ್ಟರಿಂಗ್ ಪರಿಚಯಿಸುತ್ತಾರೆ + +ವೃತ್ತಿಪರ ಪರಿಸರದಲ್ಲಿ, ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಮಾರುಕಟ್ಟೆ ವಿಭಾಗೀಕರಣ, ಯಾವ ವಯಸ್ಸಿನ ಗುಂಪು ಯಾವ ವಸ್ತುಗಳನ್ನು ಖರೀದಿಸುತ್ತಾರೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಬಳಸಬಹುದು. ಮತ್ತೊಂದು ಉಪಯೋಗವು ಅನಾಮಲಿಯ ಪತ್ತೆ, ಉದಾಹರಣೆಗೆ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ವ್ಯವಹಾರಗಳ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಮೋಸವನ್ನು ಪತ್ತೆಹಚ್ಚಲು. ಅಥವಾ ವೈದ್ಯಕೀಯ ಸ್ಕ್ಯಾನ್‌ಗಳ ಬ್ಯಾಚ್‌ನಲ್ಲಿ ಟ್ಯೂಮರ್‌ಗಳನ್ನು ಗುರುತಿಸಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಬಳಸಬಹುದು. + +✅ ಬ್ಯಾಂಕಿಂಗ್, ಇ-ಕಾಮರ್ಸ್ ಅಥವಾ ವ್ಯವಹಾರ ಪರಿಸರದಲ್ಲಿ ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು 'ವೈಲ್ಡ್' ನಲ್ಲಿ ಹೇಗೆ ಎದುರಿಸಿದ್ದೀರೋ ಎಂದು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ. + +> 🎓 ಆಸಕ್ತಿದಾಯಕವಾಗಿ, ಕ್ಲಸ್ಟರ್ ವಿಶ್ಲೇಷಣೆ 1930ರ ದಶಕದಲ್ಲಿ ಮಾನವಶಾಸ್ತ್ರ ಮತ್ತು ಮನೋವಿಜ್ಞಾನ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಹುಟ್ಟಿಕೊಂಡಿತು. ನೀವು ಅದನ್ನು ಹೇಗೆ ಬಳಸಲಾಗುತ್ತಿತ್ತು ಎಂದು ಊಹಿಸಬಹುದೇ? + +ಬದಲಿ, ನೀವು ಶಾಪಿಂಗ್ ಲಿಂಕ್‌ಗಳು, ಚಿತ್ರಗಳು ಅಥವಾ ವಿಮರ್ಶೆಗಳ ಮೂಲಕ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳನ್ನು ಗುಂಪುಮಾಡಲು ಇದನ್ನು ಬಳಸಬಹುದು. ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಅದರಲ್ಲಿ ಹೆಚ್ಚು ಸೂಕ್ಷ್ಮ ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಉಪಯುಕ್ತವಾಗಿದೆ, ಆದ್ದರಿಂದ ಈ ತಂತ್ರವನ್ನು ಇತರ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವ ಮೊದಲು ಡೇಟಾ ಬಗ್ಗೆ ತಿಳಿಯಲು ಬಳಸಬಹುದು. + +✅ ನಿಮ್ಮ ಡೇಟಾ ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿ ಸಂಘಟಿತವಾದ ನಂತರ, ನೀವು ಅದಕ್ಕೆ ಕ್ಲಸ್ಟರ್ ಐಡಿ ನೀಡುತ್ತೀರಿ, ಮತ್ತು ಈ ತಂತ್ರವು ಡೇಟಾಸೆಟ್‌ನ ಗೌಪ್ಯತೆಯನ್ನು ಕಾಪಾಡಲು ಸಹಾಯ ಮಾಡಬಹುದು; ನೀವು ಡೇಟಾ ಪಾಯಿಂಟ್ ಅನ್ನು ಹೆಚ್ಚು ಬಹಿರಂಗಪಡಿಸುವ ಗುರುತಿಸುವ ಡೇಟಾ ಬದಲು ಅದರ ಕ್ಲಸ್ಟರ್ ಐಡಿ ಮೂಲಕ ಸೂಚಿಸಬಹುದು. ನೀವು ಇನ್ನಾವುದೇ ಕಾರಣಗಳನ್ನು ಯೋಚಿಸಬಹುದೇ, ಏಕೆ ನೀವು ಕ್ಲಸ್ಟರ್ ಐಡಿಯನ್ನು ಬಳಸುತ್ತೀರಿ? + +ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಈ [ಕಲಿಕೆ ಘಟಕದಲ್ಲಿ](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಿ + +## ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಾರಂಭಿಸುವುದು + +[Scikit-learn ದೊಡ್ಡ ಪ್ರಮಾಣದಲ್ಲಿ](https://scikit-learn.org/stable/modules/clustering.html) ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾಡಲು ವಿಧಾನಗಳನ್ನು ನೀಡುತ್ತದೆ. ನೀವು ಆಯ್ಕೆಮಾಡುವ ಪ್ರಕಾರ ನಿಮ್ಮ ಬಳಕೆಯ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ. ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ಪ್ರಕಾರ, ಪ್ರತಿ ವಿಧಾನಕ್ಕೆ ವಿವಿಧ ಲಾಭಗಳಿವೆ. ಇಲ್ಲಿ Scikit-learn ಬೆಂಬಲಿಸುವ ವಿಧಾನಗಳ ಸರಳ ಪಟ್ಟಿಯಿದೆ ಮತ್ತು ಅವುಗಳ ಸೂಕ್ತ ಬಳಕೆ ಪ್ರಕರಣಗಳು: + +| ವಿಧಾನದ ಹೆಸರು | ಬಳಕೆ ಪ್ರಕರಣ | +| :--------------------------- | :--------------------------------------------------------------------- | +| K-Means | ಸಾಮಾನ್ಯ ಉದ್ದೇಶ, ಸೂಚಕ | +| Affinity propagation | ಅನೇಕ, ಅಸಮಾನ ಕ್ಲಸ್ಟರ್‌ಗಳು, ಸೂಚಕ | +| Mean-shift | ಅನೇಕ, ಅಸಮಾನ ಕ್ಲಸ್ಟರ್‌ಗಳು, ಸೂಚಕ | +| Spectral clustering | ಕಡಿಮೆ, ಸಮಾನ ಕ್ಲಸ್ಟರ್‌ಗಳು, ಪರಿವಹನಾತ್ಮಕ | +| Ward hierarchical clustering | ಅನೇಕ, ನಿರ್ಬಂಧಿತ ಕ್ಲಸ್ಟರ್‌ಗಳು, ಪರಿವಹನಾತ್ಮಕ | +| Agglomerative clustering | ಅನೇಕ, ನಿರ್ಬಂಧಿತ, ನಾನ್ ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು, ಪರಿವಹನಾತ್ಮಕ | +| DBSCAN | ನಾನ್-ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ, ಅಸಮಾನ ಕ್ಲಸ್ಟರ್‌ಗಳು, ಪರಿವಹನಾತ್ಮಕ | +| OPTICS | ನಾನ್-ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ, ಬದಲಾಗುವ ಸಾಂದ್ರತೆಯೊಂದಿಗೆ ಅಸಮಾನ ಕ್ಲಸ್ಟರ್‌ಗಳು, ಪರಿವಹನಾತ್ಮಕ | +| Gaussian mixtures | ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ, ಸೂಚಕ | +| BIRCH | ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ ಮತ್ತು ಔಟ್‌ಲೈಯರ್‌ಗಳು, ಸೂಚಕ | + +> 🎓 ನಾವು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುತ್ತೇವೆ ಎಂಬುದು ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಗುಂಪುಗಳಲ್ಲಿ ಹೇಗೆ ಸಂಗ್ರಹಿಸುತ್ತೇವೆ ಎಂಬುದರ ಮೇಲೆ ಬಹಳ ಅವಲಂಬಿತವಾಗಿದೆ. ಕೆಲವು ಪದಗಳನ್ನು ವಿವರಿಸೋಣ: +> +> 🎓 ['ಪರಿವಹನಾತ್ಮಕ' ಮತ್ತು 'ಸೂಚಕ'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> ಪರಿವಹನಾತ್ಮಕ ನಿರ್ಣಯವು ನಿರೀಕ್ಷಿತ ತರಬೇತಿ ಪ್ರಕರಣಗಳಿಂದ ನಿರ್ಗಮಿಸುತ್ತದೆ, ಅವು ನಿರ್ದಿಷ್ಟ ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತವೆ. ಸೂಚಕ ನಿರ್ಣಯವು ಸಾಮಾನ್ಯ ನಿಯಮಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡಲಾದ ತರಬೇತಿ ಪ್ರಕರಣಗಳಿಂದ ನಿರ್ಗಮಿಸುತ್ತದೆ ಮತ್ತು ನಂತರ ಅವು ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳಿಗೆ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. +> +> ಉದಾಹರಣೆ: ನಿಮ್ಮ ಬಳಿ ಭಾಗಶಃ ಮಾತ್ರ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾಸೆಟ್ ಇದ್ದರೆ, ಕೆಲವು 'ರೆಕಾರ್ಡ್‌ಗಳು', ಕೆಲವು 'ಸಿಡಿಗಳು', ಮತ್ತು ಕೆಲವು ಖಾಲಿ. ನಿಮ್ಮ ಕೆಲಸ ಖಾಲಿ ಭಾಗಗಳಿಗೆ ಲೇಬಲ್ ನೀಡುವುದು. ನೀವು ಸೂಚಕ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡಿದರೆ, ನೀವು 'ರೆಕಾರ್ಡ್‌ಗಳು' ಮತ್ತು 'ಸಿಡಿಗಳು' ಹುಡುಕುವ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ, ಆ ಲೇಬಲ್‌ಗಳನ್ನು ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾಗೆ ಅನ್ವಯಿಸುತ್ತೀರಿ. ಈ ವಿಧಾನವು 'ಕ್ಯಾಸೆಟ್‌ಗಳು' ಎಂಬ ವಸ್ತುಗಳನ್ನು ಸರಿಯಾಗಿ ವರ್ಗೀಕರಿಸಲು ಕಷ್ಟಪಡುತ್ತದೆ. ಪರಿವಹನಾತ್ಮಕ ವಿಧಾನವು, ಇನ್ನೊಂದು ಬದಿಯಲ್ಲಿ, ಈ ಅಜ್ಞಾತ ಡೇಟಾವನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ ಏಕೆಂದರೆ ಅದು ಸಮಾನ ವಸ್ತುಗಳನ್ನು ಗುಂಪುಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಗುಂಪಿಗೆ ಲೇಬಲ್ ಅನ್ವಯಿಸುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಕ್ಲಸ್ಟರ್‌ಗಳು 'ವೃತ್ತಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು' ಮತ್ತು 'ಚೌಕಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು' ಎಂದು ಪ್ರತಿಬಿಂಬಿಸಬಹುದು. +> +> 🎓 ['ನಾನ್-ಫ್ಲಾಟ್' ಮತ್ತು 'ಫ್ಲಾಟ್' ಜ್ಯಾಮಿತಿ](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> ಗಣಿತೀಯ ಪದಬಳಕೆಯಿಂದ, ನಾನ್-ಫ್ಲಾಟ್ ಮತ್ತು ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ ಅಂದರೆ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರವನ್ನು 'ಫ್ಲಾಟ್' ([ಯೂಕ್ಲಿಡಿಯನ್](https://wikipedia.org/wiki/Euclidean_geometry)) ಅಥವಾ 'ನಾನ್-ಫ್ಲಾಟ್' (ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್) ಜ್ಯಾಮಿತೀಯ ವಿಧಾನಗಳಿಂದ ಅಳೆಯುವಿಕೆ. +> +> ಈ ಸಂದರ್ಭದಲ್ಲಿ 'ಫ್ಲಾಟ್' ಅಂದರೆ ಯೂಕ್ಲಿಡಿಯನ್ ಜ್ಯಾಮಿತಿ (ಇದರಲ್ಲಿ ಕೆಲವು ಭಾಗಗಳನ್ನು 'ಪ್ಲೇನ್' ಜ್ಯಾಮಿತಿ ಎಂದು ಕಲಿಸಲಾಗುತ್ತದೆ), ಮತ್ತು ನಾನ್-ಫ್ಲಾಟ್ ಅಂದರೆ ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ಜ್ಯಾಮಿತಿ. ಮೆಷಿನ್ ಲರ್ನಿಂಗ್‌ಗೆ ಜ್ಯಾಮಿತಿಗೆ ಏನು ಸಂಬಂಧ? ಗಣಿತದಲ್ಲಿ ಆಧಾರಿತ ಎರಡು ಕ್ಷೇತ್ರಗಳಾಗಿ, ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿನ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರವನ್ನು ಅಳೆಯಲು ಸಾಮಾನ್ಯ ವಿಧಾನ ಇರಬೇಕು, ಮತ್ತು ಅದು 'ಫ್ಲಾಟ್' ಅಥವಾ 'ನಾನ್-ಫ್ಲಾಟ್' ರೀತಿಯಲ್ಲಿ ಮಾಡಬಹುದು, ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ. [ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು](https://wikipedia.org/wiki/Euclidean_distance) ಎರಡು ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ರೇಖೆಯ ಉದ್ದವಾಗಿ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. [ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು](https://wikipedia.org/wiki/Non-Euclidean_geometry) ವಕ್ರರೇಖೆಯ ಮೇಲೆ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. ನಿಮ್ಮ ಡೇಟಾ ದೃಶ್ಯೀಕರಿಸಿದಾಗ ಸಮತಲದಲ್ಲಿ ಇಲ್ಲದಂತೆ ಕಾಣಿಸಿದರೆ, ಅದನ್ನು ನಿರ್ವಹಿಸಲು ವಿಶೇಷ ಆಲ್ಗಾರಿಥಮ್ ಬೇಕಾಗಬಹುದು. +> +![ಫ್ಲಾಟ್ ಮತ್ತು ನಾನ್-ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.kn.png) +> ಇನ್ಫೋಗ್ರಾಫಿಕ್: [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](https://twitter.com/dasani_decoded) +> +> 🎓 ['ದೂರಗಳು'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> ಕ್ಲಸ್ಟರ್‌ಗಳು ಅವುಗಳ ದೂರ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮೂಲಕ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತವೆ, ಉದಾ: ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರಗಳು. ಈ ದೂರವನ್ನು ಕೆಲವು ವಿಧಾನಗಳಲ್ಲಿ ಅಳೆಯಬಹುದು. ಯೂಕ್ಲಿಡಿಯನ್ ಕ್ಲಸ್ಟರ್‌ಗಳು ಪಾಯಿಂಟ್ ಮೌಲ್ಯಗಳ ಸರಾಸರಿಯಿಂದ ವ್ಯಾಖ್ಯಾನಿಸಲ್ಪಡುತ್ತವೆ ಮತ್ತು 'ಸೆಂಟ್ರಾಯ್ಡ್' ಅಥವಾ ಕೇಂದ್ರ ಬಿಂದುವನ್ನು ಹೊಂದಿರುತ್ತವೆ. ದೂರಗಳು ಆ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗೆ ಇರುವ ದೂರದಿಂದ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು 'ಕ್ಲಸ್ಟ್ರಾಯ್ಡ್'ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದವು, ಅದು ಇತರ ಪಾಯಿಂಟ್‌ಗಳಿಗೆ ಅತ್ಯಂತ ಸಮೀಪದ ಬಿಂದುವಾಗಿರುತ್ತದೆ. ಕ್ಲಸ್ಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ವಿವಿಧ ರೀತಿಯಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು. +> +> 🎓 ['ನಿರ್ಬಂಧಿತ'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [ನಿರ್ಬಂಧಿತ ಕ್ಲಸ್ಟರಿಂಗ್](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ಈ ಅನಿಯಂತ್ರಿತ ವಿಧಾನಕ್ಕೆ 'ಅರ್ಧ-ನಿಯಂತ್ರಿತ' ಕಲಿಕೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು 'ಲಿಂಕ್ ಮಾಡಬಾರದು' ಅಥವಾ 'ಲಿಂಕ್ ಮಾಡಬೇಕು' ಎಂದು ಗುರುತಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಕೆಲವು ನಿಯಮಗಳನ್ನು ಡೇಟಾಸೆಟ್‌ಗೆ ಜಾರಿಗೊಳಿಸಲಾಗುತ್ತದೆ. +> +> ಉದಾಹರಣೆ: ಒಂದು ಆಲ್ಗಾರಿಥಮ್ ಲೇಬಲ್ ಮಾಡದ ಅಥವಾ ಅರ್ಧ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾದ ಮೇಲೆ ಮುಕ್ತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಿದರೆ, ಅದು ಉತ್ಪಾದಿಸುವ ಕ್ಲಸ್ಟರ್‌ಗಳು ಕಡಿಮೆ ಗುಣಮಟ್ಟದಿರಬಹುದು. ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಕ್ಲಸ್ಟರ್‌ಗಳು 'ವೃತ್ತಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು', 'ಚೌಕಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು', 'ತ್ರಿಕೋನಾಕಾರದ ವಸ್ತುಗಳು' ಮತ್ತು 'ಕುಕೀಸ್' ಎಂದು ಗುಂಪುಮಾಡಬಹುದು. ಕೆಲವು ನಿಯಮಗಳು ("ವಸ್ತು ಪ್ಲಾಸ್ಟಿಕ್‌ನಿಂದ ಮಾಡಬೇಕು", "ವಸ್ತು ಸಂಗೀತ ಉತ್ಪಾದಿಸಬಲ್ಲದು") ನೀಡಿದರೆ, ಇದು ಆಲ್ಗಾರಿಥಮ್‌ಗೆ ಉತ್ತಮ ಆಯ್ಕೆಗಳನ್ನು ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. +> +> 🎓 'ಸಾಂದ್ರತೆ' +> +> 'ಶಬ್ದ' ಇರುವ ಡೇಟಾವನ್ನು 'ಸಾಂದ್ರ' ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಪ್ರತಿ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿನ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರಗಳು ಪರಿಶೀಲನೆಯಾಗುವಾಗ ಹೆಚ್ಚು ಅಥವಾ ಕಡಿಮೆ ಸಾಂದ್ರವಾಗಿರಬಹುದು, ಅಥವಾ 'ಘನತೆ' ಹೊಂದಿರಬಹುದು, ಆದ್ದರಿಂದ ಈ ಡೇಟಾವನ್ನು ಸೂಕ್ತ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನದಿಂದ ವಿಶ್ಲೇಷಿಸಬೇಕಾಗುತ್ತದೆ. [ಈ ಲೇಖನ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) K-Means ಕ್ಲಸ್ಟರಿಂಗ್ ಮತ್ತು HDBSCAN ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಸಮಾನ ಕ್ಲಸ್ಟರ್ ಸಾಂದ್ರತೆಯೊಂದಿಗೆ ಶಬ್ದ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಅನ್ವೇಷಿಸುವ ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುತ್ತದೆ. + +## ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು + +100ಕ್ಕೂ ಹೆಚ್ಚು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳಿವೆ, ಮತ್ತು ಅವುಗಳ ಬಳಕೆ ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಕೆಲವು ಪ್ರಮುಖ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಚರ್ಚಿಸೋಣ: + +- **ಹೈರಾರ್ಕಿಕಲ್ ಕ್ಲಸ್ಟರಿಂಗ್**. ಒಂದು ವಸ್ತುವನ್ನು ಅದರ ಸಮೀಪದ ವಸ್ತುವಿನ ಹತ್ತಿರತೆ ಆಧರಿಸಿ ವರ್ಗೀಕರಿಸಿದರೆ, ಕ್ಲಸ್ಟರ್‌ಗಳು ಅವುಗಳ ಸದಸ್ಯರ ದೂರದ ಆಧಾರದ ಮೇಲೆ ರಚಿಸಲಾಗುತ್ತವೆ. Scikit-learn ನ ಅಗ್ಗ್ಲೊಮೆರೇಟಿವ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಹೈರಾರ್ಕಿಕಲ್ ಆಗಿದೆ. + + ![ಹೈರಾರ್ಕಿಕಲ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.kn.png) + > ಇನ್ಫೋಗ್ರಾಫಿಕ್: [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](https://twitter.com/dasani_decoded) + +- **ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್**. ಈ ಜನಪ್ರಿಯ ಆಲ್ಗಾರಿಥಮ್ 'k' ಅಥವಾ ರಚಿಸಬೇಕಾದ ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕಾಗುತ್ತದೆ, ನಂತರ ಆಲ್ಗಾರಿಥಮ್ ಕ್ಲಸ್ಟರ್‌ನ ಕೇಂದ್ರ ಬಿಂದುವನ್ನು ನಿರ್ಧರಿಸಿ ಆ ಬಿಂದುವಿನ ಸುತ್ತಲೂ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. [K-means ಕ್ಲಸ್ಟರಿಂಗ್](https://wikipedia.org/wiki/K-means_clustering) ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಜನಪ್ರಿಯ ಆವೃತ್ತಿಯಾಗಿದೆ. ಕೇಂದ್ರವನ್ನು ಸಮೀಪದ ಸರಾಸರಿ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಹೆಸರು. ಕ್ಲಸ್ಟರ್‌ನಿಂದ ಚದರ ದೂರವನ್ನು ಕನಿಷ್ಠಗೊಳಿಸಲಾಗುತ್ತದೆ. + + ![ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಇನ್ಫೋಗ್ರಾಫಿಕ್](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.kn.png) + > ಇನ್ಫೋಗ್ರಾಫಿಕ್: [ದಾಸನಿ ಮಡಿಪಳ್ಳಿ](https://twitter.com/dasani_decoded) + +- **ವಿತರಣಾ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಸಾಂಖ್ಯಿಕ ಮಾದರಿಗೊಳಿಸುವಿಕೆಯಲ್ಲಿ ಆಧಾರಿತ, ವಿತರಣಾ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್ ಡೇಟಾ ಪಾಯಿಂಟ್ ಒಂದು ಕ್ಲಸ್ಟರ್‌ಗೆ ಸೇರಿದ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸಿ ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ನಿಯೋಜಿಸುತ್ತದೆ. ಗಾಸಿಯನ್ ಮಿಶ್ರಣ ವಿಧಾನಗಳು ಈ ಪ್ರಕಾರಕ್ಕೆ ಸೇರಿವೆ. + +- **ಸಾಂದ್ರತೆ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಅವುಗಳ ಸಾಂದ್ರತೆ ಅಥವಾ ಪರಸ್ಪರ ಗುಂಪುಮಾಡುವಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ಕ್ಲಸ್ಟರ್‌ಗಳಿಗೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ. ಗುಂಪಿನಿಂದ ದೂರದಲ್ಲಿರುವ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಔಟ್‌ಲೈಯರ್‌ಗಳು ಅಥವಾ ಶಬ್ದ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. DBSCAN, Mean-shift ಮತ್ತು OPTICS ಈ ಪ್ರಕಾರದ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸೇರಿವೆ. + +- **ಗ್ರಿಡ್ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಬಹು-ಆಯಾಮದ ಡೇಟಾಸೆಟ್‌ಗಳಿಗೆ, ಗ್ರಿಡ್ ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಡೇಟಾವನ್ನು ಗ್ರಿಡ್‌ನ ಸೆಲ್‌ಗಳ ನಡುವೆ ಹಂಚಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಕ್ಲಸ್ಟರ್‌ಗಳು ರಚಿಸಲಾಗುತ್ತವೆ. + +## ಅಭ್ಯಾಸ - ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಕ್ಲಸ್ಟರ್ ಮಾಡಿ + +ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರವನ್ನು ಸರಿಯಾದ ದೃಶ್ಯೀಕರಣದಿಂದ ಬಹಳ ಸಹಾಯವಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ನಮ್ಮ ಸಂಗೀತ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ. ಈ ಅಭ್ಯಾಸವು ಈ ಡೇಟಾದ ಸ್ವಭಾವಕ್ಕೆ ಯಾವ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. + +1. ಈ ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) ಫೈಲ್ ಅನ್ನು ತೆರೆಯಿರಿ. + +1. ಉತ್ತಮ ಡೇಟಾ ದೃಶ್ಯೀಕರಣಕ್ಕಾಗಿ `Seaborn` ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಆಮದುಮಾಡಿ. + + ```python + !pip install seaborn + ``` + +1. [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) ನಿಂದ ಹಾಡುಗಳ ಡೇಟಾವನ್ನು ಸೇರಿಸಿ. ಹಾಡುಗಳ ಬಗ್ಗೆ ಕೆಲವು ಡೇಟಾ ಹೊಂದಿರುವ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಿ. ಲೈಬ್ರರಿಗಳನ್ನು ಆಮದುಮಾಡಿ ಮತ್ತು ಡೇಟಾವನ್ನು ಹೊರಹಾಕಿ, ಈ ಡೇಟಾವನ್ನು ಅನ್ವೇಷಿಸಲು ಸಿದ್ಧರಾಗಿ: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + ಮೊದಲ ಕೆಲವು ಸಾಲುಗಳ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಿ: + + | | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | + | 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | + | 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | + | 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. ಡೇಟಾಫ್ರೇಮ್ ಬಗ್ಗೆ ಕೆಲವು ಮಾಹಿತಿಗಳನ್ನು ಪಡೆಯಿರಿ, `info()` ಅನ್ನು ಕರೆ ಮಾಡಿ: + + ```python + df.info() + ``` + + ಔಟ್‌ಪುಟ್ ಹೀಗೆ ಕಾಣಿಸುತ್ತದೆ: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. ನಲ್ ಮೌಲ್ಯಗಳಿಗಾಗಿ ಡಬಲ್-ಚೆಕ್ ಮಾಡಿ, `isnull()` ಅನ್ನು ಕರೆ ಮಾಡಿ ಮತ್ತು ಮೊತ್ತ 0 ಆಗಿರುವುದನ್ನು ಪರಿಶೀಲಿಸಿ: + + ```python + df.isnull().sum() + ``` + + ಚೆನ್ನಾಗಿದೆಯೇ: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. ಡೇಟಾವನ್ನು ವರ್ಣಿಸಿ: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 ನಾವು ಕ್ಲಸ್ಟರಿಂಗ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದರೆ, ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಅಗತ್ಯವಿಲ್ಲದ ಅನ್‌ಸೂಪರ್ವೈಸ್‌ಡ್ ವಿಧಾನ, ನಾವು ಈ ಡೇಟಾವನ್ನು ಲೇಬಲ್‌ಗಳೊಂದಿಗೆ ಏಕೆ ತೋರಿಸುತ್ತಿದ್ದೇವೆ? ಡೇಟಾ ಅನ್ವೇಷಣಾ ಹಂತದಲ್ಲಿ, ಅವು ಸಹಾಯಕವಾಗುತ್ತವೆ, ಆದರೆ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅವು ಅಗತ್ಯವಿಲ್ಲ. ನೀವು ಕೇವಲ ಕಾಲಮ್ ಹೆಡರ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಡೇಟಾವನ್ನು ಕಾಲಮ್ ಸಂಖ್ಯೆಯಿಂದ ಉಲ್ಲೇಖಿಸಬಹುದು. + +ಡೇಟಾದ ಸಾಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ನೋಡಿ. ಜನಪ್ರಿಯತೆ '0' ಆಗಿರಬಹುದು, ಇದು ರ್ಯಾಂಕಿಂಗ್ ಇಲ್ಲದ ಹಾಡುಗಳನ್ನು ತೋರಿಸುತ್ತದೆ. ಅವುಗಳನ್ನು ಶೀಘ್ರದಲ್ಲೇ ತೆಗೆದುಹಾಕೋಣ. + +1. ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಶೈಲಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಬಾರ್ಪ್ಲಾಟ್ ಬಳಸಿ: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.kn.png) + +✅ ನೀವು ಹೆಚ್ಚು ಟಾಪ್ ಮೌಲ್ಯಗಳನ್ನು ನೋಡಲು ಬಯಸಿದರೆ, ಟಾಪ್ `[:5]` ಅನ್ನು ದೊಡ್ಡ ಮೌಲ್ಯಕ್ಕೆ ಬದಲಾಯಿಸಿ ಅಥವಾ ಎಲ್ಲಾ ನೋಡಲು ಅದನ್ನು ತೆಗೆದುಹಾಕಿ. + +ಗಮನಿಸಿ, ಟಾಪ್ ಶೈಲಿ 'Missing' ಎಂದು ವರ್ಣಿಸಲ್ಪಟ್ಟಿದ್ದರೆ, ಅಂದರೆ Spotify ಅದನ್ನು ವರ್ಗೀಕರಿಸಿಲ್ಲ, ಆದ್ದರಿಂದ ಅದನ್ನು ತೆಗೆದುಹಾಕೋಣ. + +1. ಮಿಸ್ಸಿಂಗ್ ಡೇಟಾವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಿ ತೆಗೆದುಹಾಕಿ + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ಈಗ ಶೈಲಿಗಳನ್ನು ಮರುಪರಿಶೀಲಿಸಿ: + + ![most popular](../../../../translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.kn.png) + +1. ಬಹುಮಟ್ಟಿಗೆ, ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳು ಈ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಆಳವಾಗಿ ಆಳುತ್ತವೆ. `afro dancehall`, `afropop`, ಮತ್ತು `nigerian pop` ಮೇಲೆ ಗಮನಹರಿಸೋಣ, ಜೊತೆಗೆ 0 ಜನಪ್ರಿಯತೆ ಮೌಲ್ಯವಿರುವ ಯಾವುದೇ ಡೇಟಾವನ್ನು (ಅಂದರೆ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಜನಪ್ರಿಯತೆ ವರ್ಗೀಕರಣವಿಲ್ಲದವು ಮತ್ತು ನಮ್ಮ ಉದ್ದೇಶಗಳಿಗೆ ಶಬ್ದವೆಂದು ಪರಿಗಣಿಸಬಹುದು) ತೆಗೆದುಹಾಕಿ: + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. ಡೇಟಾ ಯಾವುದೇ ವಿಶೇಷವಾಗಿ ಬಲವಾದ ಸಂಬಂಧ ಹೊಂದಿದೆಯೇ ಎಂದು ತ್ವರಿತ ಪರೀಕ್ಷೆ ಮಾಡಿ: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.kn.png) + + ಏಕೈಕ ಬಲವಾದ ಸಂಬಂಧ `energy` ಮತ್ತು `loudness` ನಡುವೆ ಇದೆ, ಇದು ಅಚ್ಚರಿಯ ಸಂಗತಿ ಅಲ್ಲ, ಏಕೆಂದರೆ ಗಟ್ಟಿಯಾದ ಸಂಗೀತ ಸಾಮಾನ್ಯವಾಗಿ ಬಹಳ ಶಕ್ತಿಶಾಲಿಯಾಗಿದೆ. ಬೇರೆ ಎಲ್ಲ ಸಂಬಂಧಗಳು ಸಾಪೇಕ್ಷವಾಗಿ ದುರ್ಬಲವಾಗಿವೆ. ಈ ಡೇಟಾದಲ್ಲಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್ ಏನು ಮಾಡಬಹುದು ಎಂದು ನೋಡುವುದು ಆಸಕ್ತಿದಾಯಕವಾಗಿರುತ್ತದೆ. + + > 🎓 ಸಂಬಂಧವು ಕಾರಣವಲ್ಲ ಎಂಬುದನ್ನು ಗಮನಿಸಿ! ನಾವು ಸಂಬಂಧದ ಸಾಬೀತು ಹೊಂದಿದ್ದೇವೆ ಆದರೆ ಕಾರಣದ ಸಾಬೀತು ಇಲ್ಲ. [ರಂಜನೀಯ ವೆಬ್‌ಸೈಟ್](https://tylervigen.com/spurious-correlations) ಇದನ್ನು ಒತ್ತಿ ತೋರಿಸುತ್ತದೆ. + +ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಹಾಡಿನ ಗ್ರಹಿತ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ಸುತ್ತಲೂ ಯಾವುದೇ ಸಮಾಗಮವಿದೆಯೇ? ಫೇಸಟ್‌ಗ್ರಿಡ್ ತೋರಿಸುತ್ತದೆ, regardless of genre, there are concentric circles that line up. ನೈಜೀರಿಯನ್ ರುಚಿಗಳು ಈ ಶೈಲಿಗೆ ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ನಿರ್ದಿಷ್ಟ ಮಟ್ಟದಲ್ಲಿ ಸಮಾಗಮವಾಗಬಹುದೇ? + +✅ ವಿಭಿನ್ನ ಡೇಟಾಪಾಯಿಂಟ್‌ಗಳನ್ನು (energy, loudness, speechiness) ಮತ್ತು ಹೆಚ್ಚು ಅಥವಾ ವಿಭಿನ್ನ ಸಂಗೀತ ಶೈಲಿಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ. ನೀವು ಏನು ಕಂಡುಹಿಡಿಯಬಹುದು? `df.describe()` ಟೇಬಲ್ ಅನ್ನು ನೋಡಿ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳ ಸಾಮಾನ್ಯ ವಿಸ್ತಾರವನ್ನು. + +### ವ್ಯಾಯಾಮ - ಡೇಟಾ ವಿತರಣೆ + +ಈ ಮೂರು ಶೈಲಿಗಳು ತಮ್ಮ ಜನಪ್ರಿಯತೆ ಆಧಾರಿತವಾಗಿ ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ಗ್ರಹಣೆಯಲ್ಲಿ ಪ್ರಮುಖವಾಗಿ ವಿಭಿನ್ನವಾಗಿದೆಯೇ? + +1. ನಮ್ಮ ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ಡೇಟಾ ವಿತರಣೆಯನ್ನು ನೀಡಲಾದ x ಮತ್ತು y ಅಕ್ಷಗಳ ಮೇಲೆ ಪರಿಶೀಲಿಸಿ. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + ನೀವು ಸಾಮಾನ್ಯ ಸಮಾಗಮದ ಬಿಂದುವಿನ ಸುತ್ತಲೂ ಸಾಂದ್ರ ವಲಯಗಳನ್ನು ಕಂಡುಹಿಡಿಯಬಹುದು, ಇದು ಪಾಯಿಂಟ್‌ಗಳ ವಿತರಣೆಯನ್ನು ತೋರಿಸುತ್ತದೆ. + + > 🎓 ಈ ಉದಾಹರಣೆ KDE (Kernel Density Estimate) ಗ್ರಾಫ್ ಅನ್ನು ಬಳಸುತ್ತದೆ, ಇದು ಡೇಟಾವನ್ನು ನಿರಂತರ ಪ್ರಾಬಬಿಲಿಟಿ ಡೆನ್ಸಿಟಿ ವಕ್ರದಿಂದ ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಇದು ಬಹು ವಿತರಣೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಡೇಟಾವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. + + ಸಾಮಾನ್ಯವಾಗಿ, ಈ ಮೂರು ಶೈಲಿಗಳು ತಮ್ಮ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ದೃಷ್ಟಿಯಿಂದ ಸಡಿಲವಾಗಿ ಹೊಂದಿಕೊಳ್ಳುತ್ತವೆ. ಈ ಸಡಿಲವಾಗಿ ಹೊಂದಿಕೊಂಡಿರುವ ಡೇಟಾದಲ್ಲಿ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ನಿರ್ಧರಿಸುವುದು ಸವಾಲಾಗಿರುತ್ತದೆ: + + ![distribution](../../../../translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.kn.png) + +1. ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ರಚಿಸಿ: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + ಅದೇ ಅಕ್ಷಗಳ ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್ ಸಾದೃಶ್ಯ ಸಮಾಗಮ ಮಾದರಿಯನ್ನು ತೋರಿಸುತ್ತದೆ + + ![Facetgrid](../../../../translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.kn.png) + +ಸಾಮಾನ್ಯವಾಗಿ, ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ, ನೀವು ಡೇಟಾದ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ಯಾಟರ್ ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸಬಹುದು, ಆದ್ದರಿಂದ ಈ ರೀತಿಯ ದೃಶ್ಯೀಕರಣವನ್ನು ನಿಪುಣತೆಯಿಂದ ಮಾಡುವುದು ಬಹಳ ಉಪಯುಕ್ತ. ಮುಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು ಈ ಫಿಲ್ಟರ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ತೆಗೆದು k-means ಕ್ಲಸ್ಟರಿಂಗ್ ಬಳಸಿ ಈ ಡೇಟಾದಲ್ಲಿ ಆಸಕ್ತಿದಾಯಕ ರೀತಿಯಲ್ಲಿ ಒಟ್ಟುಗೂಡುತ್ತಿರುವ ಗುಂಪುಗಳನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೇವೆ. + +--- + +## 🚀ಸವಾಲು + +ಮುಂದಿನ ಪಾಠದ ತಯಾರಿಗಾಗಿ, ನೀವು ಕಂಡುಹಿಡಿಯಬಹುದಾದ ಮತ್ತು ಉತ್ಪಾದನಾ ಪರಿಸರದಲ್ಲಿ ಬಳಸಬಹುದಾದ ವಿವಿಧ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳ ಬಗ್ಗೆ ಚಾರ್ಟ್ ರಚಿಸಿ. ಕ್ಲಸ್ಟರಿಂಗ್ ಯಾವ ರೀತಿಯ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ? + +## [ಪೋಸ್ಟ್-ಲೆಕ್ಚರ್ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು, ನಾವು ಕಲಿತಂತೆ, ನಿಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸ್ವಭಾವವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಉತ್ತಮ. ಈ ವಿಷಯದ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ [ಇಲ್ಲಿ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) ಓದಿ + +[ಈ ಸಹಾಯಕ ಲೇಖನ](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) ವಿವಿಧ ಡೇಟಾ ಆಕಾರಗಳನ್ನು ನೀಡಿದಾಗ ವಿವಿಧ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಹೇಗೆ ವರ್ತಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ. + +## ನಿಯೋಜನೆ + +[ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಇತರ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/1-Visualize/assignment.md b/translations/kn/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..08bd97f07 --- /dev/null +++ b/translations/kn/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,27 @@ + +# ಕ್ಲಸ್ಟರಿಂಗ್‌ಗಾಗಿ ಇತರ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ + +## ಸೂಚನೆಗಳು + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸಿದ್ಧತೆಗಾಗಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪ್ಲಾಟ್ ಮಾಡಲು ಕೆಲವು ದೃಶ್ಯೀಕರಣ ತಂತ್ರಗಳನ್ನು ಬಳಸಿದ್ದೀರಿ. ವಿಶೇಷವಾಗಿ, ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳು ವಸ್ತುಗಳ ಗುಂಪುಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಉಪಯುಕ್ತವಾಗಿವೆ. ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳನ್ನು ರಚಿಸಲು ವಿಭಿನ್ನ ವಿಧಾನಗಳು ಮತ್ತು ವಿಭಿನ್ನ ಲೈಬ್ರರಿಗಳನ್ನು ಸಂಶೋಧಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಕೆಲಸವನ್ನು ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ದಾಖಲೆ ಮಾಡಿ. ನೀವು ಈ ಪಾಠದ ಡೇಟಾ, ಇತರ ಪಾಠಗಳ ಡೇಟಾ ಅಥವಾ ನೀವು ಸ್ವತಃ ಸಂಗ್ರಹಿಸಿದ ಡೇಟಾವನ್ನು ಬಳಸಬಹುದು (ಆದರೆ, ದಯವಿಟ್ಟು ಅದರ ಮೂಲವನ್ನು ನಿಮ್ಮ ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಉಲ್ಲೇಖಿಸಿ). ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸಿ ಕೆಲವು ಡೇಟಾವನ್ನು ಪ್ಲಾಟ್ ಮಾಡಿ ಮತ್ತು ನೀವು ಕಂಡುಕೊಂಡುದನ್ನು ವಿವರಿಸಿ. + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | +| | ಐದು ಚೆನ್ನಾಗಿ ದಾಖಲಾಗಿರುವ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಐದುಕ್ಕಿಂತ ಕಡಿಮೆ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಅದು ಕಡಿಮೆ ಚೆನ್ನಾಗಿ ದಾಖಲಾಗಿದ್ದುದು | ಅಪೂರ್ಣ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/1-Visualize/notebook.ipynb b/translations/kn/5-Clustering/1-Visualize/notebook.ipynb new file mode 100644 index 000000000..5aa60a524 --- /dev/null +++ b/translations/kn/5-Clustering/1-Visualize/notebook.ipynb @@ -0,0 +1,52 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python383jvsc74a57bd0e134e05457d34029b6460cd73bbf1ed73f339b5b6d98c95be70b69eba114fe95", + "display_name": "Python 3.8.3 64-bit (conda)" + }, + "coopTranslator": { + "original_hash": "40e0707e96b3e1899a912776006264f9", + "translation_date": "2025-12-19T16:50:50+00:00", + "source_file": "5-Clustering/1-Visualize/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ಸ್ಪೋಟಿಫೈಯಿಂದ ಸಂಗ್ರಹಿಸಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ - ಒಂದು ವಿಶ್ಲೇಷಣೆ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/kn/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..a8d16df71 --- /dev/null +++ b/translations/kn/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb b/translations/kn/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb new file mode 100644 index 000000000..2cab7dfc0 --- /dev/null +++ b/translations/kn/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb @@ -0,0 +1,493 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "## **ನೈಜೀರಿಯನ್ ಸಂಗೀತವನ್ನು Spotify ನಿಂದ ಸ್ಕ್ರೇಪ್ ಮಾಡಲಾಗಿದೆ - ಒಂದು ವಿಶ್ಲೇಷಣೆ**\n", + "\n", + "ಕ್ಲಸ್ಟರಿಂಗ್ ಒಂದು ರೀತಿಯ [ಅನಿಯಂತ್ರಿತ ಕಲಿಕೆ](https://wikipedia.org/wiki/Unsupervised_learning) ಆಗಿದ್ದು, ಇದು ಡೇಟಾಸೆಟ್ ಲೇಬಲ್ ಮಾಡದಿರುವುದು ಅಥವಾ ಅದರ ಇನ್‌ಪುಟ್‌ಗಳು ಪೂರ್ವನಿರ್ಧರಿತ ಔಟ್‌ಪುಟ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆ ಮಾಡದಿರುವುದಾಗಿ ಊಹಿಸುತ್ತದೆ. ಇದು ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾದ ಮೂಲಕ ವಿವಿಧ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಡೇಟಾದಲ್ಲಿನ ಮಾದರಿಗಳ ಪ್ರಕಾರ ಗುಂಪುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n", + "\n", + "[**ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)\n", + "\n", + "### **ಪರಿಚಯ**\n", + "\n", + "[ಕ್ಲಸ್ಟರಿಂಗ್](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ಡೇಟಾ ಅನ್ವೇಷಣೆಗೆ ಬಹಳ ಉಪಯುಕ್ತವಾಗಿದೆ. ನೈಜೀರಿಯನ್ ಪ್ರೇಕ್ಷಕರು ಸಂಗೀತವನ್ನು ಹೇಗೆ ಉಪಯೋಗಿಸುತ್ತಾರೆ ಎಂಬುದರಲ್ಲಿ ಟ್ರೆಂಡ್ಸ್ ಮತ್ತು ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಇದು ಸಹಾಯ ಮಾಡಬಹುದೇ ಎಂದು ನೋಡೋಣ.\n", + "\n", + "> ✅ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಉಪಯೋಗಗಳನ್ನು ಕುರಿತು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ. ನಿಜ ಜೀವನದಲ್ಲಿ, ನೀವು ಬಟ್ಟೆಗಳನ್ನು ಗುಂಪುಮಾಡಬೇಕಾದಾಗ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಗುತ್ತದೆ 🧦👕👖🩲. ಡೇಟಾ ಸೈನ್ಸ್‌ನಲ್ಲಿ, ಬಳಕೆದಾರರ ಇಚ್ಛೆಗಳ ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಅಥವಾ ಯಾವುದೇ ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾಸೆಟ್‌ನ ಲಕ್ಷಣಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಗುತ್ತದೆ. ಕ್ಲಸ್ಟರಿಂಗ್ ಒಂದು ರೀತಿಯಲ್ಲಿ ಗೊಂದಲವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಹೀಗಾಗಿ ಅದು ಒಂದು ಸಾಕ್ ಡ್ರಾಯರ್‌ನಂತೆ.\n", + "\n", + "ವೃತ್ತಿಪರ ಪರಿಸರದಲ್ಲಿ, ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಮಾರುಕಟ್ಟೆ ವಿಭಾಗೀಕರಣ, ಯಾವ ವಯಸ್ಸಿನ ಗುಂಪು ಯಾವ ವಸ್ತುಗಳನ್ನು ಖರೀದಿಸುತ್ತಾರೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು ಬಳಸಬಹುದು. ಮತ್ತೊಂದು ಉಪಯೋಗವು ಅನೋಮಲಿ ಪತ್ತೆಹಚ್ಚುವಿಕೆ, ಉದಾಹರಣೆಗೆ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ವ್ಯವಹಾರಗಳ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಮೋಸವನ್ನು ಪತ್ತೆಹಚ್ಚಲು. ಅಥವಾ ವೈದ್ಯಕೀಯ ಸ್ಕ್ಯಾನ್ಸ್‌ನ ಬ್ಯಾಚ್‌ನಲ್ಲಿ ಟ್ಯೂಮರ್‌ಗಳನ್ನು ಗುರುತಿಸಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಬಳಸಬಹುದು.\n", + "\n", + "✅ ಬ್ಯಾಂಕಿಂಗ್, ಇ-ಕಾಮರ್ಸ್ ಅಥವಾ ವ್ಯವಹಾರ ಪರಿಸರದಲ್ಲಿ ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು 'ವೈಲ್ಡ್' ನಲ್ಲಿ ಹೇಗೆ ಎದುರಿಸಿದ್ದೀರೋ ಎಂದು ಒಂದು ನಿಮಿಷ ಯೋಚಿಸಿ.\n", + "\n", + "> 🎓 ಆಸಕ್ತಿಕರವಾಗಿ, ಕ್ಲಸ್ಟರ್ ವಿಶ್ಲೇಷಣೆ 1930ರ ದಶಕದಲ್ಲಿ ಮಾನವಶಾಸ್ತ್ರ ಮತ್ತು ಮನೋವಿಜ್ಞಾನ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಹುಟ್ಟಿಕೊಂಡಿತು. ನೀವು ಅದನ್ನು ಹೇಗೆ ಬಳಸಲಾಗುತ್ತಿತ್ತು ಎಂದು ಊಹಿಸಬಹುದೇ?\n", + "\n", + "ಮತ್ತೊಂದು ಆಯ್ಕೆ, ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳನ್ನು ಗುಂಪುಮಾಡಲು - ಖರೀದಿ ಲಿಂಕ್‌ಗಳು, ಚಿತ್ರಗಳು ಅಥವಾ ವಿಮರ್ಶೆಗಳ ಪ್ರಕಾರ. ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ ಇದ್ದಾಗ ಮತ್ತು ಅದನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಹೆಚ್ಚಿನ ವಿಶ್ಲೇಷಣೆ ಮಾಡಲು ಕ್ಲಸ್ಟರಿಂಗ್ ಉಪಯುಕ್ತವಾಗಿದೆ, ಹೀಗಾಗಿ ಈ ತಂತ್ರವನ್ನು ಇತರ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವ ಮೊದಲು ಡೇಟಾ ಬಗ್ಗೆ ತಿಳಿಯಲು ಬಳಸಬಹುದು.\n", + "\n", + "✅ ನಿಮ್ಮ ಡೇಟಾ ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿ ಸಂಘಟಿತವಾದ ಮೇಲೆ, ನೀವು ಅದಕ್ಕೆ ಕ್ಲಸ್ಟರ್ ಐಡಿ ನೀಡುತ್ತೀರಿ, ಮತ್ತು ಈ ತಂತ್ರವು ಡೇಟಾಸೆಟ್‌ನ ಗೌಪ್ಯತೆಯನ್ನು ಕಾಪಾಡಲು ಸಹಾಯ ಮಾಡಬಹುದು; ನೀವು ಡೇಟಾ ಪಾಯಿಂಟ್ ಅನ್ನು ಅದರ ಕ್ಲಸ್ಟರ್ ಐಡಿ ಮೂಲಕ ಸೂಚಿಸಬಹುದು, ಹೆಚ್ಚು ಬಹಿರಂಗವಾಗುವ ಗುರುತಿಸುವ ಡೇಟಾ ಬದಲಾಗಿ. ನೀವು ಇನ್ನಾವುದೇ ಕಾರಣಗಳನ್ನು ಯೋಚಿಸಬಹುದೇ, ಏಕೆ ನೀವು ಕ್ಲಸ್ಟರ್ ಐಡಿಯನ್ನು ಬಳಸುತ್ತೀರಿ?\n", + "\n", + "### ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಾರಂಭಿಸುವುದು\n", + "\n", + "> 🎓 ನಾವು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂಬುದು ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಗುಂಪುಗಳಲ್ಲಿ ಹೇಗೆ ಸಂಗ್ರಹಿಸುವುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಕೆಲವು ಪದಗಳನ್ನು ವಿವರಿಸೋಣ:\n", + ">\n", + "> 🎓 ['ಟ್ರಾನ್ಸ್‌ಡಕ್ಟಿವ್' ವಿರುದ್ಧ 'ಇಂಡಕ್ಟಿವ್'](https://wikipedia.org/wiki/Transduction_(machine_learning))\n", + ">\n", + "> ಟ್ರಾನ್ಸ್‌ಡಕ್ಟಿವ್ ನಿರ್ಣಯವು ನಿರೀಕ್ಷಿತ ತರಬೇತಿ ಪ್ರಕರಣಗಳಿಂದ ನಿರ್ಗಮಿಸುತ್ತದೆ, ಅವು ನಿರ್ದಿಷ್ಟ ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತವೆ. ಇಂಡಕ್ಟಿವ್ ನಿರ್ಣಯವು ತರಬೇತಿ ಪ್ರಕರಣಗಳಿಂದ ಸಾಮಾನ್ಯ ನಿಯಮಗಳಿಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಅವು ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳಿಗೆ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.\n", + ">\n", + "> ಉದಾಹರಣೆ: ನಿಮ್ಮ ಬಳಿ ಭಾಗಶಃ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾಸೆಟ್ ಇದ್ದರೆ, ಕೆಲವು 'ರೆಕಾರ್ಡ್‌ಗಳು', ಕೆಲವು 'ಸಿಡಿಗಳು', ಮತ್ತು ಕೆಲವು ಖಾಲಿ. ನಿಮ್ಮ ಕೆಲಸ ಖಾಲಿ ಭಾಗಗಳಿಗೆ ಲೇಬಲ್ ನೀಡುವುದು. ನೀವು ಇಂಡಕ್ಟಿವ್ ವಿಧಾನವನ್ನು ಆರಿಸಿದರೆ, ನೀವು 'ರೆಕಾರ್ಡ್‌ಗಳು' ಮತ್ತು 'ಸಿಡಿಗಳು' ಹುಡುಕುವ ಮಾದರಿಯನ್ನು ತರಬೇತಿಮಾಡಿ, ಆ ಲೇಬಲ್‌ಗಳನ್ನು ಲೇಬಲ್ ಮಾಡದ ಡೇಟಾಗೆ ಅನ್ವಯಿಸುತ್ತೀರಿ. ಈ ವಿಧಾನವು 'ಕ್ಯಾಸೆಟ್‌ಗಳು' ಎಂದು ನಿಜವಾಗಿರುವ ವಸ್ತುಗಳನ್ನು ವರ್ಗೀಕರಿಸಲು ಕಷ್ಟಪಡುತ್ತದೆ. ಟ್ರಾನ್ಸ್‌ಡಕ್ಟಿವ್ ವಿಧಾನವು ಈ ಅಜ್ಞಾತ ಡೇಟಾವನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ಸಮಾನ ವಸ್ತುಗಳನ್ನು ಗುಂಪುಮಾಡಿ ನಂತರ ಗುಂಪಿಗೆ ಲೇಬಲ್ ಅನ್ವಯಿಸುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಕ್ಲಸ್ಟರ್‌ಗಳು 'ವೃತ್ತಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು' ಮತ್ತು 'ಚೌಕಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು' ಎಂದು ಪ್ರತಿಬಿಂಬಿಸಬಹುದು.\n", + ">\n", + "> 🎓 ['ನಾನ್-ಫ್ಲಾಟ್' ವಿರುದ್ಧ 'ಫ್ಲಾಟ್' ಜ್ಯಾಮಿತಿ](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\n", + ">\n", + "> ಗಣಿತೀಯ ಪದಬಳಕೆಯಿಂದ, ನಾನ್-ಫ್ಲಾಟ್ ಮತ್ತು ಫ್ಲಾಟ್ ಜ್ಯಾಮಿತಿ ಅಂದರೆ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರವನ್ನು 'ಫ್ಲಾಟ್' ([ಯೂಕ್ಲಿಡಿಯನ್](https://wikipedia.org/wiki/Euclidean_geometry)) ಅಥವಾ 'ನಾನ್-ಫ್ಲಾಟ್' (ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್) ಜ್ಯಾಮಿತೀಯ ವಿಧಾನಗಳಿಂದ ಅಳೆಯುವುದು.\n", + ">\n", + "> ಈ ಸಂದರ್ಭದಲ್ಲಿ 'ಫ್ಲಾಟ್' ಅಂದರೆ ಯೂಕ್ಲಿಡಿಯನ್ ಜ್ಯಾಮಿತಿ (ಇದರಲ್ಲಿ ಕೆಲವು ಭಾಗಗಳನ್ನು 'ಪ್ಲೇನ್' ಜ್ಯಾಮಿತಿ ಎಂದು ಕಲಿಸಲಾಗುತ್ತದೆ), ಮತ್ತು ನಾನ್-ಫ್ಲಾಟ್ ಅಂದರೆ ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ಜ್ಯಾಮಿತಿ. ಜ್ಯಾಮಿತಿಗೆ ಯಂತ್ರ ಕಲಿಕೆಗೆ ಏನು ಸಂಬಂಧ? ಗಣಿತದಲ್ಲಿ ಆಧಾರಿತ ಎರಡು ಕ್ಷೇತ್ರಗಳಾಗಿ, ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿನ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರವನ್ನು ಅಳೆಯಲು ಸಾಮಾನ್ಯ ವಿಧಾನ ಇರಬೇಕು, ಮತ್ತು ಅದು 'ಫ್ಲಾಟ್' ಅಥವಾ 'ನಾನ್-ಫ್ಲಾಟ್' ರೀತಿಯಲ್ಲಿ ಮಾಡಬಹುದು, ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. [ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು](https://wikipedia.org/wiki/Euclidean_distance) ಎರಡು ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ರೇಖೆಯ ಉದ್ದವಾಗಿ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. [ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು](https://wikipedia.org/wiki/Non-Euclidean_geometry) ವಕ್ರರೇಖೆಯ ಮೇಲೆ ಅಳೆಯಲ್ಪಡುತ್ತವೆ. ನಿಮ್ಮ ಡೇಟಾ, ದೃಶ್ಯೀಕರಿಸಿದಾಗ, ಸಮತಲದಲ್ಲಿ ಇಲ್ಲದಂತೆ ಕಾಣಿಸಿದರೆ, ಅದನ್ನು ನಿರ್ವಹಿಸಲು ವಿಶೇಷ ಆಲ್ಗಾರಿಥಮ್ ಬೇಕಾಗಬಹುದು.\n", + "\n", + "

\n", + " \n", + "

ಇನ್ಫೋಗ್ರಾಫಿಕ್: ದಾಸನಿ ಮಡಿಪಳ್ಳಿ
\n", + "\n", + "> 🎓 ['ದೂರಗಳು'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\n", + ">\n", + "> ಕ್ಲಸ್ಟರ್‌ಗಳು ಅವುಗಳ ದೂರ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮೂಲಕ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತವೆ, ಉದಾ. ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರಗಳು. ಈ ದೂರವನ್ನು ಕೆಲವು ವಿಧಾನಗಳಲ್ಲಿ ಅಳೆಯಬಹುದು. ಯೂಕ್ಲಿಡಿಯನ್ ಕ್ಲಸ್ಟರ್‌ಗಳು ಪಾಯಿಂಟ್ ಮೌಲ್ಯಗಳ ಸರಾಸರಿಯಿಂದ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತವೆ ಮತ್ತು 'ಸೆಂಟ್ರಾಯ್ಡ್' ಅಥವಾ ಕೇಂದ್ರ ಬಿಂದುವನ್ನು ಹೊಂದಿರುತ್ತವೆ. ದೂರಗಳನ್ನು ಆ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗೆ ಇರುವ ದೂರದಿಂದ ಅಳೆಯಲಾಗುತ್ತದೆ. ನಾನ್-ಯೂಕ್ಲಿಡಿಯನ್ ದೂರಗಳು 'ಕ್ಲಸ್ಟ್ರಾಯ್ಡ್‌ಗಳು'ಗೆ ಸಂಬಂಧಿಸಿದವು, ಇವು ಇತರ ಪಾಯಿಂಟ್‌ಗಳಿಗೆ ಅತ್ಯಂತ ಸಮೀಪದಲ್ಲಿರುವ ಪಾಯಿಂಟ್‌ಗಳು. ಕ್ಲಸ್ಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ವಿವಿಧ ರೀತಿಯಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು.\n", + ">\n", + "> 🎓 ['ನಿಬಂಧಿತ'](https://wikipedia.org/wiki/Constrained_clustering)\n", + ">\n", + "> [ನಿಬಂಧಿತ ಕ್ಲಸ್ಟರಿಂಗ್](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ಈ ಅನಿಯಂತ್ರಿತ ವಿಧಾನಕ್ಕೆ 'ಅರ್ಧ-ನಿಯಂತ್ರಿತ' ಕಲಿಕೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು 'ಕನೆಕ್ಟ್ ಆಗಬಾರದು' ಅಥವಾ 'ಕನೆಕ್ಟ್ ಆಗಬೇಕು' ಎಂದು ಗುರುತಿಸಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಕೆಲವು ನಿಯಮಗಳನ್ನು ಡೇಟಾಸೆಟ್ ಮೇಲೆ ಜಾರಿಗೊಳಿಸಲಾಗುತ್ತದೆ.\n", + ">\n", + "> ಉದಾಹರಣೆ: ಒಂದು ಆಲ್ಗಾರಿಥಮ್ ಲೇಬಲ್ ಮಾಡದ ಅಥವಾ ಅರ್ಧ ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾ ಬ್ಯಾಚ್ ಮೇಲೆ ಮುಕ್ತವಾಗಿದ್ದರೆ, ಅದು ಉತ್ಪಾದಿಸುವ ಕ್ಲಸ್ಟರ್‌ಗಳು ಕಡಿಮೆ ಗುಣಮಟ್ಟದಿರಬಹುದು. ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಕ್ಲಸ್ಟರ್‌ಗಳು 'ವೃತ್ತಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು', 'ಚೌಕಾಕಾರದ ಸಂಗೀತ ವಸ್ತುಗಳು', 'ತ್ರಿಭುಜಾಕಾರದ ವಸ್ತುಗಳು' ಮತ್ತು 'ಕುಕೀಸ್' ಎಂದು ಗುಂಪುಮಾಡಬಹುದು. ಕೆಲವು ನಿಯಮಗಳು ಅಥವಾ ನಿಯಂತ್ರಣಗಳು (\"ವಸ್ತು ಪ್ಲಾಸ್ಟಿಕ್‌ನಿಂದ ಮಾಡಲ್ಪಟ್ಟಿರಬೇಕು\", \"ವಸ್ತು ಸಂಗೀತ ಉತ್ಪಾದಿಸಲು ಸಾಧ್ಯವಾಗಬೇಕು\") ನೀಡಿದರೆ, ಆಲ್ಗಾರಿಥಮ್ ಉತ್ತಮ ಆಯ್ಕೆಗಳನ್ನು ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + ">\n", + "> 🎓 'ಸಾಂದ್ರತೆ'\n", + ">\n", + "> 'ಶಬ್ದ' ಇರುವ ಡೇಟಾವನ್ನು 'ಸಾಂದ್ರ' ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಪ್ರತಿ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿನ ಪಾಯಿಂಟ್‌ಗಳ ನಡುವಿನ ದೂರಗಳು ಪರಿಶೀಲನೆಯಾಗುವಾಗ ಹೆಚ್ಚು ಅಥವಾ ಕಡಿಮೆ ಸಾಂದ್ರವಾಗಿರಬಹುದು, ಅಥವಾ 'ಘನತೆ' ಅಥವಾ 'ಜನಸಂಖ್ಯೆ' ಇದ್ದಂತೆ ಕಾಣಬಹುದು, ಹೀಗಾಗಿ ಈ ಡೇಟಾವನ್ನು ಸೂಕ್ತ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನದಿಂದ ವಿಶ್ಲೇಷಿಸಬೇಕಾಗುತ್ತದೆ. [ಈ ಲೇಖನ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಮತ್ತು HDBSCAN ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಸಮಾನ ಸಾಂದ್ರತೆ ಇರುವ ಶಬ್ದ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಅನ್ವೇಷಿಸುವ ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುತ್ತದೆ.\n", + "\n", + "ಈ [ಕಲಿಕೆ ಘಟಕದಲ್ಲಿ](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಇನ್ನಷ್ಟು ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಿ\n", + "\n", + "### **ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು**\n", + "\n", + "100ಕ್ಕೂ ಹೆಚ್ಚು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳಿವೆ, ಮತ್ತು ಅವುಗಳ ಬಳಕೆ ಡೇಟಾದ ಸ್ವಭಾವದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಕೆಲವು ಪ್ರಮುಖಗಳನ್ನು ಚರ್ಚಿಸೋಣ:\n", + "\n", + "- **ಹೈರಾರ್ಕಿಕಲ್ ಕ್ಲಸ್ಟರಿಂಗ್**. ಒಂದು ವಸ್ತುವನ್ನು ಸಮೀಪದ ವಸ್ತುವಿನ ಹತ್ತಿರತೆ ಆಧರಿಸಿ ವರ್ಗೀಕರಿಸಿದರೆ, ಕ್ಲಸ್ಟರ್‌ಗಳು ಸದಸ್ಯರ ದೂರದ ಆಧಾರದ ಮೇಲೆ ರಚಿಸಲಾಗುತ್ತವೆ. ಹೈರಾರ್ಕಿಕಲ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಎರಡು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಗುರುತಿಸಲಾಗುತ್ತದೆ.\n", + "\n", + "

\n", + " \n", + "

ಇನ್ಫೋಗ್ರಾಫಿಕ್: ದಾಸನಿ ಮಡಿಪಳ್ಳಿ
\n", + "\n", + "- **ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್**. ಈ ಜನಪ್ರಿಯ ಆಲ್ಗಾರಿಥಮ್ 'k' ಅಥವಾ ರಚಿಸಬೇಕಾದ ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕಾಗುತ್ತದೆ, ನಂತರ ಆಲ್ಗಾರಿಥಮ್ ಕ್ಲಸ್ಟರ್‌ನ ಕೇಂದ್ರ ಬಿಂದುವನ್ನು ನಿರ್ಧರಿಸಿ ಆ ಬಿಂದುವಿನ ಸುತ್ತಲೂ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. [ಕೆ-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್](https://wikipedia.org/wiki/K-means_clustering) ಸೆಂಟ್ರಾಯ್ಡ್ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಜನಪ್ರಿಯ ಆವೃತ್ತಿಯಾಗಿದೆ, ಇದು ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ಪೂರ್ವನಿರ್ಧರಿತ K ಗುಂಪುಗಳಾಗಿ ವಿಭಜಿಸುತ್ತದೆ. ಕೇಂದ್ರವನ್ನು ಸಮೀಪದ ಸರಾಸರಿ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಹೆಸರಾಗಿದೆ. ಕ್ಲಸ್ಟರ್‌ನಿಂದ ಚದರ ದೂರವನ್ನು ಕನಿಷ್ಠಗೊಳಿಸಲಾಗುತ್ತದೆ.\n", + "\n", + "

\n", + " \n", + "

ಇನ್ಫೋಗ್ರಾಫಿಕ್: ದಾಸನಿ ಮಡಿಪಳ್ಳಿ
\n", + "\n", + "- **ವಿತರಣಾ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಸಾಂಖ್ಯಿಕ ಮಾದರಿಗೊಳಿಸುವಿಕೆಯಲ್ಲಿ ಆಧಾರಿತ, ವಿತರಣಾ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್ ಡೇಟಾ ಪಾಯಿಂಟ್ ಒಂದು ಕ್ಲಸ್ಟರ್‌ಗೆ ಸೇರಿದ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸಿ ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ನಿಯೋಜಿಸುತ್ತದೆ. ಗಾಸಿಯನ್ ಮಿಶ್ರಣ ವಿಧಾನಗಳು ಈ ಪ್ರಕಾರಕ್ಕೆ ಸೇರಿವೆ.\n", + "\n", + "- **ಸಾಂದ್ರತೆ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಅವುಗಳ ಸಾಂದ್ರತೆ ಅಥವಾ ಪರಸ್ಪರ ಗುಂಪುಮಾಡುವಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ಕ್ಲಸ್ಟರ್‌ಗಳಿಗೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ. ಗುಂಪಿನಿಂದ ದೂರವಿರುವ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಹೊರಗಿನ ಅಥವಾ ಶಬ್ದ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. DBSCAN, ಮೀನ್-ಶಿಫ್ಟ್ ಮತ್ತು OPTICS ಈ ಪ್ರಕಾರದ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸೇರಿವೆ.\n", + "\n", + "- **ಗ್ರಿಡ್ ಆಧಾರಿತ ಕ್ಲಸ್ಟರಿಂಗ್**. ಬಹು-ಮಾನದಂಡ ಡೇಟಾಸೆಟ್‌ಗಳಿಗೆ, ಗ್ರಿಡ್ ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಡೇಟಾವನ್ನು ಗ್ರಿಡ್‌ನ ಸೆಲ್‌ಗಳ ನಡುವೆ ಹಂಚಲಾಗುತ್ತದೆ, ಹೀಗಾಗಿ ಕ್ಲಸ್ಟರ್‌ಗಳು ರಚಿಸಲಾಗುತ್ತವೆ.\n", + "\n", + "ಕ್ಲಸ್ಟರಿಂಗ್ ಬಗ್ಗೆ ತಿಳಿಯಲು ಉತ್ತಮ ಮಾರ್ಗವೆಂದರೆ ಅದನ್ನು ಸ್ವತಃ ಪ್ರಯತ್ನಿಸುವುದು, ಹಾಗಾಗಿ ನೀವು ಈ ಅಭ್ಯಾಸದಲ್ಲಿ ಅದನ್ನು ಮಾಡುತ್ತೀರಿ.\n", + "\n", + "ಈ ಘಟಕವನ್ನು ಮುಗಿಸಲು ಕೆಲವು ಪ್ಯಾಕೇಜ್‌ಗಳು ಬೇಕಾಗುತ್ತವೆ. ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು: `install.packages(c('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork'))`\n", + "\n", + "ಬದಲಾಗಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಬೇಕಾದ ಪ್ಯಾಕೇಜ್‌ಗಳಿದ್ದರೆ ಅವುಗಳನ್ನು ಪರಿಶೀಲಿಸಿ, ಇಲ್ಲದಿದ್ದರೆ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\r\n", + "\r\n", + "pacman::p_load('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork')\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## ವ್ಯಾಯಾಮ - ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಗುಂಪುಮಾಡಿ\n", + "\n", + "ಗುಂಪುಮಾಡುವಿಕೆ ಎಂಬ ತಂತ್ರಜ್ಞಾನವು ಸರಿಯಾದ ದೃಶ್ಯೀಕರಣದಿಂದ ಬಹಳ ಸಹಾಯವಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ನಮ್ಮ ಸಂಗೀತ ಡೇಟಾವನ್ನು ದೃಶ್ಯೀಕರಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ. ಈ ವ್ಯಾಯಾಮವು ಈ ಡೇಟಾದ ಸ್ವಭಾವಕ್ಕೆ ಯಾವ ಗುಂಪುಮಾಡುವಿಕೆ ವಿಧಾನವನ್ನು ನಾವು ಅತ್ಯಂತ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಬೇಕು ಎಂದು ನಿರ್ಧರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.\n", + "\n", + "ಡೇಟಾವನ್ನು ಆಮದು ಮಾಡುವ ಮೂಲಕ ನಾವು ತಕ್ಷಣ ಪ್ರಾರಂಭಿಸೋಣ.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the core tidyverse and make it available in your current R session\r\n", + "library(tidyverse)\r\n", + "\r\n", + "# Import the data into a tibble\r\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\")\r\n", + "\r\n", + "# View the first 5 rows of the data set\r\n", + "df %>% \r\n", + " slice_head(n = 5)\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಕೆಲವೊಮ್ಮೆ, ನಾವು ನಮ್ಮ ಡೇಟಾದ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಮಾಹಿತಿಯನ್ನು ಬಯಸಬಹುದು. ನಾವು [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) ಫಂಕ್ಷನ್ ಬಳಸಿ `ಡೇಟಾ` ಮತ್ತು `ಅದರ ರಚನೆ` ಅನ್ನು ನೋಡಬಹುದು:\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Glimpse into the data set\r\n", + "df %>% \r\n", + " glimpse()\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಚೆನ್ನಾಗಿದೆ!💪\n", + "\n", + "ನಾವು ಗಮನಿಸಬಹುದು `glimpse()` ನಿಮಗೆ ಒಟ್ಟು ಸಾಲುಗಳ ಸಂಖ್ಯೆ (ನಿರೀಕ್ಷಣೆಗಳು) ಮತ್ತು ಕಾಲಮ್‌ಗಳು (ಚರಗಳು) ನೀಡುತ್ತದೆ, ನಂತರ, ಪ್ರತಿ ಚರದ ಹೆಸರು ನಂತರ ಸಾಲಿನಲ್ಲಿ ಪ್ರತಿ ಚರದ ಮೊದಲ ಕೆಲವು ಎಂಟ್ರಿಗಳನ್ನು ನೀಡುತ್ತದೆ. ಜೊತೆಗೆ, ಚರದ *ಡೇಟಾ ಪ್ರಕಾರ* ಪ್ರತಿ ಚರದ ಹೆಸರಿನ ನಂತರ ತಕ್ಷಣ `< >` ಒಳಗೆ ನೀಡಲಾಗಿದೆ.\n", + "\n", + "`DataExplorer::introduce()` ಈ ಮಾಹಿತಿಯನ್ನು ಸುಂದರವಾಗಿ ಸಾರಬಹುದು:\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Describe basic information for our data\r\n", + "df %>% \r\n", + " introduce()\r\n", + "\r\n", + "# A visual display of the same\r\n", + "df %>% \r\n", + " plot_intro()\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಅದ್ಭುತ! ನಮ್ಮ ಡೇಟಾದಲ್ಲಿ ಯಾವುದೇ ಮಿಸ್ಸಿಂಗ್ ಮೌಲ್ಯಗಳಿಲ್ಲ ಎಂದು ನಾವು ಈಗಾಗಲೇ ಕಲಿತಿದ್ದೇವೆ.\n", + "\n", + "ನಾವು ಇದರಲ್ಲಿ ಇದ್ದಾಗ, ಸಾಮಾನ್ಯ ಕೇಂದ್ರ ಪ್ರವೃತ್ತಿ ಅಂಕಿಅಂಶಗಳನ್ನು (ಉದಾ: [ಸರಾಸರಿ](https://en.wikipedia.org/wiki/Arithmetic_mean) ಮತ್ತು [ಮಧ್ಯಮ](https://en.wikipedia.org/wiki/Median)) ಮತ್ತು ವಿಸ್ತರಣೆಯ ಅಳತೆಗಳನ್ನು (ಉದಾ: [ಪ್ರಮಾಣಿತ ವ್ಯತ್ಯಾಸ](https://en.wikipedia.org/wiki/Standard_deviation)) `summarytools::descr()` ಬಳಸಿ ಅನ್ವೇಷಿಸಬಹುದು.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Describe common statistics\r\n", + "df %>% \r\n", + " descr(stats = \"common\")\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಡೇಟಾದ ಸಾಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ನೋಡೋಣ. ಜನಪ್ರಿಯತೆ `0` ಆಗಿರಬಹುದು, ಇದು ರ್ಯಾಂಕಿಂಗ್ ಇಲ್ಲದ ಹಾಡುಗಳನ್ನು ತೋರಿಸುತ್ತದೆ. ಅವುಗಳನ್ನು ನಾವು ಶೀಘ್ರದಲ್ಲೇ ತೆಗೆದುಹಾಕುತ್ತೇವೆ.\n", + "\n", + "> 🤔 ನಾವು ಕ್ಲಸ್ಟರಿಂಗ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದರೆ, ಲೇಬಲ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಅಗತ್ಯವಿಲ್ಲದ ಅನ್‌ಸೂಪರ್ವೈಸ್ಡ್ ವಿಧಾನ, ನಾವು ಈ ಡೇಟಾವನ್ನು ಲೇಬಲ್‌ಗಳೊಂದಿಗೆ ಏಕೆ ತೋರಿಸುತ್ತಿದ್ದೇವೆ? ಡೇಟಾ ಅನ್ವೇಷಣಾ ಹಂತದಲ್ಲಿ ಅವು ಸಹಾಯಕವಾಗುತ್ತವೆ, ಆದರೆ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅವು ಅಗತ್ಯವಿಲ್ಲ.\n", + "\n", + "### 1. ಜನಪ್ರಿಯ ಶೈಲಿಗಳನ್ನು ಅನ್ವೇಷಿಸಿ\n", + "\n", + "ಹಾಗಾದರೆ ನಾವು ಮುಂದುವರಿದು, ಅದು ಕಾಣಿಸುವ ಸಂದರ್ಭಗಳ ಎಣಿಕೆಯನ್ನು ಮಾಡಿ ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಶೈಲಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯೋಣ 🎶.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Popular genres\r\n", + "top_genres <- df %>% \r\n", + " count(artist_top_genre, sort = TRUE) %>% \r\n", + "# Encode to categorical and reorder the according to count\r\n", + " mutate(artist_top_genre = factor(artist_top_genre) %>% fct_inorder())\r\n", + "\r\n", + "# Print the top genres\r\n", + "top_genres\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಅದು ಚೆನ್ನಾಗಿ ನಡೆದಿತು! ಅವರು ಹೇಳುತ್ತಾರೆ ಒಂದು ಚಿತ್ರವು ಡೇಟಾ ಫ್ರೇಮ್‌ನ ಸಾವಿರ ಸಾಲುಗಳ ಮೌಲ್ಯವಿದೆ (ನಿಜವಾಗಿಯೂ ಯಾರೂ ಎಂದಿಲ್ಲ 😅). ಆದರೆ ನೀವು ಅದರ ಅರ್ಥವನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುತ್ತೀರಿ, ಅಲ್ಲವೇ?\n", + "\n", + "ವರ್ಗೀಕೃತ ಡೇಟಾವನ್ನು (ಅಕ್ಷರ ಅಥವಾ ಫ್ಯಾಕ್ಟರ್ ಚರಗಳು) ದೃಶ್ಯೀಕರಿಸುವ ಒಂದು ವಿಧಾನವೆಂದರೆ ಬಾರ್ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸುವುದು. ಟಾಪ್ 10 ಶೈಲಿಗಳ ಬಾರ್ಪ್ಲಾಟ್ ಅನ್ನು ಮಾಡೋಣ:\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Change the default gray theme\r\n", + "theme_set(theme_light())\r\n", + "\r\n", + "# Visualize popular genres\r\n", + "top_genres %>%\r\n", + " slice(1:10) %>% \r\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", + " fill = artist_top_genre)) +\r\n", + " geom_col(alpha = 0.8) +\r\n", + " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n", + " ggtitle(\"Top genres\") +\r\n", + " theme(plot.title = element_text(hjust = 0.5),\r\n", + " # Rotates the X markers (so we can read them)\r\n", + " axis.text.x = element_text(angle = 90))\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಈಗ ನಾವು `missing` ಶೈಲಿಗಳನ್ನು ಗುರುತಿಸುವುದು ಬಹಳ ಸುಲಭವಾಗಿದೆ 🧐!\n", + "\n", + "> ಒಳ್ಳೆಯ ದೃಶ್ಯೀಕರಣವು ನೀವು ನಿರೀಕ್ಷಿಸದ ವಿಷಯಗಳನ್ನು ತೋರಿಸುತ್ತದೆ, ಅಥವಾ ಡೇಟಾ ಬಗ್ಗೆ ಹೊಸ ಪ್ರಶ್ನೆಗಳನ್ನು ಎತ್ತಿಹಿಡಿಯುತ್ತದೆ - ಹ್ಯಾಡ್ಲಿ ವಿಕ್‌ಹ್ಯಾಮ್ ಮತ್ತು ಗ್ಯಾರೆಟ್ ಗ್ರೋಲೆಮಂಡ್, [R For Data Science](https://r4ds.had.co.nz/introduction.html)\n", + "\n", + "ಗಮನಿಸಿ, ಮೇಲಿನ ಶೈಲಿಯನ್ನು `Missing` ಎಂದು ವರ್ಣಿಸಿದಾಗ, ಅದು Spotify ಅದನ್ನು ವರ್ಗೀಕರಿಸದಿರುವುದನ್ನು ಅರ್ಥಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದನ್ನು ತೆಗೆದುಹಾಕೋಣ.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Visualize popular genres\r\n", + "top_genres %>%\r\n", + " filter(artist_top_genre != \"Missing\") %>% \r\n", + " slice(1:10) %>% \r\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", + " fill = artist_top_genre)) +\r\n", + " geom_col(alpha = 0.8) +\r\n", + " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n", + " ggtitle(\"Top genres\") +\r\n", + " theme(plot.title = element_text(hjust = 0.5),\r\n", + " # Rotates the X markers (so we can read them)\r\n", + " axis.text.x = element_text(angle = 90))\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಸಣ್ಣ ಡೇಟಾ ಅನ್ವೇಷಣೆಯಿಂದ, ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳು ಪ್ರಭುತ್ವ ಹೊಂದಿವೆ ಎಂದು ತಿಳಿದುಕೊಳ್ಳಬಹುದು. ನಾವು `afro dancehall`, `afropop`, ಮತ್ತು `nigerian pop` ಮೇಲೆ ಗಮನಹರಿಸೋಣ, ಜೊತೆಗೆ 0 ಜನಪ್ರಿಯತೆ ಮೌಲ್ಯವಿರುವ ಯಾವುದೇ ವಸ್ತುವನ್ನು ತೆಗೆದುಹಾಕಲು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಫಿಲ್ಟರ್ ಮಾಡೋಣ (ಅರ್ಥಾತ್ ಅದು ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಜನಪ್ರಿಯತೆಯೊಂದಿಗೆ ವರ್ಗೀಕರಿಸಲಾಗಿಲ್ಲ ಮತ್ತು ನಮ್ಮ ಉದ್ದೇಶಗಳಿಗೆ ಶಬ್ದ ಎಂದು ಪರಿಗಣಿಸಬಹುದು):\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "nigerian_songs <- df %>% \r\n", + " # Concentrate on top 3 genres\r\n", + " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \r\n", + " # Remove unclassified observations\r\n", + " filter(popularity != 0)\r\n", + "\r\n", + "\r\n", + "\r\n", + "# Visualize popular genres\r\n", + "nigerian_songs %>%\r\n", + " count(artist_top_genre) %>%\r\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", + " fill = artist_top_genre)) +\r\n", + " geom_col(alpha = 0.8) +\r\n", + " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\r\n", + " ggtitle(\"Top genres\") +\r\n", + " theme(plot.title = element_text(hjust = 0.5))\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ನಮ್ಮ ಡೇಟಾ ಸೆಟ್‌ನ ಸಂಖ್ಯಾತ್ಮಕ ಚರಗಳ ನಡುವೆ ಯಾವುದೇ ಸ್ಪಷ್ಟ ರೇಖೀಯ ಸಂಬಂಧವಿದೆಯೇ ಎಂದು ನೋಡೋಣ. ಈ ಸಂಬಂಧವನ್ನು ಗಣಿತೀಯವಾಗಿ [ಸಂಬಂಧಿತ ಅಂಕಿ](https://en.wikipedia.org/wiki/Correlation) ಮೂಲಕ ಪ್ರಮಾಣೀಕರಿಸಲಾಗುತ್ತದೆ.\n", + "\n", + "ಸಂಬಂಧಿತ ಅಂಕಿ -1 ಮತ್ತು 1 ನಡುವಿನ ಮೌಲ್ಯವಾಗಿದ್ದು, ಸಂಬಂಧದ ಬಲವನ್ನು ಸೂಚಿಸುತ್ತದೆ. 0 ಕ್ಕಿಂತ ಮೇಲ್ಪಟ್ಟ ಮೌಲ್ಯಗಳು *ಧನಾತ್ಮಕ* ಸಂಬಂಧವನ್ನು ಸೂಚಿಸುತ್ತವೆ (ಒಂದು ಚರದ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳು ಇನ್ನೊಂದು ಚರದ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಸಾಧ್ಯತೆ), ಮತ್ತು 0 ಕ್ಕಿಂತ ಕೆಳಗಿನ ಮೌಲ್ಯಗಳು *ನಕಾರಾತ್ಮಕ* ಸಂಬಂಧವನ್ನು ಸೂಚಿಸುತ್ತವೆ (ಒಂದು ಚರದ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳು ಇನ್ನೊಂದು ಚರದ ಕಡಿಮೆ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಸಾಧ್ಯತೆ).\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Narrow down to numeric variables and fid correlation\r\n", + "corr_mat <- nigerian_songs %>% \r\n", + " select(where(is.numeric)) %>% \r\n", + " cor()\r\n", + "\r\n", + "# Visualize correlation matrix\r\n", + "corrplot(corr_mat, order = 'AOE', col = c('white', 'black'), bg = 'gold2') \r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಡೇಟಾ ಬಲವಾಗಿ ಸಂಬಂಧಿತವಿಲ್ಲ, ಹೊರತು `energy` ಮತ್ತು `loudness` ನಡುವೆ, ಇದು ಅರ್ಥವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಗಟ್ಟಿಯಾದ ಸಂಗೀತವು ಸಾಮಾನ್ಯವಾಗಿ ಸಾಕಷ್ಟು ಶಕ್ತಿಶಾಲಿಯಾಗಿರುತ್ತದೆ. `Popularity` ಗೆ `release date` ಗೆ ಸಂಬಂಧವಿದೆ, ಇದು ಸಹ ಅರ್ಥವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಇತ್ತೀಚಿನ ಹಾಡುಗಳು ಬಹುಶಃ ಹೆಚ್ಚು ಜನಪ್ರಿಯವಾಗಿರುತ್ತವೆ. Length ಮತ್ತು energy ಕೂಡ ಸಂಬಂಧ ಹೊಂದಿರುವಂತೆ ತೋರುತ್ತದೆ.\n", + "\n", + "ಈ ಡೇಟಾದಿಂದ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗೋರಿದಮ್ ಏನು ಮಾಡಬಹುದು ಎಂದು ನೋಡುವುದು ಆಸಕ್ತಿದಾಯಕವಾಗಿರುತ್ತದೆ!\n", + "\n", + "> 🎓 ಗಮನಿಸಿ, ಸಂಬಂಧವು ಕಾರಣವಲ್ಲ ಎಂದು ಸೂಚಿಸುವುದಿಲ್ಲ! ನಮ್ಮ ಬಳಿ ಸಂಬಂಧದ ಸಾಬೀತು ಇದೆ ಆದರೆ ಕಾರಣದ ಸಾಬೀತು ಇಲ್ಲ. ಒಂದು [ಮನರಂಜನೀಯ ವೆಬ್ ಸೈಟ್](https://tylervigen.com/spurious-correlations) ಈ ವಿಷಯವನ್ನು ಒತ್ತಿಹೇಳುವ ಕೆಲವು ದೃಶ್ಯಗಳನ್ನು ಹೊಂದಿದೆ.\n", + "\n", + "### 2. ಡೇಟಾ ವಿತರಣೆ ಅನ್ವೇಷಣೆ\n", + "\n", + "ನಾವು ಇನ್ನಷ್ಟು ಸೂಕ್ಷ್ಮ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳೋಣ. ಜನಪ್ರಿಯತೆಯ ಆಧಾರದ ಮೇಲೆ ಅವರ ಡ್ಯಾನ್ಸಬಿಲಿಟಿ ಗ್ರಹಣೆಯಲ್ಲಿ ಶೈಲಿಗಳು ಪ್ರಮುಖವಾಗಿ ವಿಭಿನ್ನವಾಗಿದೆಯೇ? ನಾವು ನಮ್ಮ ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳ ಜನಪ್ರಿಯತೆ ಮತ್ತು ಡ್ಯಾನ್ಸಬಿಲಿಟಿ ಡೇಟಾ ವಿತರಣೆಯನ್ನು ನೀಡಲಾದ x ಮತ್ತು y ಅಕ್ಷಗಳ ಮೇಲೆ [density plots](https://www.khanacademy.org/math/ap-statistics/density-curves-normal-distribution-ap/density-curves/v/density-curves) ಬಳಸಿ ಪರಿಶೀಲಿಸೋಣ.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Perform 2D kernel density estimation\r\n", + "density_estimate_2d <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre)) +\r\n", + " geom_density_2d(bins = 5, size = 1) +\r\n", + " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " xlim(-20, 80) +\r\n", + " ylim(0, 1.2)\r\n", + "\r\n", + "# Density plot based on the popularity\r\n", + "density_estimate_pop <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = popularity, fill = artist_top_genre, color = artist_top_genre)) +\r\n", + " geom_density(size = 1, alpha = 0.5) +\r\n", + " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " theme(legend.position = \"none\")\r\n", + "\r\n", + "# Density plot based on the danceability\r\n", + "density_estimate_dance <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = danceability, fill = artist_top_genre, color = artist_top_genre)) +\r\n", + " geom_density(size = 1, alpha = 0.5) +\r\n", + " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\")\r\n", + "\r\n", + "\r\n", + "# Patch everything together\r\n", + "library(patchwork)\r\n", + "density_estimate_2d / (density_estimate_pop + density_estimate_dance)\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ನಾವು ನೋಡುತ್ತೇವೆ, ಪ್ರಕಾರವನ್ನು ಪರಿಗಣಿಸದೆ, ಸುತ್ತುವರೆದ ವೃತ್ತಗಳು ಸರಿಹೊಂದಿವೆ. ಈ ಪ್ರಕಾರಕ್ಕಾಗಿ ನೈಜೀರಿಯನ್ ರುಚಿಗಳು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ನಿರ್ದಿಷ್ಟ ಮಟ್ಟದಲ್ಲಿ ಒಗ್ಗೂಡುತ್ತವೆಯೇ?\n", + "\n", + "ಸಾಮಾನ್ಯವಾಗಿ, ಮೂರು ಪ್ರಕಾರಗಳು ಅವರ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ದೃಷ್ಟಿಯಿಂದ ಸರಿಹೊಂದಿವೆ. ಈ ಸಡಿಲವಾಗಿ ಸರಿಹೊಂದಿದ ಡೇಟಾದಲ್ಲಿ ಗುಂಪುಗಳನ್ನು ನಿರ್ಧರಿಸುವುದು ಒಂದು ಸವಾಲಾಗಿರುತ್ತದೆ. ಇದನ್ನು scatter plot ಬೆಂಬಲಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# A scatter plot of popularity and danceability\r\n", + "scatter_plot <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre, shape = artist_top_genre)) +\r\n", + " geom_point(size = 2, alpha = 0.8) +\r\n", + " paletteer::scale_color_paletteer_d(\"futurevisions::mars\")\r\n", + "\r\n", + "# Add a touch of interactivity\r\n", + "ggplotly(scatter_plot)\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "ಒಂದು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಅದೇ ಅಕ್ಷಗಳ ಮೇಲೆ ಸಮಾನವಾದ ಸಂಯೋಜನೆಯ ಮಾದರಿಯನ್ನು ತೋರಿಸುತ್ತದೆ.\n", + "\n", + "ಸಾಮಾನ್ಯವಾಗಿ, ಕ್ಲಸ್ಟರಿಂಗ್‌ಗಾಗಿ, ನೀವು ಡೇಟಾದ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸಬಹುದು, ಆದ್ದರಿಂದ ಈ ರೀತಿಯ ದೃಶ್ಯೀಕರಣವನ್ನು ನಿಪುಣರಾಗುವುದು ಬಹಳ ಉಪಯುಕ್ತವಾಗಿದೆ. ಮುಂದಿನ ಪಾಠದಲ್ಲಿ, ನಾವು ಈ ಫಿಲ್ಟರ್ ಮಾಡಿದ ಡೇಟಾವನ್ನು ತೆಗೆದುಕೊಂಡು k-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಈ ಡೇಟಾದಲ್ಲಿ ಆಸಕ್ತಿದಾಯಕ ರೀತಿಯಲ್ಲಿ ಒಟ್ಟುಗೂಡುತ್ತಿರುವ ಗುಂಪುಗಳನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೇವೆ.\n", + "\n", + "## **🚀 ಸವಾಲು**\n", + "\n", + "ಮುಂದಿನ ಪಾಠದ ತಯಾರಿಗಾಗಿ, ನೀವು ಕಂಡುಹಿಡಿಯಬಹುದಾದ ಮತ್ತು ಉತ್ಪಾದನಾ ಪರಿಸರದಲ್ಲಿ ಬಳಸಬಹುದಾದ ವಿವಿಧ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳ ಬಗ್ಗೆ ಚಾರ್ಟ್ ರಚಿಸಿ. ಕ್ಲಸ್ಟರಿಂಗ್ ಯಾವ ರೀತಿಯ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ?\n", + "\n", + "## [**ಪಾಠೋತ್ತರ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/)\n", + "\n", + "## **ಪುನರ್ ವಿಮರ್ಶೆ & ಸ್ವಯಂ ಅಧ್ಯಯನ**\n", + "\n", + "ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗಾರಿಥಮ್‌ಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು, ನಾವು ಕಲಿತಂತೆ, ನಿಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸ್ವಭಾವವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಉತ್ತಮ. ಈ ವಿಷಯದ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ [ಇಲ್ಲಿ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) ಓದಿ\n", + "\n", + "ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರಗಳನ್ನು ನಿಮ್ಮ ಅರ್ಥವನ್ನು ಗಾಢಗೊಳಿಸಿ:\n", + "\n", + "- [ಟೈಡಿಮೋಡಲ್ಸ್ ಮತ್ತು ಸ್ನೇಹಿತರನ್ನು ಬಳಸಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳನ್ನು ತರಬೇತಿ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ ಮಾಡಿ](https://rpubs.com/eR_ic/clustering)\n", + "\n", + "- ಬ್ರಾಡ್ಲಿ ಬೋಹ್ಮ್ಕೆ & ಬ್ರ್ಯಾಂಡನ್ ಗ್ರೀನ್‌ವೆಲ್, [*R ಜೊತೆಗೆ ಹ್ಯಾಂಡ್ಸ್-ಆನ್ ಮೆಷಿನ್ ಲರ್ನಿಂಗ್*](https://bradleyboehmke.github.io/HOML/)*.*\n", + "\n", + "## **ಕಾರ್ಯ**\n", + "\n", + "[ಕ್ಲಸ್ಟರಿಂಗ್‌ಗಾಗಿ ಇತರ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಸಂಶೋಧಿಸಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/assignment.md)\n", + "\n", + "## ಧನ್ಯವಾದಗಳು:\n", + "\n", + "[ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ಈ ಮಾಯಾಜಾಲದ ಮೂಲ ಪೈಥಾನ್ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಿದವರಿಗೆ ♥️\n", + "\n", + "[`ದಾಸನಿ ಮಡಿಪಳ್ಳಿ`](https://twitter.com/dasani_decoded) ಮೆಷಿನ್ ಲರ್ನಿಂಗ್ ಸಂಪ್ರದಾಯಗಳನ್ನು ಹೆಚ್ಚು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಸುಲಭವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ರಚಿಸಿದವರಿಗೆ.\n", + "\n", + "ಸಂತೋಷಕರ ಅಧ್ಯಯನ,\n", + "\n", + "[ಎರಿಕ್](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "anaconda-cloud": "", + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.1" + }, + "coopTranslator": { + "original_hash": "99c36449cad3708a435f6798cfa39972", + "translation_date": "2025-12-19T17:02:20+00:00", + "source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/1-Visualize/solution/notebook.ipynb b/translations/kn/5-Clustering/1-Visualize/solution/notebook.ipynb new file mode 100644 index 000000000..ddc27eb94 --- /dev/null +++ b/translations/kn/5-Clustering/1-Visualize/solution/notebook.ipynb @@ -0,0 +1,831 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ಸ್ಪೋಟಿಫೈಯಿಂದ ಸಂಗ್ರಹಿಸಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ - ಒಂದು ವಿಶ್ಲೇಷಣೆ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: seaborn in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (0.11.2)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (3.5.0)\n", + "Requirement already satisfied: numpy>=1.15 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.21.4)\n", + "Requirement already satisfied: pandas>=0.23 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.3.4)\n", + "Requirement already satisfied: scipy>=1.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.7.2)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (4.28.1)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (2.4.7)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (1.3.2)\n", + "Requirement already satisfied: pillow>=6.2.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (8.4.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (0.11.0)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (21.2)\n", + "Requirement already satisfied: setuptools-scm>=4 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (6.3.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (2.8.2)\n", + "Requirement already satisfied: pytz>=2017.3 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from pandas>=0.23->seaborn) (2021.3)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from python-dateutil>=2.7->matplotlib>=2.2->seaborn) (1.16.0)\n", + "Requirement already satisfied: tomli>=1.0.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from setuptools-scm>=4->matplotlib>=2.2->seaborn) (1.2.2)\n", + "Requirement already satisfied: setuptools in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from setuptools-scm>=4->matplotlib>=2.2->seaborn) (59.1.1)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "!pip install seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n", + "
" + ], + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"../../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಡೇಟಾಫ್ರೇಮ್ ಬಗ್ಗೆ ಮಾಹಿತಿ ಪಡೆಯಿರಿ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 530 entries, 0 to 529\n", + "Data columns (total 16 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 name 530 non-null object \n", + " 1 album 530 non-null object \n", + " 2 artist 530 non-null object \n", + " 3 artist_top_genre 530 non-null object \n", + " 4 release_date 530 non-null int64 \n", + " 5 length 530 non-null int64 \n", + " 6 popularity 530 non-null int64 \n", + " 7 danceability 530 non-null float64\n", + " 8 acousticness 530 non-null float64\n", + " 9 energy 530 non-null float64\n", + " 10 instrumentalness 530 non-null float64\n", + " 11 liveness 530 non-null float64\n", + " 12 loudness 530 non-null float64\n", + " 13 speechiness 530 non-null float64\n", + " 14 tempo 530 non-null float64\n", + " 15 time_signature 530 non-null int64 \n", + "dtypes: float64(8), int64(4), object(4)\n", + "memory usage: 66.4+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಶೂನ್ಯ ಮೌಲ್ಯಗಳಿಗಾಗಿ ದ್ವಿಗುಣ ಪರಿಶೀಲನೆ ಮಾಡಿ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "name 0\n", + "album 0\n", + "artist 0\n", + "artist_top_genre 0\n", + "release_date 0\n", + "length 0\n", + "popularity 0\n", + "danceability 0\n", + "acousticness 0\n", + "energy 0\n", + "instrumentalness 0\n", + "liveness 0\n", + "loudness 0\n", + "speechiness 0\n", + "tempo 0\n", + "time_signature 0\n", + "dtype: int64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಡೇಟಾದ ಸಾಮಾನ್ಯ ಮೌಲ್ಯಗಳನ್ನು ನೋಡಿ. ಜನಪ್ರಿಯತೆ '0' ಆಗಿರಬಹುದು ಎಂದು ಗಮನಿಸಿ - ಮತ್ತು ಆ ಮೌಲ್ಯ ಹೊಂದಿರುವ ಅನೇಕ ಸಾಲುಗಳಿವೆ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
release_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
count530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000
mean2015.390566222298.16981117.5075470.7416190.2654120.7606230.0163050.147308-4.9530110.130748116.4878643.986792
std3.13168839696.82225918.9922120.1175220.2083420.1485330.0903210.1235882.4641860.09293923.5186010.333701
min1998.00000089488.0000000.0000000.2550000.0006650.1110000.0000000.028300-19.3620000.02780061.6950003.000000
25%2014.000000199305.0000000.0000000.6810000.0895250.6690000.0000000.075650-6.2987500.059100102.9612504.000000
50%2016.000000218509.00000013.0000000.7610000.2205000.7845000.0000040.103500-4.5585000.097950112.7145004.000000
75%2017.000000242098.50000031.0000000.8295000.4030000.8757500.0002340.164000-3.3310000.177000125.0392504.000000
max2020.000000511738.00000073.0000000.9660000.9540000.9950000.9100000.8110000.5820000.514000206.0070005.000000
\n", + "
" + ], + "text/plain": [ + " release_date length popularity danceability acousticness \\\n", + "count 530.000000 530.000000 530.000000 530.000000 530.000000 \n", + "mean 2015.390566 222298.169811 17.507547 0.741619 0.265412 \n", + "std 3.131688 39696.822259 18.992212 0.117522 0.208342 \n", + "min 1998.000000 89488.000000 0.000000 0.255000 0.000665 \n", + "25% 2014.000000 199305.000000 0.000000 0.681000 0.089525 \n", + "50% 2016.000000 218509.000000 13.000000 0.761000 0.220500 \n", + "75% 2017.000000 242098.500000 31.000000 0.829500 0.403000 \n", + "max 2020.000000 511738.000000 73.000000 0.966000 0.954000 \n", + "\n", + " energy instrumentalness liveness loudness speechiness \\\n", + "count 530.000000 530.000000 530.000000 530.000000 530.000000 \n", + "mean 0.760623 0.016305 0.147308 -4.953011 0.130748 \n", + "std 0.148533 0.090321 0.123588 2.464186 0.092939 \n", + "min 0.111000 0.000000 0.028300 -19.362000 0.027800 \n", + "25% 0.669000 0.000000 0.075650 -6.298750 0.059100 \n", + "50% 0.784500 0.000004 0.103500 -4.558500 0.097950 \n", + "75% 0.875750 0.000234 0.164000 -3.331000 0.177000 \n", + "max 0.995000 0.910000 0.811000 0.582000 0.514000 \n", + "\n", + " tempo time_signature \n", + "count 530.000000 530.000000 \n", + "mean 116.487864 3.986792 \n", + "std 23.518601 0.333701 \n", + "min 61.695000 3.000000 \n", + "25% 102.961250 4.000000 \n", + "50% 112.714500 4.000000 \n", + "75% 125.039250 4.000000 \n", + "max 206.007000 5.000000 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ನಾವು ಶೈಲಿಗಳನ್ನು ಪರಿಶೀಲಿಸೋಣ. 'ಕಳೆದುಹೋಗಿದೆ' ಎಂದು ಪಟ್ಟಿಮಾಡಿರುವವುಗಳ ಸಂಖ್ಯೆ ಸಾಕಷ್ಟು ಇದೆ, ಅಂದರೆ ಅವು ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಯಾವುದೇ ಶೈಲಿಯಲ್ಲಿ ವರ್ಗೀಕರಿಸಲ್ಪಟ್ಟಿಲ್ಲ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top[:5].index,y=top[:5].values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'Missing' ಶೈಲಿಗಳನ್ನು ತೆಗೆದುಹಾಕಿ, ಏಕೆಂದರೆ ಅದು Spotify ನಲ್ಲಿ ವರ್ಗೀಕರಿಸಲಾಗಿಲ್ಲ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = df[df['artist_top_genre'] != 'Missing']\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಮೇಲಿನ ಮೂರು ಪ್ರಕಾರಗಳು ಡೇಟಾಸೆಟ್‌ನ ದೊಡ್ಡ ಭಾಗವನ್ನು ಹೊಂದಿವೆ, ಆದ್ದರಿಂದ ಅವುಗಳ ಮೇಲೆ ಗಮನಹರಿಸೋಣ\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಡೇಟಾ ಶಕ್ತಿಶಾಲಿಯಾಗಿ ಸಂಬಂಧ ಹೊಂದಿಲ್ಲ, ಎನರ್ಜಿ ಮತ್ತು ಲೌಡ್‌ನೆಸ್ ನಡುವೆ ಮಾತ್ರ, ಇದು ಅರ್ಥವಾಗುತ್ತದೆ. ಜನಪ್ರಿಯತೆ ಬಿಡುಗಡೆ ದಿನಾಂಕಕ್ಕೆ ಸಂಬಂಧಿಸಿದೆ, ಇದು ಸಹ ಅರ್ಥವಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಇತ್ತೀಚಿನ ಹಾಡುಗಳು ಬಹುಶಃ ಹೆಚ್ಚು ಜನಪ್ರಿಯವಾಗಿರುತ್ತವೆ. ಉದ್ದ ಮತ್ತು ಎನರ್ಜಿ ನಡುವೆ ಸಂಬಂಧವಿದೆ ಎಂದು ತೋರುತ್ತದೆ - ಬಹುಶಃ ಚಿಕ್ಕ ಹಾಡುಗಳು ಹೆಚ್ಚು ಶಕ್ತಿಶಾಲಿಯಾಗಿರುತ್ತವೆ?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "corrmat = df.corr()\n", + "f, ax = plt.subplots(figsize=(12, 9))\n", + "sns.heatmap(corrmat, vmax=.8, square=True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಜನಪ್ರಿಯತೆಯ ಆಧಾರದ ಮೇಲೆ ಅವರ ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ಗ್ರಹಿಕೆಯಲ್ಲಿ ಶೈಲಿಗಳು ಪ್ರಮುಖವಾಗಿ ಭಿನ್ನವಾಗಿದೆಯೇ? ನೀಡಲಾದ x ಮತ್ತು y ಅಕ್ಷಗಳ ಮೇಲೆ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ನಮ್ಮ ಟಾಪ್ ಮೂರು ಶೈಲಿಗಳ ಡೇಟಾ ವಿತರಣೆ ಪರಿಶೀಲಿಸಿ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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OKvs+++/H25FAXz55ZcALFiwgJycHDl53mmA3GUnIyNzRFx22WXce++9fPPNN2g0GkaMGBEWj76YMWMGxcXFXHrppQQCAaZOncq1115LY2MjZrOZ559/nurqagoKCvjjH/+IwWDg8ccf584778Tv95OcnMwTTzwRPt+mTZv46KOP0Ov1/QZolTm1kAVJRkbmiCgoKODzzz/vtX3/lBR79uzpse+OO+7gjjvu6HWMXq/npZde6rW925uuL37961//KHIE/ZiQu+xkZGRkZE4K5BaSjIzMgJKamsrixYsP65jDLS9zaiC3kGRkZGRkTgpkQZKRkZGROSmQBUlGRkZG5qRAFiQZGRkZmZMCWZBkZGSOKU1NTdx6663H5FzPPfccixYtOibnkjn5kb3sZGRkjikJCQn861//Oibnuueee47JeWRODWRBkpGROSLWrl3LK6+8gk6no6ysjIKCAv7617/S3NzM9ddfz+LFi2lsbOTee+/FarWSn5/P+vXrWbZsGU6nk8cff5zS0lKCwSC33norF1xwQTgSeGdnJzNmzKC5uZlx48Yxd+5cnnnmGVavXo3VaiUqKooXXniBuLg4pkyZwtlnn83GjRtRKpU8++yzpKWl9bC1v3QVFRUVPProo3R2dmIwGHjooYcoKiriwQcfRBAESkpKcDgc3H777Vx88cUD8C3/uJAFSUbmFMW+bQn2rcdnPk7k8JlEFp1x0HKbN2/m66+/Jj4+nssvv5wVK1aQn58f3v/EE09w7rnncs0117BgwQK++OILAF566SWGDBnCU089hcPh4MorrwxHBW9qauKrr75CpVLx4IMPAlBVVUV5eTnvvfceCoWC+++/n88//5ybb76ZlpYWJk6cyCOPPMKTTz7Jf//73/Bx+9OdrmLx4sU88MADfP7559x3333cdtttzJ49my1btnDPPffw7bffhu147733aGtrY+7cuUyePJm4uLij/WqPiL6C1p6OyGNIMjIyR0xeXh6JiYkoFApycnKwWq099q9cuZI5c+YAcNZZZ2EymQBYtWoV7733HnPmzOGaa67B5XJRWloKwODBg3tE8gbIyMjggQce4MMPP+TJJ59ky5YtPVJdTJ06NWzPD23oZv90FU1NTTQ2NlJdXc3s2bMBGDFiBGazmfLycgDmzp2LWq0mMTGRUaNGsXHjxqP6ro6OH4cgyS0k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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_theme(style=\"ticks\")\n", + "\n", + "# Show the joint distribution using kernel density estimation\n", + "g = sns.jointplot(\n", + " data=df,\n", + " x=\"popularity\", y=\"danceability\", hue=\"artist_top_genre\",\n", + " kind=\"kde\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ಸಾಮಾನ್ಯವಾಗಿ, ಮೂರು ಶೈಲಿಗಳು ಅವರ ಜನಪ್ರಿಯತೆ ಮತ್ತು ನೃತ್ಯ ಸಾಮರ್ಥ್ಯದ ದೃಷ್ಟಿಯಿಂದ ಹೊಂದಿಕೊಳ್ಳುತ್ತವೆ. ಅದೇ ಅಕ್ಷಗಳ ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಸಮಾನ ಸಂಯೋಜನೆಯ ಮಾದರಿಯನ್ನು ತೋರಿಸುತ್ತದೆ. ಪ್ರತಿ ಶೈಲಿಯ ಪ್ರಕಾರ ಡೇಟಾ ವಿತರಣೆ ಪರಿಶೀಲಿಸಲು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಪ್ರಯತ್ನಿಸಿ.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages/seaborn/axisgrid.py:337: UserWarning: The `size` parameter has been renamed to `height`; please update your code.\n", + " warnings.warn(msg, UserWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.FacetGrid(df, hue=\"artist_top_genre\", size=5) \\\n", + " .map(plt.scatter, \"popularity\", \"danceability\") \\\n", + " .add_legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + }, + "kernelspec": { + "display_name": "Python 3.7.0 64-bit ('3.7')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.9" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "c61deff2839902ac8cb4ed411eb10fee", + "translation_date": "2025-12-19T16:58:04+00:00", + "source_file": "5-Clustering/1-Visualize/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/README.md b/translations/kn/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..f54ecc0ab --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/README.md @@ -0,0 +1,263 @@ + +# K-Means ಕ್ಲಸ್ಟರಿಂಗ್ + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +ಈ ಪಾಠದಲ್ಲಿ, ನೀವು Scikit-learn ಮತ್ತು ನೀವು ಮೊದಲು ಆಮದು ಮಾಡಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ ಡೇಟಾಸೆಟ್ ಬಳಸಿ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂದು ಕಲಿಯುತ್ತೀರಿ. ನಾವು ಕ್ಲಸ್ಟರಿಂಗ್‌ಗಾಗಿ K-Means ನ ಮೂಲಭೂತಗಳನ್ನು ಆವರಿಸುವೆವು. ನೀವು ಮೊದಲು ಪಾಠದಲ್ಲಿ ಕಲಿತಂತೆ, ಕ್ಲಸ್ಟರ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಅನೇಕ ವಿಧಾನಗಳಿವೆ ಮತ್ತು ನೀವು ಬಳಸುವ ವಿಧಾನ ನಿಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ ಎಂದು ಗಮನದಲ್ಲಿಡಿ. ನಾವು K-Means ಅನ್ನು ಪ್ರಯತ್ನಿಸುವೆವು ಏಕೆಂದರೆ ಇದು ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರವಾಗಿದೆ. ಆರಂಭಿಸೋಣ! + +ನೀವು ಕಲಿಯಲಿರುವ ಪದಗಳು: + +- ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರಿಂಗ್ +- ಎಲ್ಬೋ ವಿಧಾನ +- ಇನರ್ಷಿಯಾ +- ವ್ಯತ್ಯಾಸ + +## ಪರಿಚಯ + +[K-Means ಕ್ಲಸ್ಟರಿಂಗ್](https://wikipedia.org/wiki/K-means_clustering) ಸಿಗ್ನಲ್ ಪ್ರೊಸೆಸಿಂಗ್ ಕ್ಷೇತ್ರದಿಂದ ಪಡೆದ ವಿಧಾನವಾಗಿದೆ. ಇದು 'k' ಕ್ಲಸ್ಟರ್‌ಗಳಾಗಿ ಡೇಟಾ ಗುಂಪುಗಳನ್ನು ವಿಭಜಿಸಲು ಮತ್ತು ವಿಭಾಗಿಸಲು ಉಪಯೋಗಿಸಲಾಗುತ್ತದೆ, ನಿರೀಕ್ಷಣೆಯ ಸರಣಿಯನ್ನು ಬಳಸಿ. ಪ್ರತಿ ನಿರೀಕ್ಷಣೆ ನೀಡಲಾದ ಡೇಟಾಪಾಯಿಂಟ್ ಅನ್ನು ಅದರ ಸಮೀಪದ 'ಸರಾಸರಿ' ಅಥವಾ ಕ್ಲಸ್ಟರ್‌ನ ಕೇಂದ್ರ ಬಿಂದುವಿಗೆ ಸಮೀಪವಾಗಿರುವಂತೆ ಗುಂಪು ಮಾಡುತ್ತದೆ. + +ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು [ವೊರೋನಾಯ್ ಡಯಾಗ್ರಾಮ್‌ಗಳು](https://wikipedia.org/wiki/Voronoi_diagram) ಎಂದು ದೃಶ್ಯೀಕರಿಸಬಹುದು, ಇದರಲ್ಲಿ ಒಂದು ಬಿಂದುವು (ಅಥವಾ 'ಬೀಜ') ಮತ್ತು ಅದರ ಸಂಬಂಧಿತ ಪ್ರದೇಶವನ್ನು ಒಳಗೊಂಡಿದೆ. + +![voronoi diagram](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.kn.png) + +> ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +K-Means ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಕ್ರಿಯೆ [ಮೂರು ಹಂತಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. ಆಲ್ಗಾರಿಥಮ್ ಡೇಟಾಸೆಟ್‌ನಿಂದ ಮಾದರಿಯನ್ನು ತೆಗೆದು k-ಸಂಖ್ಯೆಯ ಕೇಂದ್ರ ಬಿಂದುಗಳನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತದೆ. ಇದಾದ ನಂತರ, ಇದು ಲೂಪ್ ಮಾಡುತ್ತದೆ: + 1. ಪ್ರತಿ ಮಾದರಿಯನ್ನು ಸಮೀಪದ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗೆ ನಿಯೋಜಿಸುತ್ತದೆ. + 2. ಹಿಂದಿನ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳಿಗೆ ನಿಯೋಜಿಸಲಾದ ಎಲ್ಲಾ ಮಾದರಿಗಳ ಸರಾಸರಿ ಮೌಲ್ಯವನ್ನು ತೆಗೆದು ಹೊಸ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ರಚಿಸುತ್ತದೆ. + 3. ನಂತರ, ಹೊಸ ಮತ್ತು ಹಳೆಯ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಲೆಕ್ಕಿಸಿ, ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳು ಸ್ಥಿರವಾಗುವವರೆಗೆ ಪುನರಾವರ್ತಿಸುತ್ತದೆ. + +K-Means ಬಳಕೆಯ ಒಂದು ದೋಷವೆಂದರೆ ನೀವು 'k' ಅನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ, ಅಂದರೆ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳ ಸಂಖ್ಯೆ. ಅದೃಷ್ಟವಶಾತ್ 'ಎಲ್ಬೋ ವಿಧಾನ' 'k' ಗೆ ಉತ್ತಮ ಪ್ರಾರಂಭಿಕ ಮೌಲ್ಯವನ್ನು ಅಂದಾಜಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನೀವು ಅದನ್ನು ಕ್ಷಣದಲ್ಲೇ ಪ್ರಯತ್ನಿಸುವಿರಿ. + +## ಪೂರ್ವಾಪೇಕ್ಷಿತ + +ನೀವು ಈ ಪಾಠದ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) ಫೈಲ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತೀರಿ, ಇದರಲ್ಲಿ ನೀವು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಮಾಡಿದ ಡೇಟಾ ಆಮದು ಮತ್ತು ಪ್ರಾಥಮಿಕ ಶುದ್ಧೀಕರಣವನ್ನು ಒಳಗೊಂಡಿದೆ. + +## ವ್ಯಾಯಾಮ - ತಯಾರಿ + +ಮತ್ತೆ ಹಾಡುಗಳ ಡೇಟಾವನ್ನು ನೋಡಿ ಪ್ರಾರಂಭಿಸಿ. + +1. ಪ್ರತಿ ಕಾಲಮ್‌ಗೆ `boxplot()` ಅನ್ನು ಕರೆಸಿ ಬಾಕ್ಸ್‌ಪ್ಲಾಟ್ ರಚಿಸಿ: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + ಈ ಡೇಟಾ ಸ್ವಲ್ಪ ಶಬ್ದಮಯವಾಗಿದೆ: ಪ್ರತಿ ಕಾಲಮ್ ಅನ್ನು ಬಾಕ್ಸ್‌ಪ್ಲಾಟ್ ಆಗಿ ಗಮನಿಸಿದರೆ, ನೀವು ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ಕಾಣಬಹುದು. + + ![outliers](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.kn.png) + +ನೀವು ಡೇಟಾಸೆಟ್ ಮೂಲಕ ಹೋಗಿ ಈ ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಬಹುದು, ಆದರೆ ಅದು ಡೇಟಾವನ್ನು ಬಹಳ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. + +1. ಈಗ, ನಿಮ್ಮ ಕ್ಲಸ್ಟರಿಂಗ್ ವ್ಯಾಯಾಮಕ್ಕೆ ನೀವು ಯಾವ ಕಾಲಮ್‌ಗಳನ್ನು ಬಳಸುತ್ತೀರಿ ಎಂದು ಆಯ್ಕೆಮಾಡಿ. ಸಮಾನ ಶ್ರೇಣಿಯ ಕಾಲಮ್‌ಗಳನ್ನು ಆರಿಸಿ ಮತ್ತು `artist_top_genre` ಕಾಲಮ್ ಅನ್ನು ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ಆಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡಿ: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. ಈಗ ನೀವು ಎಷ್ಟು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಗುರಿಯಾಗಿಸಬೇಕೆಂದು ಆಯ್ಕೆಮಾಡಬೇಕು. ನೀವು ಡೇಟಾಸೆಟ್‌ನಿಂದ 3 ಹಾಡು ಶೈಲಿಗಳನ್ನು ತೆಗೆದುಕೊಂಡಿದ್ದೀರಿ, ಆದ್ದರಿಂದ 3 ಅನ್ನು ಪ್ರಯತ್ನಿಸೋಣ: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # ಪ್ರತಿ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಾಗಿ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿ + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +ನೀವು ಪ್ರತಿ ಡೇಟಾಫ್ರೇಮ್ ಸಾಲಿಗೆ ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ ಕ್ಲಸ್ಟರ್‌ಗಳ (0, 1, ಅಥವಾ 2) ಅರೆ ಅನ್ನು ಮುದ್ರಿತವಾಗಿರುವುದನ್ನು ನೋಡುತ್ತೀರಿ. + +1. ಈ ಅರೆ ಬಳಸಿ 'ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್' ಅನ್ನು ಲೆಕ್ಕಿಸಿ: + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್ + +1 ಗೆ ಸಮೀಪವಾದ ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್ ಅನ್ನು ಹುಡುಕಿ. ಈ ಸ್ಕೋರ್ -1 ರಿಂದ 1 ರವರೆಗೆ ಬದಲಾಗುತ್ತದೆ, ಮತ್ತು ಸ್ಕೋರ್ 1 ಆಗಿದ್ದರೆ, ಕ್ಲಸ್ಟರ್ ಗಟ್ಟಿಯಾಗಿದ್ದು ಇತರ ಕ್ಲಸ್ಟರ್‌ಗಳಿಂದ ಚೆನ್ನಾಗಿ ವಿಭಜಿತವಾಗಿದೆ. 0 ಗೆ ಸಮೀಪವಾದ ಮೌಲ್ಯವು ಹತ್ತಿರದ ಕ್ಲಸ್ಟರ್‌ಗಳ ನಿರ್ಧಾರ ಗಡಿಭಾಗದ ಬಳಿ ಮಾದರಿಗಳೊಂದಿಗೆ ಓವರ್‌ಲ್ಯಾಪ್ ಆಗಿರುವ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಸೂಚಿಸುತ್ತದೆ. [(ಮೂಲ)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +ನಮ್ಮ ಸ್ಕೋರ್ **.53** ಆಗಿದ್ದು, ಮಧ್ಯದಲ್ಲಿ ಇದೆ. ಇದು ನಮ್ಮ ಡೇಟಾ ಈ ರೀತಿಯ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ವಿಶೇಷವಾಗಿ ಸೂಕ್ತವಿಲ್ಲದಿರುವುದನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಆದರೆ ಮುಂದುವರಿಯೋಣ. + +### ವ್ಯಾಯಾಮ - ಮಾದರಿ ನಿರ್ಮಿಸಿ + +1. `KMeans` ಅನ್ನು ಆಮದು ಮಾಡಿ ಮತ್ತು ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸಿ. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + ಇಲ್ಲಿ ಕೆಲವು ಭಾಗಗಳನ್ನು ವಿವರಿಸುವುದು ಅಗತ್ಯ. + + > 🎓 range: ಇವು ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯ ಪುನರಾವೃತ್ತಿಗಳು + + > 🎓 random_state: "ಸೆಂಟ್ರಾಯ್ಡ್ ಪ್ರಾರಂಭಿಕರಣಕ್ಕಾಗಿ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆ ಉತ್ಪಾದನೆಯನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ." [ಮೂಲ](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "within-cluster sums of squares" ಕ್ಲಸ್ಟರ್‌ನೊಳಗಿನ ಎಲ್ಲಾ ಬಿಂದುಗಳ ಸರಾಸರಿ ದೂರದ ಚದರ ಮೌಲ್ಯವನ್ನು ಅಳೆಯುತ್ತದೆ. [ಮೂಲ](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 ಇನರ್ಷಿಯಾ: K-Means ಆಲ್ಗಾರಿಥಮ್‌ಗಳು 'ಇನರ್ಷಿಯಾ' ಅನ್ನು ಕನಿಷ್ಠಗೊಳಿಸಲು ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತವೆ, "ಕ್ಲಸ್ಟರ್‌ಗಳು ಒಳಾಂಗಣವಾಗಿ ಎಷ್ಟು ಸಮ್ಮಿಲಿತವಾಗಿವೆ ಎಂಬ ಅಳೆಯುವಿಕೆ." [ಮೂಲ](https://scikit-learn.org/stable/modules/clustering.html). ಮೌಲ್ಯವು ಪ್ರತಿ ಪುನರಾವೃತ್ತಿಯಲ್ಲಿ wcss ಚರದಲ್ಲಿ ಸೇರಿಸಲಾಗುತ್ತದೆ. + + > 🎓 k-means++: [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) ನಲ್ಲಿ ನೀವು 'k-means++' ಆಪ್ಟಿಮೈಜೆಶನ್ ಅನ್ನು ಬಳಸಬಹುದು, ಇದು "ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಪರಸ್ಪರ ದೂರದಲ್ಲಿರುವಂತೆ ಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಇದರಿಂದ ಯಾದೃಚ್ಛಿಕ ಪ್ರಾರಂಭಿಕರಣಕ್ಕಿಂತ ಉತ್ತಮ ಫಲಿತಾಂಶಗಳು ಸಾಧ್ಯ." + +### ಎಲ್ಬೋ ವಿಧಾನ + +ಹಿಂದೆ, ನೀವು 3 ಹಾಡು ಶೈಲಿಗಳನ್ನು ಗುರಿಯಾಗಿಸಿಕೊಂಡಿದ್ದೀರಿ, ಆದ್ದರಿಂದ 3 ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಬೇಕು ಎಂದು ಊಹಿಸಿದ್ದೀರಿ. ಆದರೆ ಅದು ಸರಿ ಆಗಿದೆಯೇ? + +1. 'ಎಲ್ಬೋ ವಿಧಾನ' ಬಳಸಿ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + ನೀವು ಹಿಂದಿನ ಹಂತದಲ್ಲಿ ನಿರ್ಮಿಸಿದ `wcss` ಚರವನ್ನು ಬಳಸಿ ಚಾರ್ಟ್ ರಚಿಸಿ, ಇದರಲ್ಲಿ ಎಲ್ಬೋದಲ್ಲಿ 'ವಂಗಿ' ಇರುವ ಸ್ಥಳವನ್ನು ತೋರಿಸುತ್ತದೆ, ಇದು ಅತ್ಯುತ್ತಮ ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಬಹುಶಃ ಅದು **3** ಆಗಿರಬಹುದು! + + ![elbow method](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.kn.png) + +## ವ್ಯಾಯಾಮ - ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಪ್ರದರ್ಶಿಸಿ + +1. ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ, ಈ ಬಾರಿ ಮೂರು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೊಂದಿಸಿ, ಮತ್ತು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಸ್ಕ್ಯಾಟರ್‌ಪ್ಲಾಟ್ ಆಗಿ ಪ್ರದರ್ಶಿಸಿ: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ಪರಿಶೀಲಿಸಿ: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + ಈ ಮಾದರಿಯ ನಿಖರತೆ ತುಂಬಾ ಉತ್ತಮವಿಲ್ಲ, ಮತ್ತು ಕ್ಲಸ್ಟರ್‌ಗಳ ಆಕಾರವು ಕಾರಣವನ್ನು ಸೂಚಿಸುತ್ತದೆ. + + ![clusters](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.kn.png) + + ಈ ಡೇಟಾ ತುಂಬಾ ಅಸಮತೋಲನವಾಗಿದೆ, ತುಂಬಾ ಕಡಿಮೆ ಸಂಬಂಧಿತವಾಗಿದೆ ಮತ್ತು ಕಾಲಮ್ ಮೌಲ್ಯಗಳ ನಡುವೆ ತುಂಬಾ ವ್ಯತ್ಯಾಸವಿದೆ, ಆದ್ದರಿಂದ ಚೆನ್ನಾಗಿ ಕ್ಲಸ್ಟರ್ ಆಗುವುದಿಲ್ಲ. ವಾಸ್ತವದಲ್ಲಿ, ರಚನೆಯಾಗುವ ಕ್ಲಸ್ಟರ್‌ಗಳು ಮೇಲಿನ ಮೂರು ಶೈಲಿ ವರ್ಗಗಳಿಂದ ಬಹಳ ಪ್ರಭಾವಿತ ಅಥವಾ ವಕ್ರವಾಗಿರಬಹುದು. ಅದು ಒಂದು ಕಲಿಕೆಯ ಪ್ರಕ್ರಿಯೆ! + + Scikit-learn ನ ಡಾಕ್ಯುಮೆಂಟೇಶನ್‌ನಲ್ಲಿ, ನೀವು ಈ ರೀತಿಯ ಮಾದರಿಯು, ಕ್ಲಸ್ಟರ್‌ಗಳು ಚೆನ್ನಾಗಿ ವಿಭಜಿಸಲ್ಪಡದಿರುವುದರಿಂದ, 'ವ್ಯತ್ಯಾಸ' ಸಮಸ್ಯೆಯನ್ನು ಹೊಂದಿದೆ ಎಂದು ನೋಡಬಹುದು: + + ![problem models](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.kn.png) + > Scikit-learn ನಿಂದ ಇನ್ಫೋಗ್ರಾಫಿಕ್ + +## ವ್ಯತ್ಯಾಸ + +ವ್ಯತ್ಯಾಸವನ್ನು "ಸರಾಸರಿಯಿಂದ ಚದರ ವ್ಯತ್ಯಾಸಗಳ ಸರಾಸರಿ" ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ [(ಮೂಲ)](https://www.mathsisfun.com/data/standard-deviation.html). ಈ ಕ್ಲಸ್ಟರಿಂಗ್ ಸಮಸ್ಯೆಯ ಸನ್ನಿವೇಶದಲ್ಲಿ, ಇದು ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸಂಖ್ಯೆಗಳು ಸರಾಸರಿಯಿಂದ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ವಿಭಿನ್ನವಾಗುವ倾向ವನ್ನು ಸೂಚಿಸುತ್ತದೆ. + +✅ ಇದು ಈ ಸಮಸ್ಯೆಯನ್ನು ಸರಿಪಡಿಸಲು ನೀವು ಮಾಡಬಹುದಾದ ಎಲ್ಲಾ ಮಾರ್ಗಗಳನ್ನು ಯೋಚಿಸಲು ಉತ್ತಮ ಸಮಯ. ಡೇಟಾವನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ತಿದ್ದುಪಡಿ ಮಾಡಬೇಕೆ? ವಿಭಿನ್ನ ಕಾಲಮ್‌ಗಳನ್ನು ಬಳಸಬೇಕೆ? ವಿಭಿನ್ನ ಆಲ್ಗಾರಿಥಮ್ ಬಳಸಬೇಕೆ? ಸೂಚನೆ: ನಿಮ್ಮ ಡೇಟಾವನ್ನು [ಸ್ಕೇಲ್ ಮಾಡಿ](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) ಸಾಮಾನ್ಯೀಕರಿಸಿ ಮತ್ತು ಇತರ ಕಾಲಮ್‌ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ. + +> ಈ '[ವ್ಯತ್ಯಾಸ ಕ್ಯಾಲ್ಕ್ಯುಲೇಟರ್](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ, ಈ ಕಲ್ಪನೆಯನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು. + +--- + +## 🚀ಚಾಲೆಂಜ್ + +ಈ ನೋಟ್ಬುಕ್‌ನೊಂದಿಗೆ ಸ್ವಲ್ಪ ಸಮಯ ಕಳೆಯಿರಿ, ಪರಿಮಾಣಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ. ನೀವು ಡೇಟಾವನ್ನು ಹೆಚ್ಚು ಶುದ್ಧೀಕರಿಸುವ ಮೂಲಕ (ಉದಾಹರಣೆಗೆ ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ) ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ಸುಧಾರಿಸಬಹುದೇ? ನೀವು ಕೆಲವು ಡೇಟಾ ಮಾದರಿಗಳಿಗೆ ಹೆಚ್ಚು ತೂಕ ನೀಡಲು ತೂಕಗಳನ್ನು ಬಳಸಬಹುದು. ಉತ್ತಮ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ರಚಿಸಲು ಇನ್ನೇನು ಮಾಡಬಹುದು? + +ಸೂಚನೆ: ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ಕೇಲ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ. ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಕಾಮೆಂಟ್ ಮಾಡಲಾದ ಕೋಡ್ ಇದೆ, ಇದು ಡೇಟಾ ಕಾಲಮ್‌ಗಳನ್ನು ಪರಸ್ಪರ ಸಮೀಪವಾಗುವಂತೆ ಮಾಡಲು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಸೇರಿಸುತ್ತದೆ. ನೀವು ಕಂಡುಕೊಳ್ಳುತ್ತೀರಿ, ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್ ಇಳಿಯುತ್ತದೆ, ಆದರೆ ಎಲ್ಬೋ ಗ್ರಾಫ್‌ನ 'ಕಿಂಕ್' ಸ್ಮೂತ್ ಆಗುತ್ತದೆ. ಇದಕ್ಕೆ ಕಾರಣ, ಡೇಟಾವನ್ನು ಅಸ್ಕೇಲ್ ಆಗದಂತೆ ಬಿಡುವುದರಿಂದ ಕಡಿಮೆ ವ್ಯತ್ಯಾಸವಿರುವ ಡೇಟಾ ಹೆಚ್ಚು ತೂಕವನ್ನು ಹೊಂದುತ್ತದೆ. ಈ ಸಮಸ್ಯೆಯ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಓದಿ [ಇಲ್ಲಿ](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [ಪೋಸ್ಟ್-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ & ಸ್ವಯಂ ಅಧ್ಯಯನ + +K-Means ಸಿಮ್ಯುಲೇಟರ್ ಅನ್ನು ನೋಡಿ [ಇಂತಹ ಒಂದು](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). ನೀವು ಈ ಸಾಧನವನ್ನು ಮಾದರಿ ಡೇಟಾ ಬಿಂದುಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಮತ್ತು ಅದರ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಬಳಸಬಹುದು. ನೀವು ಡೇಟಾದ ಯಾದೃಚ್ಛಿಕತೆ, ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆ ಮತ್ತು ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸಂಪಾದಿಸಬಹುದು. ಇದು ಡೇಟಾವನ್ನು ಹೇಗೆ ಗುಂಪು ಮಾಡಬಹುದು ಎಂಬುದರ ಬಗ್ಗೆ ನಿಮಗೆ ಕಲ್ಪನೆ ನೀಡುತ್ತದೆಯೇ? + +ಮತ್ತಷ್ಟು, ಸ್ಟ್ಯಾನ್‌ಫೋರ್ಡ್‌ನಿಂದ [ಈ K-Means ಹ್ಯಾಂಡ್‌ಔಟ್](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) ಅನ್ನು ನೋಡಿ. + +## ನಿಯೋಜನೆ + +[ವಿಭಿನ್ನ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/assignment.md b/translations/kn/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..7d049c286 --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,26 @@ + +# ವಿಭಿನ್ನ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ + +## ಸೂಚನೆಗಳು + +ಈ ಪಾಠದಲ್ಲಿ ನೀವು K-Means ಕ್ಲಸ್ಟರಿಂಗ್ ಬಗ್ಗೆ ಕಲಿತಿದ್ದೀರಿ. ಕೆಲವೊಮ್ಮೆ K-Means ನಿಮ್ಮ ಡೇಟಾಗೆ ಸೂಕ್ತವಾಗಿರದು. ಈ ಪಾಠಗಳಿಂದ ಅಥವಾ ಬೇರೆ ಎಲ್ಲಿಂದಾದರೂ (ನಿಮ್ಮ ಮೂಲವನ್ನು ಉಲ್ಲೇಖಿಸಿ) ಡೇಟಾ ಬಳಸಿ ಒಂದು ನೋಟ್ಬುಕ್ ರಚಿಸಿ ಮತ್ತು K-Means ಬಳಸದೆ ಬೇರೆ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನವನ್ನು ತೋರಿಸಿ. ನೀವು ಏನು ಕಲಿತಿರಿ? +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | ಚೆನ್ನಾಗಿ ದಾಖಲೆ ಮಾಡಲಾದ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಯೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಉತ್ತಮ ದಾಖಲೆ ಇಲ್ಲದೆ ಮತ್ತು/ಅಥವಾ ಅಪೂರ್ಣ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ಅಪೂರ್ಣ ಕೆಲಸ ಸಲ್ಲಿಸಲಾಗಿದೆ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/notebook.ipynb b/translations/kn/5-Clustering/2-K-Means/notebook.ipynb new file mode 100644 index 000000000..1577d01c4 --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/notebook.ipynb @@ -0,0 +1,233 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "3e5c8ab363e8d88f566d4365efc7e0bd", + "translation_date": "2025-12-19T16:50:33+00:00", + "source_file": "5-Clustering/2-K-Means/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ಸ್ಪೋಟಿಫೈಯಿಂದ ಸಂಗ್ರಹಿಸಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ - ಒಂದು ವಿಶ್ಲೇಷಣೆ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n", + "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n", + "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n", + "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install seaborn" + ] + }, + { + "source": [ + "ನಾವು ಕೊನೆಯ ಪಾಠದಲ್ಲಿ ಮುಗಿಸಿದ ಸ್ಥಳದಿಂದ ಪ್ರಾರಂಭಿಸಿ, ಡೇಟಾ ಆಮದುಮಾಡಿ ಫಿಲ್ಟರ್ ಮಾಡಲಾಗಿದೆ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n
" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "\n", + "\n", + "df = pd.read_csv(\"../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "source": [ + "ನಾವು ಕೇವಲ 3 ಶೈಲಿಗಳ ಮೇಲೆ ಮಾತ್ರ ಗಮನಹರಿಸುವೆವು. ಬಹುಶಃ ನಾವು 3 ಗುಂಪುಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "metadata": {}, + "execution_count": 7 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAHbCAYAAAAJY9SEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3de7ymc73/8dfbjNROhUwINR0msjvInk07hZLILofaiSJKTQfS+biT2NXu3O6oKL+0f6WURG0dpIOdnTJkO5UMEdNgoaQIw2f/cV1Td2ONGbO+y32vNa/n47Ee676/13Vf9yetWet9f09XqgpJkiRN3GrDLkCSJGm6MFhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiZFwh8Hvm5PuGng+fOHXZ8kTYa4QaikyZZwKfDiKr437FomImFmFYuHXYek0WWPlaShSLhXwicSFiVckfD+hNX7YzslLEg4NOG6hF8nPOdOrjUn4X8Sbkj4dsKnEz4zcPxJCT9N+H3CWQlbDxw7PeGQ/vsfEk5KWLs/tmnC4oSXJFwOnLQC13tJwqV9LZfcWd2Sph+DlaRhORR4DPBo4B+A7YA3DhyfDdwDWB94CXB0wkOWvkhCgGOBHwD3B94D7D1wfDbwdeBfgXWAtwFfXxKees8Dng9sAKwFvGrg2AxgK2ATYNc7u15/zfcD21dxH+CJwHl35T+KpKnNYCVpWJ4PHFLFNVVcBbwT2Gfg+GLg0Cpu6YcQvwf8yzjXmQNsChzWn/tD4FsDx/cFvlbF96q4vYqTgAuApw2cc2QVF1fxJ+CrwOZLvcfbq7ixiptW8HqPSrhnFb+t4hd36b+KpCnNYCXpbtf3Mq0PXDbQfBmw4cDzsSr+vNTxB45zuQf259480Hb5wOMHA3v3w3a/T/g9MHepa1058PhGYM2B57dX8dsVuV4Vv6MLjAcBVyacmPDwcWqWNE0ZrCTd7aooujDz4IHmBwELB56vm3DPpY4PBpwlFgGzEtYYaNt44PHlwGeqWGvg695VfHhFy13q+Z1er4r/qmJ7uuD2G+DwFXwfSdOAwUrSsBwDHJJw/4QH0M1Z+v8Dx1cHDk64R8JTgB2A48a5zq+AC4G3JayesA2w08Dxo4HnJGyfMKOfNL99wvorWfcyr5ewYcI/J/wdcDPwR+D2lXwfSVOQwUrSsLydbm7S+cDZwGnA+waOX0o3z+pK4CjghVVcsvRF+t6v5wJPBX4HvBX4Cl2woX/Ns+kmy19DN6T4Klby999yrjcDeHNf87XAPwIHrsz7SJqa3MdK0shJ2An4eNXKzU9KOAE4vYp/b1uZJN05e6wkTXkJWyXMTlgt4Zl0Q4EnDLsuSauemcMuQJIa2Ihu/tXadJPLX1TFBcMtSdKqyKFASZKkRhwKlCRJamQkhgLXXXfdmj179rDLkCRJWq4zzzzzmqqaNd6xkQhWs2fPZv78+cMuQ5IkabmSXLasYw4FSpIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1MnPYBbT2D2/4/LBL0DRz5vtfMOwSJElThD1WkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqZHlBqskGyf5QZILkpyf5FV9+zpJTk5yUf997b49ST6aZEGSc5JsMdn/IyRJkkbBivRYLQZeV1WbAY8HDkiyGfBm4JSqmgOc0j8HeDowp/+aBxzevGpJkqQRtNxgVVWLquqs/vENwC+ADYFdgaP7044Gdusf7wp8vjqnA2sl2aB55ZIkSSPmLs2xSjIbeBzwU2C9qlrUH7oSWK9/vCFw+cDLrujblr7WvCTzk8wfGxu7i2VLkiSNnhUOVknWBI4DXl1Vfxg8VlUF1F1546o6oqrmVtXcWbNm3ZWXSpIkjaQVClZJVqcLVV+oqq/1zVctGeLrv1/dty8ENh54+UZ9myRJ0rS2IqsCA3wW+EVVfWjg0InAvv3jfYETBtpf0K8OfDxw/cCQoSRJ0rQ1cwXO2RrYBzg3ydl921uB9wDHJtkfuAzYoz92ErAzsAC4EXhh04olSZJG1HKDVVX9GMgyDm8/zvkFHDDBuiRJkqYcd16XJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqZHlBqskRyW5Osl5A21fTnJ2/3VpkrP79tlJbho49qnJLF6SJGmUzFyBcz4HfBz4/JKGqnruksdJPghcP3D+xVW1easCJUmSporlBquqOjXJ7PGOJQmwB/CUtmVJkiRNPROdY/Uk4Kqqumig7SFJfp7kR0metKwXJpmXZH6S+WNjYxMsQ5IkafgmGqz2Ao4ZeL4IeFBVPQ54LfDFJPcd74VVdURVza2qubNmzZpgGZIkScO30sEqyUzgWcCXl7RV1c1VdW3/+EzgYuAREy1SkiRpKphIj9VTgV9W1RVLGpLMSjKjf/xQYA5wycRKlCRJmhpWZLuFY4CfAJskuSLJ/v2hPfnbYUCAbYBz+u0Xvgq8rKqua1mwJEnSqFqRVYF7LaN9v3HajgOOm3hZkiRJU487r0uSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUyHKDVZKjklyd5LyBtnckWZjk7P5r54Fjb0myIMmFSXacrMIlSZJGzYr0WH0O2Gmc9g9X1eb910kASTYD9gT+vn/NJ5PMaFWsJEnSKFtusKqqU4HrVvB6uwJfqqqbq+rXwAJgywnUJ0mSNGVMZI7VgUnO6YcK1+7bNgQuHzjnir7tDpLMSzI/yfyxsbEJlCFJkjQaVjZYHQ48DNgcWAR88K5eoKqOqKq5VTV31qxZK1mGJEnS6FipYFVVV1XVbVV1O3Akfx3uWwhsPHDqRn2bJEnStLdSwSrJBgNPdweWrBg8EdgzyRpJHgLMAX42sRIlSZKmhpnLOyHJMcB2wLpJrgAOAbZLsjlQwKXASwGq6vwkxwIXAIuBA6rqtskpXZIkabQsN1hV1V7jNH/2Ts5/F/CuiRQlSZI0FbnzuiRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNLDdYJTkqydVJzhtoe3+SXyY5J8nxSdbq22cnuSnJ2f3XpyazeEmSpFGyIj1WnwN2WqrtZOBRVfUY4FfAWwaOXVxVm/dfL2tTpiRJ0uhbbrCqqlOB65Zq+25VLe6fng5sNAm1SZIkTSkt5li9CPjWwPOHJPl5kh8ledKyXpRkXpL5SeaPjY01KEOSJGm4JhSskvwrsBj4Qt+0CHhQVT0OeC3wxST3He+1VXVEVc2tqrmzZs2aSBmSJEkjYaWDVZL9gGcAz6+qAqiqm6vq2v7xmcDFwCMa1ClJkjTyVipYJdkJeCOwS1XdONA+K8mM/vFDgTnAJS0KlSRJGnUzl3dCkmOA7YB1k1wBHEK3CnAN4OQkAKf3KwC3AQ5LcitwO/Cyqrpu3AtLkiRNM8sNVlW11zjNn13GuccBx020KEmSpKnIndclSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJamSFglWSo5JcneS8gbZ1kpyc5KL++9p9e5J8NMmCJOck2WKyipckSRolK9pj9Tlgp6Xa3gycUlVzgFP65wBPB+b0X/OAwydepiRJ0uhboWBVVacC1y3VvCtwdP/4aGC3gfbPV+d0YK0kG7QoVpIkaZRNZI7VelW1qH98JbBe/3hD4PKB867o2/5GknlJ5ieZPzY2NoEyJEmSRkOTyetVVUDdxdccUVVzq2rurFmzWpQhSZI0VBMJVlctGeLrv1/dty8ENh44b6O+TZIkaVqbSLA6Edi3f7wvcMJA+wv61YGPB64fGDKUJEmatmauyElJjgG2A9ZNcgVwCPAe4Ngk+wOXAXv0p58E7AwsAG4EXti4ZkmSpJG0QsGqqvZaxqHtxzm3gAMmUpQkSdJU5M7rkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDUyc2VfmGQT4MsDTQ8F3g6sBbwEGOvb31pVJ610hZIkSVPESgerqroQ2BwgyQxgIXA88ELgw1X1gSYVSpIkTRGthgK3By6uqssaXU+SJGnKaRWs9gSOGXh+YJJzkhyVZO3xXpBkXpL5SeaPjY2Nd4okSdKUMuFgleQewC7AV/qmw4GH0Q0TLgI+ON7rquqIqppbVXNnzZo10TIkSZKGrkWP1dOBs6rqKoCquqqqbquq24EjgS0bvIckSdLIaxGs9mJgGDDJBgPHdgfOa/AekiRJI2+lVwUCJLk3sAPw0oHm9yXZHCjg0qWOSZIkTVsTClZV9Sfg/ku17TOhiiRJkqYod16XJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKmRmcMuQNJd95vDHj3sEjTNPOjt5w67BGlasMdKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWpk5kQvkORS4AbgNmBxVc1Nsg7wZWA2cCmwR1X9bqLvJUmSNMpa9Vg9uao2r6q5/fM3A6dU1RzglP65JEnStDZZQ4G7Akf3j48Gdpuk95EkSRoZLYJVAd9NcmaSeX3belW1qH98JbDe0i9KMi/J/CTzx8bGGpQhSZI0XBOeYwU8saoWJnkAcHKSXw4erKpKUku/qKqOAI4AmDt37h2OS5IkTTUT7rGqqoX996uB44EtgauSbADQf796ou8jSZI06iYUrJLcO8l9ljwGngacB5wI7Nufti9wwkTeR5IkaSqY6FDgesDxSZZc64tV9e0kZwDHJtkfuAzYY4LvI0mSNPImFKyq6hLgseO0XwtsP5FrS5IkTTXuvC5JktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIysdrJJsnOQHSS5Icn6SV/Xt70iyMMnZ/dfO7cqVJEkaXTMn8NrFwOuq6qwk9wHOTHJyf+zDVfWBiZcnSZI0dax0sKqqRcCi/vENSX4BbNiqMEmSpKmmyRyrJLOBxwE/7ZsOTHJOkqOSrL2M18xLMj/J/LGxsRZlSJIkDdWEg1WSNYHjgFdX1R+Aw4GHAZvT9Wh9cLzXVdURVTW3qubOmjVromVIkiQN3YSCVZLV6ULVF6rqawBVdVVV3VZVtwNHAltOvExJkqTRN5FVgQE+C/yiqj400L7BwGm7A+etfHmSJElTx0RWBW4N7AOcm+Tsvu2twF5JNgcKuBR46YQqlCRJmiImsirwx0DGOXTSypcjSZI0dbnzuiRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDUyke0WJEmaNFt/bOthl6Bp5rRXnjbp72GPlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDVisJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmNGKwkSZIaMVhJkiQ1YrCSJElqxGAlSZLUiMFKkiSpEYOVJElSIwYrSZKkRgxWkiRJjRisJEmSGjFYSZIkNWKwkiRJasRgJUmS1IjBSpIkqRGDlSRJUiMGK0mSpEYMVpIkSY0YrCRJkhoxWEmSJDUyacEqyU5JLkyyIMmbJ+t9JEmSRsWkBKskM4BPAE8HNgP2SrLZZLyXJEnSqJisHqstgQVVdUlV3QJ8Cdh1kt5LkiRpJKSq2l80+Rdgp6p6cf98H2Crqjpw4Jx5wLz+6SbAhc0L0Z1ZF7hm2EVIk8yfc60K/Dm/+z24qmaNd2Dm3V3JElV1BHDEsN5/VZdkflXNHXYd0mTy51yrAn/OR8tkDQUuBDYeeL5R3yZJkjRtTVawOgOYk+QhSe4B7AmcOEnvJUmSNBImZSiwqhYnORD4DjADOKqqzp+M99JKcxhWqwJ/zrUq8Od8hEzK5HVJkqRVkTuvS5IkNWKwkiRJasRgpSaSzE1yn2HXIUnSMBms1MpLgO8ariRp6kmSYdcwXRisNCFJtgCoqpcCZwLHG640VYz3x8Q/MFrVJElVVZKtk+yfZPt+qyStBFcFakKSnA7cWFVP6Z8fDswBdq+qG4ZanLQCkmxDt6HxH4Bv9n9gVquq24dcmnS3SfJk4LPAl4FnAEcDX6+qBUMtbAqyx0oTUlWPB2Yk+Ub//OXARdhzpRG2pFcqyVzgKGBrYG/g60tClT1XWlUk2QR4GfDqqnoLsC/dB+QdhlrYFGWw0l028EdpJkBVbQvMWipc/RL4fpI1h1aotAx9r9T2wFuAF1fVK4D9gKuBjyw5Z3gVSpMvPWAb4GHAjknuXVVnAccA85KsPdQipyCDle6SJWPx/dMNk8yBv/Rc3T/JN/vnBwKnAusMp1JpudYCdgf+sX9+C/BpwLklmtYGemPXBWZW1ZHAu4DQ3YIO4Erghr5Nd4FzrLRSkrwO2Bm4J/D9qjq4bz8VoKq2GWJ50h0MTNBdD7ihqm5M8s/A14Gdq+rkJDsA76MbArnWXitNV0l2Bg4DFgJ/AvYHnk03DLga3S3v3l9V3xxakVPUpNwrUNNbkhcBu1TVtkk+Brw2yd9V1euqapsk30mycVVdPuxapSX6UPVM4JVAJTmNrodqN+A7SY6l+4R+WFVdM8RSpUmV5JHAO4EDgbOBLwL/r6r2TPJnYEfg3CWhaqmRCi2HQ4FarnEm8S4A9knySmBD4DHA3kk+BVBVOxqqNGqSPIyuN+oNwAfoQtShwLfohgSfCfxPVR2/ZP6gNE3dDFwAnFVVN1bVbsAGSQ6g68H9KfDYJHsaqu46f3louZb8o+onot9cVacmuR+wLfC+qrq4/7S/VZJ1quq6YdYrDRr4w7A2cFlV/W/f/htgK+CpVXVCkn2BY5P8uqp+OLyKpbYGhsFn0HWoXAdsAMwFftyf9iW6X/eLkxwN3Ar8wFB119ljpWVK8rAkm/WPXwt8nm45+gOq6nrg18Czk7yZrufq2YYqjYqBntZ79d/PAxYnORCgqi4ELgc2659/FfgXYNHdXKo0qfpQtStwLN0+VY8EPgF8LMmBSV5MNyy4oD//1qo6uqquGlrRU5iT1zWuJPcCPgZcRddlPA94Od2ta3YHtqALU7sBTwYOqqrzhlOtNL4kO9H9zF4CnA4U3Z5Va9J9Qv80sF9V/Y9DHpqukmwKfAb4d7qVgO8A9qHrldoR2Aj4alV9d1g1TicGKy1Tv5XCa4H7AudX1bv79g8DOwFPqqprktyzqv48xFKlO0jyeOC9dB8QHkO3jcKtdJ/aX0230/r3q+obQytSmmRJHgV8ELiwqg7q23YEPkf3O9yd1RtzKFB/Y3CielVdBLwbuB54TJLH9O2vAf4b+EE/Zn/LMGqVliXJhnQT1H/aD/G9D/gh3bySRVW1P/CGqvqGO6xrmvsV3Z5Uj0wyJ8kaVfUd4Dhg1nBLm54MVvqLwaGQJM9NshuwKV2v1fXA7gPhah7dpN/bvKeaRtBNdJNy90yyVVX9saq+DTyIrveKqlrcf7fbXtNSkhlVdQvwYrq5g68HdkmyLfAsYPEw65uuDFb6i4FQdSDdXj8A36D7Q/ReYH26bRb+vj929d1epDSOgdssPSrJdnRzqN5D11N1WJKn90PbGwO/H1qh0t2k/6B8W5KZVXUrXbhaDfhXulC1X1WdYY9tewYr/UWS1ZJsQDcZfXvgocApwM+r6hK6YcGZdBPa/aSvkdGvetoZOAF4Id1ePM+kG/47jW4DxE8AL6qqs/xjoulm4MPFnCTrL2nvt0+Y2fdcvQKYD/wdcJYLNiaHwWoVt9QfmBl0+5tcS7cr7zbAc6rq1iQv7895vbtSa9QkuTfdH419qmpfuo0/twXWo/tZPhj4I93PtzStDOxTtSNwIt0HiwOSPBz+JlzdSvfv5AF0NyB3L8tJYLBahS01p2pvYF5V3Uy3JP0gun2pbkzyPLr7SFVV3Ta8iqW/SrJa//0f6XaSvgbYBKCqTqDbt+oN/enH0n1SPyTJPe/+aqXJ04equXTDfc8EXgf8PbDbUuFqyZyr5wAf7IOWGjOtrsIGQtUBwIvo9jWhql6aZC3g1CQ/p9uder+qumJoxUq9JPeqqpuq6vYkTwQOp7tx7M+AjZPMrar5dCtXtwBmVNXVSY4AbndrEE03Se5DNwS+Rb99woL+g8dewHOTfKWqftXPuVqtD1e/HWbN05n7WK3ikqwNHAG8qaou6Zfi3twf24muJ+DSqvr1MOuU4C978vwH8Ay6rRMOp9vY8DNJHgocQLfIYjHwD8DBVXX8sOqVJsvS86OSbAJ8lG739Ff2Hzy2A54PvNvf4Xcfg9UqZrzJikm+Rrf673MDvVhbAedU1U1DKFO6gySr0wWpn9L9vD6NbthjbeAFVfXbJOvS7SK9KbCgquY7QVfTzcCcqh3othBJ/+HiEcCb6Ta/fW0frtauqt8NteBVjHOsViFLzama03/CAfgO8GDgn/pjzwXeRrdkXRolC+kmpX+Fbs7UYcDZwEFJ1q+qa6rq7Kr6Uj8c6OpVTSv9UF4l+We6HdWvoNtS5ANV9Su61dvrAx/vX3L9kEpdZdljtYpYKlS9lm5O1U3AfwH/RnfvqMfRDaE8DHheVZ07nGqlv7XUJ/T/BH5YVXv2x7amGxq8F92Qh/uradpJ8hBgtaq6uO+Z/U/gNcCSXqoNge9V1f79h+Y1quqc4VW86nLy+ipiIFQ9HngC8ERgDeAMYHFVHdzvYfVwuiGURUMrVhowEKoeSncLjmcBr07yTrqVTaf1E3V3oxsWNFhpOnoCcFGSK/p7tM6j+3k/lG4+4Wy6Ses3VdWBQ6xzlWewWoUkeSRwCF2v1GpVdVW/VP0nSR5YVa+gu+2BNDL6ULUL3bDfAuAS4NN0S8oPSvLRqvrvJOdWlbuqa1qqqi8kWRM4I8neVXVOkgcCZ/ZzqdYHPkQ3tUND5ByraWzp3aWr6hfAkXTBarsk61bVVcDWwBOTrOeO1Bo1fS/rwcCOwPF0Gxw+je4my9sCr+s3PzRUadoZ2FF9R+BRdEOAR/YrZC8F7pfkk3Q3VT6hqk729/hwOcdqmhpn88916O5y/h3g2XTDJl8HTu33+Jnh5p8aRUk2ottaYW26XdSfB3yKbhf1zwFjVXXG0AqUJlmSLYGPAK+pqtP7ebLPo/s9Dt39XP9UVT8aVo36K4cCp6mBUPUaYFe6VVRvotvs893AbcB+wK1JvgHcPpxKpTvXb0x7RZJ3AV+oqgVJPk93d4Dzq+qy4VYoTZ4kGwNvBM6tqtMBqupDfafUyXS3HTtpiCVqKQaraaa/fcE6VfWzfk7VFnQ3VX4D3f/f69NtpXAY3ZDgmVVlqNJUcC7w0n4/q2cBrzJUaRWwGDgH2DXJTlX1bfhLuJoBrDXU6nQHBqtppL+twf7A6kluBf6Xbhnu04Gdge3ptlk4iO7WHocOq1ZpJZxEt5J1F+BdVXXakOuRmh/RBFIAAAVUSURBVBtYBftPdKtgf0N3t4HfA7snubWqTgGoqvcPsVQtg5PXp4l+07gb6HamXgzsCTyiqhYC9wN+1t8f6hbgW3SrqqQpo6r+UFVHA8+tqv9ygq6moz5UPQ04ClgPOJNugdGJdD1X+/XHNaLssZomBobzdgQeC2wC3DPJZ4CfAJ/t96naDtihqq4cSqHSxN0G7qiu6affj20t4KXA7nSLji4Azuq3x/kKXa+t2+KMMFcFTiNJngR8DNgSeDywE7A63XyqNek2kbugqi4ZWpGSpDuV5E10Iw1PAZ7f77a+H3AqcKnzYkebQ4HTy5rAtVV1S1WdSrevyVPo7hm1TlV901AlSaMnyeZJDumf3hvYB9i7D1WPpVvV/UBD1ehzKHB6+RmwMMmewFeq6swkp9EF6KuGW5okadDARPUnAc8BdkxydVW9PcmmwCFJFgObA2+qqh8PtWCtEIPV9HI98GO6vaqelmQ+3T0Bn11V1wy1MkkS8NdA1YeqbYAvAAcCC4EnJ1mjqvZI8kS6jXE/3n9QjnMLR59zrKaYfvXfMruCk9wL2JRu4uOawGer6vy7qz5J0rL19/d7JPDDqrqtvzPGhlX13v5egJsD7wWOraqPDLNWrRyD1RTV/2N8EHADcMx4PVL9/dMW3+3FSZLGlWRX4CLgCrqtcbYHPky3WvvX/crAo+nmWX21qr44tGK1Upy8PgUleRHdxp8X093376Akj+6PZcn+PoYqSRotVXUCcCXwSbp7/X2X7t6XH+nnVT2G7t6YFwEbDqtOrTznWE0B44yrbwe8vqq+neRU4GC6DUHPdfxdkkbP4O/xqrouyY+Ap9Ft2nw8EOA/6Xqx9qe7HdkO/S2cFvu7fepwKHAKGFg58jLgDLpb1NwT+FD/D/QhdLv07l5Vvx9mrZKk8SXZFng08P2quiDJXnS/z79eVV9Lcu/+1C3p7o6xu3Nkpx6HAkdYkk3gL7c4eBawB/BbunC1Ft3Kv7WAR9F9yrllWLVKku5oydSMJFvRDf9tC7wxyUuq6hjgm8DeSfYA/kz3ofkJwK6GqqnJocARlWRH4PAkW9CNt78YOK+qFgGLkmwMbNO33wN4ZVXdOLSCJUl30H8w3hI4FNirqs7p9xp8Qh+ujkwyA7iwqm4Drk3y/v7erpqCDFYjKMlMuq7gg4HN6Jbf/gDYNckz+h3UP5PkfnR7nPypqsaGV7Ek6U6sBTwV2IHuRspfBW6nn0NVVZ+Ev9nfylA1hRmsRlBVLU5yMfA2uhvOPpmui/gmYJcki6vq21V1Pd2moJKkEVVV3+2nc/x7kt9W1TFJvgrMAP534DwnPU8DBqvRdQ5wI/AH4H5VdU2Sr9F9ytk3ya1VdcpQK5QkrZCqOrG/Pc2/JblHVR0NHDPsutSeqwJHxOBS3CT3AG7rd+V9Pd2NlA+pqjOSbES3iuSb/XwrSdIUkWQX4D10Q4NXelPl6cdgNQKWClUH0s2r+gPwjqr6c5K30t3/7z1V9ZMkM/pJjpKkKSbJLOfFTl8GqxGS5BXAc4HnAWcB3wPeXlUXJ3kn8HBgv6r68xDLlCRJy2CwGhFJ7gt8iG4l4HOAnYGr6bZaeHlVLUhy/6q6dohlSpKkO2GwGiFJ1gA2Bf6jqp7cbyw3RrcD7zuq6tahFihJku6UqwJHSFXdnORGYGZ/U+UHA6cAnzZUSZI0+uyxGjF9r9Wr6VaMPBB4TlVdMNyqJEnSijBYjaD+bubrA7dX1cJh1yNJklaMwUqSJKmR1YZdgCRJ0nRhsJIkSWrEYCVJktSIwUqSJKkRg5UkSVIjBitJkqRGDFaSJEmN/B/Djeb5PsBsCgAAAABJRU5ErkJggg==\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "5 Kasala Pioneers \n", + "6 Pull Up Everything Pretty \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "5 DRB Lasgidi nigerian pop 2020 184800 26 \n", + "6 prettyboydo nigerian pop 2018 202648 29 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "5 0.803 0.1270 0.525 0.000007 0.1290 -10.034 \n", + "6 0.818 0.4520 0.587 0.004490 0.5900 -9.840 \n", + "\n", + " speechiness tempo time_signature \n", + "1 0.3600 129.993 3 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 \n", + "5 0.1970 100.103 4 \n", + "6 0.1990 95.842 4 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
5KasalaPioneersDRB Lasgidinigerian pop2020184800260.8030.12700.5250.0000070.1290-10.0340.1970100.1034
6Pull UpEverything Prettyprettyboydonigerian pop2018202648290.8180.45200.5870.0044900.5900-9.8400.199095.8424
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕಾರ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/kn/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..3290319ef --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb b/translations/kn/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb new file mode 100644 index 000000000..d80ed9062 --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb @@ -0,0 +1,642 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "anaconda-cloud": "", + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.1" + }, + "colab": { + "name": "lesson_14.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "coopTranslator": { + "original_hash": "ad65fb4aad0a156b42216e4929f490fc", + "translation_date": "2025-12-19T16:56:57+00:00", + "source_file": "5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb", + "language_code": "kn" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "GULATlQXLXyR" + }, + "source": [ + "## R ಮತ್ತು ಟೈಡಿ ಡೇಟಾ ತತ್ವಗಳನ್ನು ಬಳಸಿಕೊಂಡು K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿ.\n", + "\n", + "### [**ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/)\n", + "\n", + "ಈ ಪಾಠದಲ್ಲಿ, ನೀವು Tidymodels ಪ್ಯಾಕೇಜ್ ಮತ್ತು R ಪರಿಸರದಲ್ಲಿನ ಇತರ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು (ನಾವು ಅವುಗಳನ್ನು ಸ್ನೇಹಿತರು 🧑‍🤝‍🧑 ಎಂದು ಕರೆಯುತ್ತೇವೆ) ಮತ್ತು ನೀವು ಮೊದಲು ಆಮದು ಮಾಡಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂದು ಕಲಿಯುತ್ತೀರಿ. ನಾವು K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಮೂಲಭೂತಗಳನ್ನು ಆವರಿಸುವೆವು. ನೀವು ಮೊದಲು ಪಾಠದಲ್ಲಿ ಕಲಿತಂತೆ, ಕ್ಲಸ್ಟರ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಅನೇಕ ವಿಧಾನಗಳಿವೆ ಮತ್ತು ನೀವು ಬಳಸುವ ವಿಧಾನ ನಿಮ್ಮ ಡೇಟಾದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ ಎಂದು ಗಮನದಲ್ಲಿರಿಸಿ. K-ಮೀನ್ಸ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸೋಣ ಏಕೆಂದರೆ ಇದು ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರವಾಗಿದೆ. ಆರಂಭಿಸೋಣ!\n", + "\n", + "ನೀವು ಕಲಿಯಲಿರುವ ಪದಗಳು:\n", + "\n", + "- ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರಿಂಗ್\n", + "\n", + "- ಎಲ್ಬೋ ವಿಧಾನ\n", + "\n", + "- ಇನರ್ಷಿಯಾ\n", + "\n", + "- ವ್ಯತ್ಯಾಸ\n", + "\n", + "### **ಪರಿಚಯ**\n", + "\n", + "[K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್](https://wikipedia.org/wiki/K-means_clustering) ಸಿಗ್ನಲ್ ಪ್ರೊಸೆಸಿಂಗ್ ಕ್ಷೇತ್ರದಿಂದ ಪಡೆದ ವಿಧಾನವಾಗಿದೆ. ಇದು ಡೇಟಾದ ಗುಂಪುಗಳನ್ನು ಅವುಗಳ ಲಕ್ಷಣಗಳಲ್ಲಿ ಹೊಂದಾಣಿಕೆಯ ಆಧಾರದ ಮೇಲೆ `k ಕ್ಲಸ್ಟರ್‌ಗಳು` ಎಂದು ವಿಭಜಿಸಲು ಮತ್ತು ವಿಭಾಗಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.\n", + "\n", + "ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು [ವೊರೋನಾಯ್ ಡಯಾಗ್ರಾಮ್‌ಗಳು](https://wikipedia.org/wiki/Voronoi_diagram) ಎಂದು ದೃಶ್ಯೀಕರಿಸಬಹುದು, ಇದರಲ್ಲಿ ಒಂದು ಬಿಂದು (ಅಥವಾ 'ಬೀಜ') ಮತ್ತು ಅದರ ಸಂಬಂಧಿತ ಪ್ರದೇಶವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.\n", + "\n", + "

\n", + " \n", + "

ಜೆನ್ ಲೂಪರ್ ಅವರ ಇನ್ಫೋಗ್ರಾಫಿಕ್
\n", + "\n", + "\n", + "K-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಕೆಳಗಿನ ಹಂತಗಳಿವೆ:\n", + "\n", + "1. ಡೇಟಾ ವಿಜ್ಞಾನಿ ರಚಿಸಲು ಬಯಸುವ ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸುತ್ತಾನೆ.\n", + "\n", + "2. ನಂತರ, ಆಲ್ಗಾರಿಥಮ್ ಡೇಟಾ ಸೆಟ್‌ನಿಂದ ಯಾದೃಚ್ಛಿಕವಾಗಿ K ವೀಕ್ಷಣೆಗಳನ್ನು ಆರಿಸಿಕೊಂಡು ಅವುಗಳನ್ನು ಕ್ಲಸ್ಟರ್‌ಗಳ ಪ್ರಾಥಮಿಕ ಕೇಂದ್ರಗಳಾಗಿ (ಅಥವಾ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳು) ಬಳಸುತ್ತದೆ.\n", + "\n", + "3. ನಂತರ, ಉಳಿದ ಪ್ರತಿಯೊಂದು ವೀಕ್ಷಣೆಯನ್ನು ಅದರ ಅತಿ ಸಮೀಪದ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ.\n", + "\n", + "4. ನಂತರ, ಪ್ರತಿ ಕ್ಲಸ್ಟರ್‌ನ ಹೊಸ ಸರಾಸರಿ ಲೆಕ್ಕಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಸೆಂಟ್ರಾಯ್ಡ್ ಅನ್ನು ಆ ಸರಾಸರಿಗೇ ಸರಿಸಲಾಗುತ್ತದೆ.\n", + "\n", + "5. ಈಗ ಕೇಂದ್ರಗಳನ್ನು ಮರು ಲೆಕ್ಕಿಸಿದ ನಂತರ, ಪ್ರತಿಯೊಂದು ವೀಕ್ಷಣೆಯನ್ನು ಮತ್ತೆ ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ ಅದು ಬೇರೆ ಕ್ಲಸ್ಟರ್‌ಗೆ ಹೆಚ್ಚು ಸಮೀಪವಿದೆಯೇ ಎಂದು ನೋಡಲು. ಎಲ್ಲಾ ವಸ್ತುಗಳನ್ನು ನವೀಕೃತ ಕ್ಲಸ್ಟರ್ ಸರಾಸರಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಮತ್ತೆ ನಿಯೋಜಿಸಲಾಗುತ್ತದೆ. ಕ್ಲಸ್ಟರ್ ನಿಯೋಜನೆ ಮತ್ತು ಸೆಂಟ್ರಾಯ್ಡ್ ನವೀಕರಣ ಹಂತಗಳನ್ನು ಪುನರಾವರ್ತಿಸಲಾಗುತ್ತದೆ, ಕ್ಲಸ್ಟರ್ ನಿಯೋಜನೆಗಳು ಬದಲಾಗದವರೆಗೆ (ಅಥವಾ ಸಮೀಕರಣ ಸಾಧನೆಯಾಗುವವರೆಗೆ). ಸಾಮಾನ್ಯವಾಗಿ, ಆಲ್ಗಾರಿಥಮ್ ಪ್ರತಿ ಹೊಸ ಪುನರಾವೃತ್ತಿಯಲ್ಲಿ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳ ಚಲನೆಯು ಅಲ್ಪವಾಗುವಾಗ ಮತ್ತು ಕ್ಲಸ್ಟರ್‌ಗಳು ಸ್ಥಿರವಾಗುವಾಗ ನಿಲ್ಲುತ್ತದೆ.\n", + "\n", + "
\n", + "\n", + "> ಪ್ರಾಥಮಿಕ k ವೀಕ್ಷಣೆಗಳನ್ನು ಯಾದೃಚ್ಛಿಕವಾಗಿ ಆರಿಸುವುದರಿಂದ, ಪ್ರತಿ ಬಾರಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಅನ್ವಯಿಸುವಾಗ ಸ್ವಲ್ಪ ವಿಭಿನ್ನ ಫಲಿತಾಂಶಗಳನ್ನು ಪಡೆಯಬಹುದು. ಈ ಕಾರಣಕ್ಕಾಗಿ, ಹೆಚ್ಚಿನ ಆಲ್ಗಾರಿಥಮ್‌ಗಳು ಹಲವಾರು *ಯಾದೃಚ್ಛಿಕ ಪ್ರಾರಂಭಗಳನ್ನು* ಬಳಸುತ್ತವೆ ಮತ್ತು ಕಡಿಮೆ WCSS ಇರುವ ಪುನರಾವೃತ್ತಿಯನ್ನು ಆಯ್ಕೆಮಾಡುತ್ತವೆ. ಆದ್ದರಿಂದ, *ಅನಗತ್ಯ ಸ್ಥಳೀಯ ಗರಿಷ್ಠವನ್ನು* ತಪ್ಪಿಸಲು K-ಮೀನ್ಸ್ ಅನ್ನು ಹಲವಾರು *nstart* ಮೌಲ್ಯಗಳೊಂದಿಗೆ ನಿರಂತರವಾಗಿ ನಡೆಸುವಂತೆ ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ.\n", + "\n", + "
\n", + "\n", + "Allison Horst ಅವರ [ಕಲಾಕೃತಿ](https://github.com/allisonhorst/stats-illustrations) ಬಳಸಿ ಈ ಚಿಕ್ಕ ಅನಿಮೇಷನ್ ಕ್ಲಸ್ಟರಿಂಗ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ವಿವರಿಸುತ್ತದೆ:\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n", + "\n", + "\n", + "\n", + "ಕ್ಲಸ್ಟರಿಂಗ್‌ನಲ್ಲಿ ಉದ್ಭವಿಸುವ ಮೂಲಭೂತ ಪ್ರಶ್ನೆ ಏನೆಂದರೆ: ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಎಷ್ಟು ಕ್ಲಸ್ಟರ್‌ಗಳಾಗಿ ವಿಭಜಿಸಬೇಕು ಎಂದು ನೀವು ಹೇಗೆ ತಿಳಿಯುತ್ತೀರಿ? K-ಮೀನ್ಸ್ ಬಳಕೆಯ ಒಂದು ದುರ್ಬಲತೆ ಎಂದರೆ ನೀವು `k` ಅನ್ನು, ಅಂದರೆ `ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳ` ಸಂಖ್ಯೆಯನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ಅದೃಷ್ಟವಶಾತ್, `ಎಲ್ಬೋ ವಿಧಾನ` ಉತ್ತಮ ಪ್ರಾರಂಭಿಕ ಮೌಲ್ಯವನ್ನು ಅಂದಾಜಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನೀವು ಅದನ್ನು ಕ್ಷಣದಲ್ಲೇ ಪ್ರಯತ್ನಿಸುವಿರಿ.\n", + "\n", + "### \n", + "\n", + "**ಪೂರ್ವಾಪೇಕ್ಷಿತ**\n", + "\n", + "ನಾವು [ಹಿಂದಿನ ಪಾಠ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) ನಿಂದ ನಿಲ್ಲಿಸಿದ ಸ್ಥಳದಿಂದಲೇ ಪ್ರಾರಂಭಿಸುವೆವು, ಅಲ್ಲಿ ನಾವು ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಿ, ಅನೇಕ ದೃಶ್ಯೀಕರಣಗಳನ್ನು ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ಆಸಕ್ತಿಯ ವೀಕ್ಷಣೆಗಳಿಗೆ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಿದ್ದೇವೆ. ಅದನ್ನು ಖಚಿತವಾಗಿ ಪರಿಶೀಲಿಸಿ!\n", + "\n", + "ಈ ಘಟಕವನ್ನು ಮುಗಿಸಲು ಕೆಲವು ಪ್ಯಾಕೇಜ್‌ಗಳು ಬೇಕಾಗುತ್ತವೆ. ನೀವು ಅವುಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬಹುದು: `install.packages(c('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork'))`\n", + "\n", + "ಬದಲಾಗಿ, ಕೆಳಗಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಘಟಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೇಜ್‌ಗಳು ನಿಮ್ಮ ಬಳಿ ಇದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ಕೆಲವು ಇಲ್ಲದಿದ್ದರೆ ಅವುಗಳನ್ನು ನಿಮ್ಮಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ah_tBi58LXyi" + }, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork')\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7e--UCUTLXym" + }, + "source": [ + "ನಾವು ತಕ್ಷಣವೇ ಪ್ರಾರಂಭಿಸೋಣ!\n", + "\n", + "## 1. ಡೇಟಾದೊಂದಿಗೆ ನೃತ್ಯ: 3 ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಸಂಗೀತ ಶೈಲಿಗಳನ್ನು ನಿಗದಿಪಡಿಸಿ\n", + "\n", + "ಇದು ನಾವು ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ಮಾಡಿದ工作的 ಪುನರಾವೃತ್ತಿ. ನಾವು ಕೆಲವು ಡೇಟಾವನ್ನು ಕತ್ತರಿಸಿ ತುಂಡುಮಾಡೋಣ!\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Ycamx7GGLXyn" + }, + "source": [ + "# Load the core tidyverse and make it available in your current R session\n", + "library(tidyverse)\n", + "\n", + "# Import the data into a tibble\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\", show_col_types = FALSE)\n", + "\n", + "# Narrow down to top 3 popular genres\n", + "nigerian_songs <- df %>% \n", + " # Concentrate on top 3 genres\n", + " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \n", + " # Remove unclassified observations\n", + " filter(popularity != 0)\n", + "\n", + "\n", + "\n", + "# Visualize popular genres using bar plots\n", + "theme_set(theme_light())\n", + "nigerian_songs %>%\n", + " count(artist_top_genre) %>%\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\n", + " fill = artist_top_genre)) +\n", + " geom_col(alpha = 0.8) +\n", + " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\n", + " ggtitle(\"Top genres\") +\n", + " theme(plot.title = element_text(hjust = 0.5))\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b5h5zmkPLXyp" + }, + "source": [ + "🤩 ಅದೊಂದು ಚೆನ್ನಾಗಿ ನಡೆದಿತು!\n", + "\n", + "## 2. ಇನ್ನಷ್ಟು ಡೇಟಾ ಅನ್ವೇಷಣೆ.\n", + "\n", + "ಈ ಡೇಟಾ ಎಷ್ಟು ಸ್ವಚ್ಛವಾಗಿದೆ? ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸಿ ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸೋಣ. ನಾವು ಕಡಿಮೆ ಔಟ್‌ಲೈಯರ್‌ಗಳಿರುವ ಸಂಖ್ಯಾತ್ಮಕ ಕಾಲಮ್‌ಗಳ ಮೇಲೆ ಗಮನಹರಿಸುವೆವು (ನೀವು ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಬಹುದು). ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳು ಡೇಟಾದ ವ್ಯಾಪ್ತಿಯನ್ನು ತೋರಿಸಬಹುದು ಮತ್ತು ಯಾವ ಕಾಲಮ್‌ಗಳನ್ನು ಬಳಸಬೇಕೆಂದು ಆಯ್ಕೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ಗಮನಿಸಿ, ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳು ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುವುದಿಲ್ಲ, ಇದು ಉತ್ತಮ ಕ್ಲಸ್ಟರ್ ಮಾಡಬಹುದಾದ ಡೇಟಾದ ಪ್ರಮುಖ ಅಂಶವಾಗಿದೆ. ಹೆಚ್ಚಿನ ಓದಿಗಾಗಿ ದಯವಿಟ್ಟು [ಈ ಚರ್ಚೆಯನ್ನು](https://stats.stackexchange.com/questions/91536/deduce-variance-from-boxplot) ನೋಡಿ.\n", + "\n", + "[ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳು](https://en.wikipedia.org/wiki/Box_plot) ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾದ ವಿತರಣೆಗಳನ್ನು ಗ್ರಾಫಿಕಲ್ ಆಗಿ ಚಿತ್ರಿಸಲು ಬಳಸಲಾಗುತ್ತವೆ, ಆದ್ದರಿಂದ ಜನಪ್ರಿಯ ಸಂಗೀತ ಶೈಲಿಗಳ ಜೊತೆಗೆ ಎಲ್ಲಾ ಸಂಖ್ಯಾತ್ಮಕ ಕಾಲಮ್‌ಗಳನ್ನು *ಆಯ್ಕೆ* ಮಾಡುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HhNreJKLLXyq" + }, + "source": [ + "# Select top genre column and all other numeric columns\n", + "df_numeric <- nigerian_songs %>% \n", + " select(artist_top_genre, where(is.numeric)) \n", + "\n", + "# Display the data\n", + "df_numeric %>% \n", + " slice_head(n = 5)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uYXrwJRaLXyq" + }, + "source": [ + "ಎಲ್ಲಾ ಆಯ್ಕೆ ಸಹಾಯಕ `where` ಇದನ್ನು ಸುಲಭವಾಗಿಸುತ್ತದೆ 💁? ಇಂತಹ ಇತರ ಕಾರ್ಯಗಳನ್ನು [ಇಲ್ಲಿ](https://tidyselect.r-lib.org/) ಅನ್ವೇಷಿಸಿ.\n", + "\n", + "ನಾವು ಪ್ರತಿ ಸಂಖ್ಯಾತ್ಮಕ ಲಕ್ಷಣಗಳಿಗಾಗಿ ಬಾಕ್ಸ್‌ಪ್ಲಾಟ್ ಮಾಡಲಿದ್ದೇವೆ ಮತ್ತು ಲೂಪ್ಗಳನ್ನು ಬಳಸುವುದನ್ನು ತಪ್ಪಿಸಲು ಬಯಸುತ್ತೇವೆ, ಆದ್ದರಿಂದ ನಮ್ಮ ಡೇಟಾವನ್ನು *ದೀರ್ಘ* ಸ್ವರೂಪಕ್ಕೆ ಮರುರೂಪಗೊಳಿಸೋಣ, ಇದು ನಮಗೆ `facets` - ಪ್ರತಿ ಉಪಸಮೂಹವನ್ನು ಪ್ರದರ್ಶಿಸುವ ಉಪಚಿತ್ರಗಳನ್ನು ಬಳಸಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gd5bR3f8LXys" + }, + "source": [ + "# Pivot data from wide to long\n", + "df_numeric_long <- df_numeric %>% \n", + " pivot_longer(!artist_top_genre, names_to = \"feature_names\", values_to = \"values\") \n", + "\n", + "# Print out data\n", + "df_numeric_long %>% \n", + " slice_head(n = 15)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-7tE1swnLXyv" + }, + "source": [ + "ಬಹಳ ಹೆಚ್ಚು! ಈಗ ಕೆಲವು `ggplots` ಸಮಯ! ಆದ್ದರಿಂದ ನಾವು ಯಾವ `geom` ಅನ್ನು ಬಳಸಲಿದ್ದೇವೆ?\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "r88bIsyuLXyy" + }, + "source": [ + "# Make a box plot\n", + "df_numeric_long %>% \n", + " ggplot(mapping = aes(x = feature_names, y = values, fill = feature_names)) +\n", + " geom_boxplot() +\n", + " facet_wrap(~ feature_names, ncol = 4, scales = \"free\") +\n", + " theme(legend.position = \"none\")\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EYVyKIUELXyz" + }, + "source": [ + "Easy-gg!\n", + "\n", + "ಈಗ ನಾವು ಈ ಡೇಟಾ ಸ್ವಲ್ಪ ಶಬ್ದಮಯವಾಗಿದೆ ಎಂದು ನೋಡಬಹುದು: ಪ್ರತಿ ಕಾಲಮ್ ಅನ್ನು ಬಾಕ್ಸ್‌ಪ್ಲಾಟ್ ಆಗಿ ಗಮನಿಸುವ ಮೂಲಕ, ನೀವು ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ನೋಡಬಹುದು. ನೀವು ಡೇಟಾಸೆಟ್ ಮೂಲಕ ಹೋಗಿ ಈ ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಬಹುದು, ಆದರೆ ಅದು ಡೇಟಾವನ್ನು ಬಹಳ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.\n", + "\n", + "ಈಗ, ನಾವು ನಮ್ಮ ಕ್ಲಸ್ಟರಿಂಗ್ ವ್ಯಾಯಾಮಕ್ಕಾಗಿ ಯಾವ ಕಾಲಮ್‌ಗಳನ್ನು ಬಳಸುವುದೆಂದು ಆಯ್ಕೆ ಮಾಡೋಣ. ಸಮಾನ ಶ್ರೇಣಿಗಳಿರುವ ಸಂಖ್ಯಾತ್ಮಕ ಕಾಲಮ್‌ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡೋಣ. ನಾವು `artist_top_genre` ಅನ್ನು ಸಂಖ್ಯಾತ್ಮಕವಾಗಿ ಎನ್‌ಕೋಡ್ ಮಾಡಬಹುದು ಆದರೆ ಈಗ ಅದನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತೇವೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-wkpINyZLXy0" + }, + "source": [ + "# Select variables with similar ranges\n", + "df_numeric_select <- df_numeric %>% \n", + " select(popularity, danceability, acousticness, loudness, energy) \n", + "\n", + "# Normalize data\n", + "# df_numeric_select <- scale(df_numeric_select)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D7dLzgpqLXy1" + }, + "source": [ + "## 3. R ನಲ್ಲಿ k-means ಕ್ಲಸ್ಟರಿಂಗ್ ಲೆಕ್ಕಹಾಕುವುದು\n", + "\n", + "ನಾವು R ನಲ್ಲಿ ನಿರ್ಮಿತ `kmeans` ಫಂಕ್ಷನ್ ಬಳಸಿ k-means ಅನ್ನು ಲೆಕ್ಕಹಾಕಬಹುದು, `help(\"kmeans()\")` ನೋಡಿ. `kmeans()` ಫಂಕ್ಷನ್ ತನ್ನ ಪ್ರಾಥಮಿಕ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ಎಲ್ಲಾ ಸಂಖ್ಯಾತ್ಮಕ ಕಾಲಮ್‌ಗಳಿರುವ ಡೇಟಾ ಫ್ರೇಮ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ.\n", + "\n", + "k-means ಕ್ಲಸ್ಟರಿಂಗ್ ಬಳಸುವ ಮೊದಲ ಹಂತವು ಅಂತಿಮ ಪರಿಹಾರದಲ್ಲಿ ರಚಿಸಲಾಗುವ ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆ (k) ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವುದು. ನಾವು ಡೇಟಾಸೆಟ್‌ನಿಂದ 3 ಹಾಡು ಶೈಲಿಗಳನ್ನು ಹೊರತೆಗೆಯಲಾಗಿದೆ ಎಂದು ತಿಳಿದಿದ್ದೇವೆ, ಆದ್ದರಿಂದ 3 ಅನ್ನು ಪ್ರಯತ್ನಿಸೋಣ:\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uC4EQ5w7LXy5" + }, + "source": [ + "set.seed(2056)\n", + "# Kmeans clustering for 3 clusters\n", + "kclust <- kmeans(\n", + " df_numeric_select,\n", + " # Specify the number of clusters\n", + " centers = 3,\n", + " # How many random initial configurations\n", + " nstart = 25\n", + ")\n", + "\n", + "# Display clustering object\n", + "kclust\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hzfhscWrLXy-" + }, + "source": [ + "kmeans ವಸ್ತುವಿನಲ್ಲಿ ಹಲವಾರು ಮಾಹಿತಿಯ ತುಂಡುಗಳು ಇವೆ, ಅವುಗಳನ್ನು `help(\"kmeans()\")` ನಲ್ಲಿ ಚೆನ್ನಾಗಿ ವಿವರಿಸಲಾಗಿದೆ. ಈಗ, ಕೆಲವು ವಿಷಯಗಳ ಮೇಲೆ ಗಮನಹರಿಸೋಣ. ಡೇಟಾ 65, 110, 111 ಗಾತ್ರದ 3 ಗುಂಪುಗಳಾಗಿ ಗುಂಪುಬದ್ಧಗೊಂಡಿದೆ ಎಂದು ನಾವು ನೋಡುತ್ತೇವೆ. ಔಟ್‌ಪುಟ್‌ನಲ್ಲಿ 5 ಚರಗಳಾದ 3 ಗುಂಪುಗಳ ಕ್ಲಸ್ಟರ್ ಕೇಂದ್ರಗಳು (ಸರಾಸರಿ) ಕೂಡ ಸೇರಿವೆ.\n", + "\n", + "ಕ್ಲಸ್ಟರಿಂಗ್ ವೆಕ್ಟರ್ ಪ್ರತಿ ವೀಕ್ಷಣೆಯ ಕ್ಲಸ್ಟರ್ ನಿಯೋಜನೆ ಆಗಿದೆ. ಮೂಲ ಡೇಟಾ ಸೆಟ್‌ಗೆ ಕ್ಲಸ್ಟರ್ ನಿಯೋಜನೆಯನ್ನು ಸೇರಿಸಲು `augment` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0XwwpFGQLXy_" + }, + "source": [ + "# Add predicted cluster assignment to data set\n", + "augment(kclust, df_numeric_select) %>% \n", + " relocate(.cluster) %>% \n", + " slice_head(n = 10)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NXIVXXACLXzA" + }, + "source": [ + "ಪರಿಪೂರ್ಣ, ನಾವು ನಮ್ಮ ಡೇಟಾ ಸೆಟ್ ಅನ್ನು 3 ಗುಂಪುಗಳ ಸೆಟ್ ಆಗಿ ವಿಭಜಿಸಿದ್ದೇವೆ. ಹಾಗಾದರೆ, ನಮ್ಮ ಕ್ಲಸ್ಟರಿಂಗ್ ಎಷ್ಟು ಉತ್ತಮವಾಗಿದೆ 🤷? ಬನ್ನಿ, `Silhouette score` ಅನ್ನು ನೋಡೋಣ\n", + "\n", + "### **Silhouette score**\n", + "\n", + "[Silhouette ವಿಶ್ಲೇಷಣೆ](https://en.wikipedia.org/wiki/Silhouette_(clustering)) ಫಲಿತಾಂಶ ಕ್ಲಸ್ಟರ್‌ಗಳ ನಡುವಿನ ವಿಭಜನೆ ದೂರವನ್ನು ಅಧ್ಯಯನ ಮಾಡಲು ಬಳಸಬಹುದು. ಈ ಸ್ಕೋರ್ -1 ರಿಂದ 1 ರವರೆಗೆ ಬದಲಾಗುತ್ತದೆ, ಮತ್ತು ಸ್ಕೋರ್ 1 ಗೆ ಹತ್ತಿರ ಇದ್ದರೆ, ಕ್ಲಸ್ಟರ್ ಗಟ್ಟಿಯಾಗಿದ್ದು ಇತರ ಕ್ಲಸ್ಟರ್‌ಗಳಿಂದ ಚೆನ್ನಾಗಿ ವಿಭಜಿಸಲಾಗಿದೆ. 0 ಗೆ ಹತ್ತಿರದ ಮೌಲ್ಯವು ಹತ್ತಿರದ ಕ್ಲಸ್ಟರ್‌ಗಳ ನಿರ್ಧಾರ ಗಡಿಬಿಡಿಯ ಬಳಿ ಮಾದರಿಗಳೊಂದಿಗೆ ಒತ್ತಡದ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.[ಮೂಲ](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam).\n", + "\n", + "ಸರಾಸರಿ silhouette ವಿಧಾನವು ವಿಭಿನ್ನ *k* ಮೌಲ್ಯಗಳಿಗಾಗಿ ವೀಕ್ಷಣೆಗಳ ಸರಾಸರಿ silhouette ಅನ್ನು ಲೆಕ್ಕಹಾಕುತ್ತದೆ. ಉನ್ನತ ಸರಾಸರಿ silhouette ಸ್ಕೋರ್ ಉತ್ತಮ ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n", + "\n", + "ಸರಾಸರಿ silhouette ಅಗಲವನ್ನು ಲೆಕ್ಕಹಾಕಲು ಕ್ಲಸ್ಟರ್ ಪ್ಯಾಕೇಜಿನ `silhouette` ಫಂಕ್ಷನ್ ಅನ್ನು ಬಳಸಬಹುದು.\n", + "\n", + "> silhouette ಅನ್ನು ಯಾವುದೇ [ದೂರ](https://en.wikipedia.org/wiki/Distance \"Distance\") ಮಾಪಕದಿಂದ ಲೆಕ್ಕಹಾಕಬಹುದು, ಉದಾಹರಣೆಗೆ ನಾವು [ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) ಚರ್ಚಿಸಿದಂತೆ [ಯೂಕ್ಲಿಡಿಯನ್ ದೂರ](https://en.wikipedia.org/wiki/Euclidean_distance \"Euclidean distance\") ಅಥವಾ [ಮ್ಯಾನ್ಹ್ಯಾಟನ್ ದೂರ](https://en.wikipedia.org/wiki/Manhattan_distance \"Manhattan distance\").\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Jn0McL28LXzB" + }, + "source": [ + "# Load cluster package\n", + "library(cluster)\n", + "\n", + "# Compute average silhouette score\n", + "ss <- silhouette(kclust$cluster,\n", + " # Compute euclidean distance\n", + " dist = dist(df_numeric_select))\n", + "mean(ss[, 3])\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QyQRn97nLXzC" + }, + "source": [ + "ನಮ್ಮ ಅಂಕೆ **.549** ಆಗಿದ್ದು, ಮಧ್ಯದಲ್ಲಿ ಇದೆ. ಇದು ನಮ್ಮ ಡೇಟಾ ಈ ರೀತಿಯ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ವಿಶೇಷವಾಗಿ ಸೂಕ್ತವಲ್ಲದಿರುವುದನ್ನು ಸೂಚಿಸುತ್ತದೆ. ನಾವು ಈ ಊಹೆಯನ್ನು ದೃಶ್ಯವಾಗಿ ದೃಢೀಕರಿಸಬಹುದೇ ಎಂದು ನೋಡೋಣ. [factoextra ಪ್ಯಾಕೇಜ್](https://rpkgs.datanovia.com/factoextra/index.html) ಕ್ಲಸ್ಟರಿಂಗ್ ಅನ್ನು ದೃಶ್ಯೀಕರಿಸಲು (`fviz_cluster()`) ಕಾರ್ಯಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7a6Km1_FLXzD" + }, + "source": [ + "library(factoextra)\n", + "\n", + "# Visualize clustering results\n", + "fviz_cluster(kclust, df_numeric_select)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IBwCWt-0LXzD" + }, + "source": [ + "ಕ್ಲಸ್ಟರ್‌ಗಳಲ್ಲಿನ ಓವರ್‌ಲ್ಯಾಪ್ ನಮ್ಮ ಡೇಟಾ ಈ ರೀತಿಯ ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ವಿಶೇಷವಾಗಿ ಸೂಕ್ತವಿಲ್ಲವೆಂದು ಸೂಚಿಸುತ್ತದೆ ಆದರೆ ನಾವು ಮುಂದುವರೆಯೋಣ.\n", + "\n", + "## 4. ಅತ್ಯುತ್ತಮ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ನಿರ್ಧರಿಸುವುದು\n", + "\n", + "ಕೆ-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್‌ನಲ್ಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಉದ್ಭವಿಸುವ ಮೂಲಭೂತ ಪ್ರಶ್ನೆ ಇದು - ತಿಳಿದಿರುವ ವರ್ಗ ಲೇಬಲ್ಗಳಿಲ್ಲದೆ, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಎಷ್ಟು ಕ್ಲಸ್ಟರ್‌ಗಳಾಗಿ ವಿಭಜಿಸಬೇಕು ಎಂದು ನೀವು ಹೇಗೆ ತಿಳಿಯಬಹುದು?\n", + "\n", + "ನಾವು ಪ್ರಯತ್ನಿಸಬಹುದಾದ ಒಂದು ವಿಧಾನವೆಂದರೆ ಡೇಟಾ ಮಾದರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಕ್ರಮೇಣ ಹೆಚ್ಚಿಸುವ ಮೂಲಕ (ಉದಾ: 1-10 ರವರೆಗೆ) `ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳ ಸರಣಿಯನ್ನು ರಚಿಸುವುದು` ಮತ್ತು **ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್** ಮುಂತಾದ ಕ್ಲಸ್ಟರಿಂಗ್ ಮೆಟ್ರಿಕ್ಸ್‌ಗಳನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದು.\n", + "\n", + "ವಿಭಿನ್ನ *k* ಮೌಲ್ಯಗಳಿಗಾಗಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗೋರಿದಮ್ ಅನ್ನು ಗಣನೆ ಮಾಡಿ ಮತ್ತು **ವಿಥಿನ್ ಕ್ಲಸ್ಟರ್ ಸಮ್ ಆಫ್ ಸ್ಕ್ವೇರ್ಸ್** (WCSS) ಅನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವ ಮೂಲಕ ಅತ್ಯುತ್ತಮ ಕ್ಲಸ್ಟರ್ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ಧರಿಸೋಣ. ಒಟ್ಟು ವಿಥಿನ್-ಕ್ಲಸ್ಟರ್ ಸಮ್ ಆಫ್ ಸ್ಕ್ವೇರ್ಸ್ (WCSS) ಕ್ಲಸ್ಟರಿಂಗ್‌ನ ಸಂಕುಚಿತತೆಯನ್ನು ಅಳೆಯುತ್ತದೆ ಮತ್ತು ನಾವು ಅದನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ಇರಿಸಲು ಬಯಸುತ್ತೇವೆ, ಕಡಿಮೆ ಮೌಲ್ಯಗಳು ಅಂದರೆ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳು ಹತ್ತಿರವಿರುವುದನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n", + "\n", + "1 ರಿಂದ 10 ರವರೆಗೆ `k` ನ ವಿಭಿನ್ನ ಆಯ್ಕೆಗಳ ಪರಿಣಾಮವನ್ನು ಈ ಕ್ಲಸ್ಟರಿಂಗ್ ಮೇಲೆ ಅನ್ವೇಷಿಸೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hSeIiylDLXzE" + }, + "source": [ + "# Create a series of clustering models\n", + "kclusts <- tibble(k = 1:10) %>% \n", + " # Perform kmeans clustering for 1,2,3 ... ,10 clusters\n", + " mutate(model = map(k, ~ kmeans(df_numeric_select, centers = .x, nstart = 25)),\n", + " # Farm out clustering metrics eg WCSS\n", + " glanced = map(model, ~ glance(.x))) %>% \n", + " unnest(cols = glanced)\n", + " \n", + "\n", + "# View clustering rsulsts\n", + "kclusts\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m7rS2U1eLXzE" + }, + "source": [ + "ಈಗ ನಾವು ಪ್ರತಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಆಲ್ಗೋರಿದಮ್‌ಗೆ ಕೇಂದ್ರ *k* ಇರುವ ಒಟ್ಟು ಒಳಗಿನ-ಕ್ಲಸ್ಟರ್ ಸಮ್ಮಿಶ್ರಣಗಳ ಮೊತ್ತ (tot.withinss) ಹೊಂದಿದ್ದೇವೆ, ನಾವು [ಎಲ್ಬೋ ವಿಧಾನ](https://en.wikipedia.org/wiki/Elbow_method_(clustering)) ಅನ್ನು ಬಳಸಿಕೊಂಡು ಅತ್ಯುತ್ತಮ ಕ್ಲಸ್ಟರ್ ಸಂಖ್ಯೆಯನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೇವೆ. ಈ ವಿಧಾನವು ಕ್ಲಸ್ಟರ್ ಸಂಖ್ಯೆಯ ಕಾರ್ಯವಾಗಿ WCSS ಅನ್ನು ಚಿತ್ರಿಸುವುದನ್ನು ಒಳಗೊಂಡಿದ್ದು, ಬಳಕೆ ಮಾಡಲು ಕ್ಲಸ್ಟರ್ ಸಂಖ್ಯೆಯಾಗಿ [ವಕ್ರದ ಎಲ್ಬೋ](https://en.wikipedia.org/wiki/Elbow_of_the_curve \"Elbow of the curve\") ಅನ್ನು ಆಯ್ಕೆಮಾಡುವುದು.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "o_DjHGItLXzF" + }, + "source": [ + "set.seed(2056)\n", + "# Use elbow method to determine optimum number of clusters\n", + "kclusts %>% \n", + " ggplot(mapping = aes(x = k, y = tot.withinss)) +\n", + " geom_line(size = 1.2, alpha = 0.8, color = \"#FF7F0EFF\") +\n", + " geom_point(size = 2, color = \"#FF7F0EFF\")\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pLYyt5XSLXzG" + }, + "source": [ + "ಚಿತ್ರವು ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆ ಒಂದುರಿಂದ ಎರಡುಕ್ಕೆ ಹೆಚ್ಚಾದಂತೆ WCSS ನಲ್ಲಿ ದೊಡ್ಡ ಕಡಿತವನ್ನು ತೋರಿಸುತ್ತದೆ (ಹೀಗಾಗಿ ಹೆಚ್ಚು *ದೃಢತೆ*), ಮತ್ತು ಎರಡುರಿಂದ ಮೂರು ಕ್ಲಸ್ಟರ್‌ಗಳಿಗೆ ಮತ್ತಷ್ಟು ಗಮನಾರ್ಹ ಕಡಿತವನ್ನು ತೋರಿಸುತ್ತದೆ. ಅದಾದ ಮೇಲೆ, ಕಡಿತವು ಕಡಿಮೆ ಸ್ಪಷ್ಟವಾಗುತ್ತದೆ, ಫಲವಾಗಿ ಚಾರ್ಟ್‌ನಲ್ಲಿ ಸುಮಾರು ಮೂರು ಕ್ಲಸ್ಟರ್‌ಗಳ ಬಳಿ `ಎಲ್ಬೋ` 💪 ಕಾಣಿಸುತ್ತದೆ. ಇದು ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳ ಎರಡು ರಿಂದ ಮೂರು ಸಮರ್ಪಕವಾಗಿ ವಿಭಜಿತ ಕ್ಲಸ್ಟರ್‌ಗಳಿರುವ ಉತ್ತಮ ಸೂಚನೆ.\n", + "\n", + "ನಾವು ಈಗ ಮುಂದುವರಿದು `k = 3` ಇರುವ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಯನ್ನು ಹೊರತೆಗೆಯಬಹುದು:\n", + "\n", + "> `pull()`: ಒಂದು ಕಾಲಮ್ ಅನ್ನು ಹೊರತೆಗೆಯಲು ಬಳಸಲಾಗುತ್ತದೆ\n", + ">\n", + "> `pluck()`: ಪಟ್ಟಿಗಳಂತಹ ಡೇಟಾ ರಚನೆಗಳನ್ನು ಸೂಚಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JP_JPKBILXzG" + }, + "source": [ + "# Extract k = 3 clustering\n", + "final_kmeans <- kclusts %>% \n", + " filter(k == 3) %>% \n", + " pull(model) %>% \n", + " pluck(1)\n", + "\n", + "\n", + "final_kmeans\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l_PDTu8tLXzI" + }, + "source": [ + "ಶ್ರೇಷ್ಠ! ನಾವು ಪಡೆದ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸೋಣ. `plotly` ಬಳಸಿ ಸ್ವಲ್ಪ ಇಂಟರಾಕ್ಟಿವಿಟಿ ಬೇಕೆ?\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dNcleFe-LXzJ" + }, + "source": [ + "# Add predicted cluster assignment to data set\n", + "results <- augment(final_kmeans, df_numeric_select) %>% \n", + " bind_cols(df_numeric %>% select(artist_top_genre)) \n", + "\n", + "# Plot cluster assignments\n", + "clust_plt <- results %>% \n", + " ggplot(mapping = aes(x = popularity, y = danceability, color = .cluster, shape = artist_top_genre)) +\n", + " geom_point(size = 2, alpha = 0.8) +\n", + " paletteer::scale_color_paletteer_d(\"ggthemes::Tableau_10\")\n", + "\n", + "ggplotly(clust_plt)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6JUM_51VLXzK" + }, + "source": [ + "ಬಹುಶಃ ನಾವು ನಿರೀಕ್ಷಿಸಿದ್ದೇವೆ ಪ್ರತಿ ಕ್ಲಸ್ಟರ್ (ವಿಭಿನ್ನ ಬಣ್ಣಗಳಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗಿದೆ) ವಿಭಿನ್ನ ಶೈಲಿಗಳನ್ನು (ವಿಭಿನ್ನ ಆಕಾರಗಳಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗಿದೆ) ಹೊಂದಿರುತ್ತದೆ.\n", + "\n", + "ನಾವು ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ನೋಡೋಣ.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HdIMUGq7LXzL" + }, + "source": [ + "# Assign genres to predefined integers\n", + "label_count <- results %>% \n", + " group_by(artist_top_genre) %>% \n", + " mutate(id = cur_group_id()) %>% \n", + " ungroup() %>% \n", + " summarise(correct_labels = sum(.cluster == id))\n", + "\n", + "\n", + "# Print results \n", + "cat(\"Result:\", label_count$correct_labels, \"out of\", nrow(results), \"samples were correctly labeled.\")\n", + "\n", + "cat(\"\\nAccuracy score:\", label_count$correct_labels/nrow(results))\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C50wvaAOLXzM" + }, + "source": [ + "ಈ ಮಾದರಿಯ ನಿಖರತೆ ಕೆಟ್ಟದಾಗಿಲ್ಲ, ಆದರೆ ಅತ್ಯುತ್ತಮವೂ ಅಲ್ಲ. ಡೇಟಾ K-Means ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸೂಕ್ತವಾಗಿಲ್ಲದಿರಬಹುದು. ಈ ಡೇಟಾ ತುಂಬಾ ಅಸಮತೋಲನವಾಗಿದೆ, ತುಂಬಾ ಕಡಿಮೆ ಸಂಬಂಧಿತವಾಗಿದೆ ಮತ್ತು ಕಾಲಮ್ ಮೌಲ್ಯಗಳ ನಡುವೆ ತುಂಬಾ ವ್ಯತ್ಯಾಸವಿದೆ, ಆದ್ದರಿಂದ ಚೆನ್ನಾಗಿ ಕ್ಲಸ್ಟರ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ವಾಸ್ತವದಲ್ಲಿ, ರೂಪುಗೊಂಡಿರುವ ಕ್ಲಸ್ಟರ್‌ಗಳು ಮೇಲಿನ ಮೂರು ಜಾನರ್ ವರ್ಗಗಳಿಂದ ಬಹುಮಟ್ಟಿಗೆ ಪ್ರಭಾವಿತವಾಗಿವೆ ಅಥವಾ ತಿರುವು ಹೊಂದಿವೆ.\n", + "\n", + "ಆದರೂ, ಅದು ತುಂಬಾ ಕಲಿಕೆಯ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ!\n", + "\n", + "Scikit-learn ನ ಡಾಕ್ಯುಮೆಂಟೇಶನ್‌ನಲ್ಲಿ, ನೀವು ಈ ಮಾದರಿಯಂತಹ, ಚೆನ್ನಾಗಿ ವಿಭಜಿಸಲ್ಪಟ್ಟಿಲ್ಲದ ಕ್ಲಸ್ಟರ್‌ಗಳಿರುವ ಮಾದರಿಯು 'ವ್ಯತ್ಯಾಸ' ಸಮಸ್ಯೆಯನ್ನು ಹೊಂದಿದೆ ಎಂದು ನೋಡಬಹುದು:\n", + "\n", + "

\n", + " \n", + "

Scikit-learn ನಿಂದ ಇನ್ಫೋಗ್ರಾಫಿಕ್
\n", + "\n", + "\n", + "\n", + "## **ವ್ಯತ್ಯಾಸ**\n", + "\n", + "ವ್ಯತ್ಯಾಸವನ್ನು \"ಸರಾಸರಿ ಮೌಲ್ಯದಿಂದ ಚದರ ವ್ಯತ್ಯಾಸಗಳ ಸರಾಸರಿ\" ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ [ಮೂಲ](https://www.mathsisfun.com/data/standard-deviation.html). ಈ ಕ್ಲಸ್ಟರಿಂಗ್ ಸಮಸ್ಯೆಯ ಸನ್ನಿವೇಶದಲ್ಲಿ, ಇದು ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಸಂಖ್ಯೆಗಳು ಸರಾಸರಿ ಮೌಲ್ಯದಿಂದ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ವಿಭಿನ್ನವಾಗುವ ಡೇಟಾವನ್ನು ಸೂಚಿಸುತ್ತದೆ.\n", + "\n", + "✅ ಈ ಸಮಸ್ಯೆಯನ್ನು ಸರಿಪಡಿಸಲು ನೀವು ಮಾಡಬಹುದಾದ ಎಲ್ಲಾ ಮಾರ್ಗಗಳನ್ನು ಯೋಚಿಸುವ ಉತ್ತಮ ಸಮಯ ಇದು. ಡೇಟಾವನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ತಿದ್ದುಪಡಿ ಮಾಡಬೇಕೆ? ವಿಭಿನ್ನ ಕಾಲಮ್‌ಗಳನ್ನು ಬಳಸಬೇಕೆ? ಬೇರೆ ಆಲ್ಗಾರಿಥಮ್ ಬಳಸಬೇಕೆ? ಸೂಚನೆ: ನಿಮ್ಮ ಡೇಟಾವನ್ನು [ಸ್ಕೇಲ್ ಮಾಡಿ](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) ಸಾಮಾನ್ಯೀಕರಿಸಿ ಮತ್ತು ಬೇರೆ ಕಾಲಮ್‌ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ.\n", + "\n", + "> ಈ '[ವ್ಯತ್ಯಾಸ ಕ್ಯಾಲ್ಕುಲೇಟರ್](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ ಮತ್ತು ಈ ಕಲ್ಪನೆಯನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ.\n", + "\n", + "------------------------------------------------------------------------\n", + "\n", + "## **🚀ಸವಾಲು**\n", + "\n", + "ಈ ನೋಟ್ಬುಕ್‌ನೊಂದಿಗೆ ಸ್ವಲ್ಪ ಸಮಯ ಕಳೆಯಿರಿ, ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ತಿದ್ದುಪಡಿ ಮಾಡಿ. ಡೇಟಾವನ್ನು ಹೆಚ್ಚು ಸ್ವಚ್ಛಗೊಳಿಸುವ ಮೂಲಕ (ಉದಾಹರಣೆಗೆ, ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ) ನೀವು ಮಾದರಿಯ ನಿಖರತೆಯನ್ನು ಸುಧಾರಿಸಬಹುದೇ? ನೀವು ನೀಡಲಾದ ಡೇಟಾ ಮಾದರಿಗಳಿಗೆ ಹೆಚ್ಚು ತೂಕ ನೀಡಲು ತೂಕಗಳನ್ನು ಬಳಸಬಹುದು. ಉತ್ತಮ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ರಚಿಸಲು ಇನ್ನೇನು ಮಾಡಬಹುದು?\n", + "\n", + "ಸೂಚನೆ: ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ಕೇಲ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ. ನೋಟ್ಬುಕ್‌ನಲ್ಲಿ ಕಾಮೆಂಟ್ ಮಾಡಲಾದ ಕೋಡ್ ಇದೆ, ಅದು ಡೇಟಾ ಕಾಲಮ್‌ಗಳನ್ನು ಪರಸ್ಪರ ಹೋಲುವಂತೆ ಮಾಡಲು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಸೇರಿಸುತ್ತದೆ. ಸಿಲ್ಹೌಟ್ ಸ್ಕೋರ್ ಕಡಿಮೆಯಾಗುತ್ತದೆ, ಆದರೆ ಎಲ್ಬೋ ಗ್ರಾಫ್‌ನ 'ಕಿಂಕ್' ಸ್ಮೂತ್ ಆಗುತ್ತದೆ. ಇದಕ್ಕೆ ಕಾರಣ, ಡೇಟಾವನ್ನು ಸ್ಕೇಲ್ ಮಾಡದಿದ್ದರೆ ಕಡಿಮೆ ವ್ಯತ್ಯಾಸವಿರುವ ಡೇಟಾ ಹೆಚ್ಚು ತೂಕವನ್ನು ಹೊಂದುತ್ತದೆ. ಈ ಸಮಸ್ಯೆಯ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಓದಿ [ಇಲ್ಲಿ](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226).\n", + "\n", + "## [**ಪೋಸ್ಟ್-ಲೆಕ್ಚರ್ ಕ್ವಿಜ್**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/)\n", + "\n", + "## **ಪುನರ್ ವಿಮರ್ಶೆ & ಸ್ವಯಂ ಅಧ್ಯಯನ**\n", + "\n", + "- K-Means ಸಿಮ್ಯುಲೇಟರ್ ಅನ್ನು ನೋಡಿ [ಇಂತಹ ಒಂದು](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). ನೀವು ಈ ಉಪಕರಣವನ್ನು ಬಳಸಿ ಮಾದರಿ ಡೇಟಾ ಪಾಯಿಂಟ್‌ಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸಿ ಅದರ ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳನ್ನು ನಿರ್ಧರಿಸಬಹುದು. ನೀವು ಡೇಟಾದ ಯಾದೃಚ್ಛಿಕತೆ, ಕ್ಲಸ್ಟರ್‌ಗಳ ಸಂಖ್ಯೆ ಮತ್ತು ಸೆಂಟ್ರಾಯ್ಡ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸಂಪಾದಿಸಬಹುದು. ಇದರಿಂದ ಡೇಟಾವನ್ನು ಹೇಗೆ ಗುಂಪುಮಾಡಬಹುದು ಎಂಬುದರ ಬಗ್ಗೆ ನಿಮಗೆ ಕಲ್ಪನೆ ಸಿಗುತ್ತದೆಯೇ?\n", + "\n", + "- ಜೊತೆಗೆ, ಸ್ಟ್ಯಾನ್ಫರ್ಡ್‌ನಿಂದ [K-Means ಕುರಿತು ಈ ಹ್ಯಾಂಡ್‌ಔಟ್](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) ಅನ್ನು ನೋಡಿ.\n", + "\n", + "ನೀವು ಹೊಸದಾಗಿ ಪಡೆದ ಕ್ಲಸ್ಟರಿಂಗ್ ಕೌಶಲ್ಯಗಳನ್ನು K-Means ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸೂಕ್ತವಾಗಿರುವ ಡೇಟಾ ಸೆಟ್‌ಗಳ ಮೇಲೆ ಪ್ರಯತ್ನಿಸಲು ಬಯಸುತ್ತೀರಾ? ದಯವಿಟ್ಟು ನೋಡಿ:\n", + "\n", + "- [ಟ್ರೇನ್ ಮತ್ತು ಮೌಲ್ಯಮಾಪನ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳು](https://rpubs.com/eR_ic/clustering) ಟಿಡಿಮೋಡಲ್ಸ್ ಮತ್ತು ಸ್ನೇಹಿತರು ಬಳಸಿ\n", + "\n", + "- [K-means ಕ್ಲಸ್ಟರ್ ವಿಶ್ಲೇಷಣೆ](https://uc-r.github.io/kmeans_clustering), ಯುಸಿ ಬಿಸಿನೆಸ್ ಅನಾಲಿಟಿಕ್ಸ್ R ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಗೈಡ್\n", + "\n", + "- [ಟಿಡಿ ಡೇಟಾ ತತ್ವಗಳೊಂದಿಗೆ K-means ಕ್ಲಸ್ಟರಿಂಗ್](https://www.tidymodels.org/learn/statistics/k-means/)\n", + "\n", + "## **ಅಸೈನ್‌ಮೆಂಟ್**\n", + "\n", + "[ವಿಭಿನ್ನ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಧಾನಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/assignment.md)\n", + "\n", + "## ಧನ್ಯವಾದಗಳು:\n", + "\n", + "[ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ಈ ಮಾದರಿಯ ಮೂಲ ಪೈಥಾನ್ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಿದವರಿಗೆ ♥️\n", + "\n", + "[`ಅಲಿಸನ್ ಹೋರ್ಸ್ಟ್`](https://twitter.com/allison_horst/) R ಅನ್ನು ಹೆಚ್ಚು ಆತಿಥ್ಯಪೂರ್ಣ ಮತ್ತು ಆಕರ್ಷಕವಾಗಿಸುವ ಅದ್ಭುತ ಚಿತ್ರಣಗಳನ್ನು ರಚಿಸಿದವರಿಗೆ. ಅವರ [ಗ್ಯಾಲರಿ](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಚಿತ್ರಣಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ.\n", + "\n", + "ಸಂತೋಷಕರ ಅಧ್ಯಯನ,\n", + "\n", + "[ಎರಿಕ್](https://twitter.com/ericntay), ಗೋಲ್ಡ್ ಮೈಕ್ರೋಸಾಫ್ಟ್ ಲರ್ನ್ ವಿದ್ಯಾರ್ಥಿ ರಾಯಭಾರಿ.\n", + "\n", + "

\n", + " \n", + "

@allison_horst ಅವರ ಕಲಾಕೃತಿ
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/solution/notebook.ipynb b/translations/kn/5-Clustering/2-K-Means/solution/notebook.ipynb new file mode 100644 index 000000000..2f49976b2 --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/solution/notebook.ipynb @@ -0,0 +1,554 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "e867e87e3129c8875423a82945f4ad5e", + "translation_date": "2025-12-19T16:52:00+00:00", + "source_file": "5-Clustering/2-K-Means/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ಸ್ಪೋಟಿಫೈಯಿಂದ ಸಂಗ್ರಹಿಸಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ - ಒಂದು ವಿಶ್ಲೇಷಣೆ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n", + "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n", + "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install seaborn" + ] + }, + { + "source": [ + "ನಾವು ಕೊನೆಯ ಪಾಠದಲ್ಲಿ ಮುಗಿಸಿದ ಸ್ಥಳದಿಂದ ಪ್ರಾರಂಭಿಸಿ, ಡೇಟಾವನ್ನು ಆಮದುಮಾಡಿ ಮತ್ತು ಫಿಲ್ಟರ್ ಮಾಡಲಾಗಿದೆ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n
" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "\n", + "\n", + "df = pd.read_csv(\"../../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "source": [ + "ನಾವು ಕೇವಲ 3 ಶೈಲಿಗಳ ಮೇಲೆ ಮಾತ್ರ ಗಮನಹರಿಸುವೆವು. ಬಹುಶಃ ನಾವು 3 ಗುಂಪುಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "metadata": {}, + "execution_count": 12 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "5 Kasala Pioneers \n", + "6 Pull Up Everything Pretty \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "5 DRB Lasgidi nigerian pop 2020 184800 26 \n", + "6 prettyboydo nigerian pop 2018 202648 29 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "5 0.803 0.1270 0.525 0.000007 0.1290 -10.034 \n", + "6 0.818 0.4520 0.587 0.004490 0.5900 -9.840 \n", + "\n", + " speechiness tempo time_signature \n", + "1 0.3600 129.993 3 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 \n", + "5 0.1970 100.103 4 \n", + "6 0.1990 95.842 4 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
5KasalaPioneersDRB Lasgidinigerian pop2020184800260.8030.12700.5250.0000070.1290-10.0340.1970100.1034
6Pull UpEverything Prettyprettyboydonigerian pop2018202648290.8180.45200.5870.0044900.5900-9.8400.199095.8424
\n
" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "df.head()" + ] + }, + { + "source": [ + "ಈ ಡೇಟಾ ಎಷ್ಟು ಸ್ವಚ್ಛವಾಗಿದೆ? ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳನ್ನು ಬಳಸಿ ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ. ನಾವು ಕಡಿಮೆ ಔಟ್‌ಲೈಯರ್‌ಗಳಿರುವ ಕಾಲಮ್‌ಗಳ ಮೇಲೆ ಗಮನಹರಿಸುವೆವು (ನೀವು ಔಟ್‌ಲೈಯರ್‌ಗಳನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಬಹುದು). ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳು ಡೇಟಾದ ವ್ಯಾಪ್ತಿಯನ್ನು ತೋರಿಸಬಹುದು ಮತ್ತು ಯಾವ ಕಾಲಮ್‌ಗಳನ್ನು ಬಳಸಬೇಕೆಂದು ಆಯ್ಕೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಗಮನಿಸಿ, ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳು ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುವುದಿಲ್ಲ, ಇದು ಉತ್ತಮ ಕ್ಲಸ್ಟರ್ ಮಾಡಬಹುದಾದ ಡೇಟಾದ ಪ್ರಮುಖ ಅಂಶವಾಗಿದೆ (https://stats.stackexchange.com/questions/91536/deduce-variance-from-boxplot)\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 14 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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AAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOTMpx5g16xWq7FcLu9dOz4+HrOZ9gQAAHj5nHmAh/iOAAAAdo1zCgCwLX53AAD7zG+dzxNUfGS5XI7z8/N71y4uLsbJyclEEwEAADwfZx7gIb4jAACAXeOcAgBsi98dAMA+81vn8yQlAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAA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AAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAKrtqYAAACAASURBVAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDirfQ9Qzfr6envy5Mkb1wAAAIbAPQ9wHXsEAABQjfsUAGBRvO4AAIbMa523E1T8ycrKStvY2Oh7DAAAgFvhnge4jj0CAACoxn0KALAoXncAAEPmtc7brfQ9AAAAAAAAAAAAAAAAwKIJKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiLPa9wCQanT1su8RGKKr/8y9Nlr8JAyUvQsAAD6O19Th3LfTI/sPAAAAACyO87ieOIe/FdYzQyeogJ78/ZfHfY9AiH/88q++RwAAAOB/nAfwZ+7bAQAAAACGx/sBdTiHB95lpe8BAAAAAAAAAAAAAAAAFk1QAQAAAAAAAAAAAAAAxBFUAAAAAAAAAAAAAAAAcVb7HgASrK+vtydPnvQ9BgFevXrVLi4uXrt2586dtrKin+P2rK+v9z0CAACU5DyAP3PfTjXu6QEAAADg43k/oA7n8IvjfJkhEVTAAqysrLSNjY2+xyDEvXv3+h4BAACA5jyA+dy3AwAAAAAMi/cDanEOD7wvyRUAAAAAAAAAAAAAABBHUAEAAAAAAAAAAAAAAMQRVAAAAAAAAAAAAAAAAHEEFQAAAAAAAAAAAAAAQBxBBQAAAAAAAAAAAAAAEEdQAQAAAAAAAAAAAAAAxBFUAAAAAAAAAAAAAAAAcQQVAAAAAAAAAAAAAABAHEEFAAAAAAAAAAAAAAAQR1ABAAAAAAAAAAAAAADEEVQAAAAAAAAAAAAAAABxBBUAAAAAAAAAAAAAAEAcQQUAAAAAAAAAAAAAABBHUAEAAAAAAAAAAAAAAMQRVAAAAAAAAAAAAAAAAHEEFQAAAAAAAAAAAAAAQBxBBQAAAAAAAAAAAAAAEEdQAQAAAAAAAAAAAAAAxBFUAAAAAAAAAAAAAAAAcQQVAAAAAAAAAAAAAABAHEEFAAAAAAAAAAAAAAAQR1ABAAAAAAAAAAAAAADEEVQAAAAAAAAAAAAAAABxBBUAAAAAAAAAAAAAAEAcQQUAAAAAAAAAAAAAABBHUAEAAAAAAAAAAAAAAMQRVAAAAAAAAAAAAAAAAHEEFQAAAAAAAAAAAAAAQBxBBQAAAAAAAAAAAAAAEEdQAQAAAAAAAAAAAAAAxBFUAAAAAAAAAAAAAAAAcQQVAAAAAAAAAAAAAABAHEEFAAAAAAAAAAAAAAAQR1ABAAAAAAAAAAAAAADEEVQAAAAAAAAAwH/Zu+8w6YoyYeP3Qw4CgqCIqAQjgooCKyDyIqYFQWFFQFExYVhZw+oiqyzgmpVVVIwgQQwogih8JhAMyC6goIgiBkBQkIwE4SU83x9V7RyaDjPzdvf0TN+/6zpXn9OnzjnVXWd6uqrrqZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSJEmSJEmSJEmSJEmSJEmSJE0cAyokSZIkSZIkSZIkSZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSJEmSJEmSJEmSJEmSJEmSJE0cAyokSZIkSZIkSZIkSZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSJEmSJEmSJEmSJEmSJEmSJE0cAyokSZIkSZIkSZIkSZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSJEmSJEmSJEmSJEmSJEmSJE0cAyokSZIkSZIkSZIkSZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNnGXm4JpLt1auvPLKObi8JEmSJGnctdUXl+6WTpqHbBeRJEmSJPVl24gWKNtFJEmSJEl9jbpdJDJz2Ne49wUjNgPOGelFJUmSJEnz2eaZee5cZ0IaBNtFJEmSJEmzYNuIFgTbRSRJkiRJszD0dpGlhnlySZIkSZIkSZIkSZIkSZIkSZKkcTQXM1QsD2xSN68B7h7RpddmaqSDzYGrRnRdDZ5luXBYlguHZblwWJYLh2W5cFiWC4vlOX1LA2vV9Qsy8465zIw0KHPYLjITflZpEnnfa1J572sSed9rUnnvzz+2jWjBmSftIhos//9oUniva5J4v2tSeK9rkozj/T7SdpFlhnnyTuoLGvl0pBHR3LwqM68YdR40GJblwmFZLhyW5cJhWS4cluXCYVkuLJbnjF021xmQBm2u2kVmws8qTSLve00q731NIu97TSrv/XnLthEtKPOhXUSD5f8fTQrvdU0S73dNCu91TZIxvt9H1i6y1KguJEmSJEmSJEmSJEmSJEmSJEmSNC4MqJAkSZIkSZIkSZIkSZIkSZIkSRPHgApJkiRJkiRJkiRJkiRJkiRJkjRxDKiQJEmSJEmSJEmSJEmSJEmSJEkTx4AKSZIkSZIkSZIkSZIkSZIkSZI0cQyokCRJkiRJkiRJkiRJkiRJkiRJE8eACkmSJEmSJEmSJEmSJEmSJEmSNHEiM+c6D5IkSZIkSZIkSZIkSZIkSZIkSSPlDBWSJEmSJEmSJEmSJEmSJEmSJGniGFAhSZIkSZIkSZIkSZIkSZIkSZImjgEVkiRJkiRJkiRJkiRJkiRJkiRp4hhQIUmSJEmSJEmSJEmSJEmSJEmSJo4BFZIkSZIkSZIkSZIkSZIkSZIkaeIYUCFJkiRJkiRJkiRJkiRJkiRJkiaOARWSJEmSJEmSJEmSJEmSJEmSJGniGFAhSZIkSZIkSZIkSZIkSZIkSZImjgEVkiRJkiRJkiRJkiRJkiRJkiRp4hhQIUmSJEmSJEmSJEmSJEmSJEmSJs5EBFRExMMj4pCIuCgibo2I6yPinIh4W0SsNNf5m2QR8cCIeG5EvCsivh0R10ZE1uWoWZzvnyPixIi4IiLuqI8nRsQ/DyH7aoiIzSLivyLie433/5aIuDgijoyIp87wfJblHIiIVSNij/qZ+cOI+H1E3BQRiyPi6og4IyL+IyIeMM3zbRURx0bEZRFxe0RcFRHfjYg9h/1a1FtEfKDxeZsRsWgax/h3OYfayqvXcsY0zmVZjpGIeFhEHBwR50bENfXz8vKI+HH9jrRxn+MtzzlQ/ydO9++y72et5Shp0EbVFuLnl8bNMO/9iFgpInaNiE/Vc94QEXdGxHURcVZEHBQRaw/qtUjTNarP/LZrrhQRf2x81710GNeRehnlvR8Rz4iIo6K0l94apc304og4PiJeFxH3G+T1pG5Gcd9HxHpR2o9/FhE31u8710fET6P8DvTAQVxHkjS/WN/WpLCOrUlivVqTwrq0FroYcD/saV5zzyh9ha+K0s/psij9RLccxvVGITJzrvMwVBGxE3AssGqXJBcDO2bm70eXK7VERK8b8OjM3Hua51kK+Czwyh7JDgdek5n3TD+Hmo6I+BGwzTSSHgO8OjMX9ziXZTmHIuIZwPenkfRaYK/M/G6Pcx0EHED34L1TgBdk5u0zzaeWTEQ8ETgHWKbx9HaZeUaX9P5djoE+/zObfpiZi7qcw7IcMxGxL/A+YOUeyQ7NzDd1ONbynENRgpe2ncEh9wAPy8w/t53HcpQ0cKNoC/HzS+NomPd+RDweOBPo98Pe34B9MvO4mV5Dmo25av+OiA8D/9546rLMXG+Q15B6GdW9HxGrA0cCz+uTdNPMPH9JriX1M6Lv+S8BPgOs2CPZ9cAemTmd3xIkSQuA9W1NCuvYmiTWqzUprEtrEgyqH/Y0r7UicDywQ5ck9wDvysyDB3XNUVnQM1RExKbAcZQPw1uAdwBbAdsDn6vJHgWcEhGrzEkm1fQn4HuzPPY9THXiOA/YE9iiPp5Xn38V8O4lyaC6Wqc+/gU4FHgB5f3fEngL0Oo4+FLgqD7nsizn3uWU4Jc3ArtSynFrYHfga8DdwJrANyPiCZ1OEBGvAQ6k/J/5A6VMtwCeD5xek+0IfH5or0IdNTq+LQNcPc3D/LscL58CNumxvLzHsZblGImIdwIfowRTXAy8DVgEbAo8o27/lFLZ6MTynFsvp/ff4iaU/50tp7UHU1SWo6SBGmFbiJ9fGisjuPdXZapzx5nA/sAzgScBz6b8WHJPTffFcJYWjcBctX/X674JuB24eVDnlaZrVPd+RKxGGXym1enjRODFwFOAzSltp4cCV8z2GtJ0jeK+j4itKb/hrEj5XnMkpU1/C8rvPt+qSdcAToqIDWZzHUnS/GJ9W5PCOrYmifVqTQrr0ppQS9IPezo+z1QwxelM3e+vpPQTXQo4KCL2GWIehiMzF+wC/AhI4E5gyw7731b3J3DQXOd3EhfgYOC5wIPq9nqNMjlqmud4VC3jpIy4vmLb/pXq86174RFz/boX2gKcDLwQWLrL/jWB3zbK9mmW5Xgu3cqwLc3zG2V5Qof9awA31v2XAWu2XwP4ZuMci+b6dU/SQmmMSeA3wHv7lYN/l+OzLOl3FstyvBZKBb1VpkcDy/ZIu5zlOT8X4AONct7LcnRxcRnFwgjaQvz8chnHZdj3PuVHluOAjXqkeR7lB5MEfk+dHdjFZVjLKD7zO5xzaeDces4DgEvr+qVz/X64TM4yqnufMuhMUjo27dwjXQDLzPX74rKwlxF9zz+5cY7Xd0lzSCPNJ+b6fXFxcXFxGf5ifdtlUhbr2C6TtFivdpmUxbq0y6QsDKAf9jSv8/TGeb9JW19TSj/hy+r+G4DV5/q9mcmyYGeoiIgtgG3q5hGZeVaHZIdQOpQCvDEilh1J5vQPmXlgZp6cmX9dgtO8iTLSOsC+mfn3tmvcBuxbN5cB3rwE11IHmfnczPxqZt7dZf+13Ht6whd0OZVlOce6lWFbmm9QAmRg6nO26VXAanV9v1r+7dd4PWWmCyhfTjUCEfEw4L/r5muBxdM4zL/LhcOyHBN1pphP1c1fAK/MzDu7pc/MTn+rlueYq+X84rp5C3BCh2SWo6SBGmFbiJ9fGiujuPcz86eZuXtm/rpHmpOY+p+/IWXmMWko5rD9+43AkyltQx8YwPmkGRnVvR8RTwVeUjffmZnf7JY2i7tmeg1pukb4mb9VfbwuMz/ZJc27GutbzuIakqR5xPq2JoV1bE0S69WaFNalNUkG1A97Ot5aH++iBBDdq69p7Se6X928P6Uf6byxYAMqKCOotxzZKUFm3kOJhIRSeNsNO1MarIgIpqYFuygz/7dTuvp8qwP48+pxGq3TG+sbtu+0LOed1lSTK3TY1/r8/RudO4+SmVcAp9bN7Qc5JaZ6OowyZe7RmfnDfon9u1w4LMux8yzgkXX9AzNtHLI8543tgYfU9eNr5+J/sBwlDcnQ20L8/NKYGqd2wJ7tH9IAjfy+j4iHM/Xj32u7BH9Lwzaqe/8N9fEm4BOzOF4apFHd98vVx0u6JcjMm4DWIErLdUsnSVowrG9rUljH1iSxXq1JYV1aGqDav3P7unlq7f/ZyQmUfqMAuww9YwO0kAMqnlofbwV+1iNds0Pp1sPLjoZkfWCdut6vc3Br/0MoU9potJZvrHeaBcGynCci4tHAE+vmRW37lgO2qJtn9an0t8pxeWCzgWZS9xERL6RM7XU9U9Gi/fh3uXBYluNlt/qYlOkfAYiINSLikRGxRp/jLc/54aWN9WM67LccJQ3DKNpC/PzSOBqndsB+7R/SoMzFff9JYGXgC5l5xhKeS5qtod/7tY2zFUD6/cy8vT6/dEQ8NCLWi4hOA81IwzKqz/xWQPT63RJExKrAmm3pJUkLl/VtTQrr2Jok1qs1KaxLS4O1OVMBQV1/I679RVsD8m0+oFm9RmIhB1Q8tj7+vs+ov83OwI/tmkrjaqPG+kVdU913v2U9ets21n/TYb9lOcYiYqXayfctlH+Iy9RdH21L+ihg6bpuOY6JiLg/cGjd3K9OrzUd/l2Op90i4tcRcVtE3BwRv4uIoyOiV6S8ZTlenlIfL83MmyPiRRFxAXAdcDFwXUT8NiLeGhHLdzje8hxzEXE/piLtLwPO6JDMcpQ0DKNoC/HzS+NonNoB+7V/SIMy0vs+IvYAdgBuAP59tueRBmAU9/4TmJqZ94KIWDUiPkoZSfBPlBEHb4qI70fEohmeW5qNUX3mf7o+PiAiXtslzQEd0kuSFi7r25oU1rE1SaxXa1JYl5YGaza/ES8DPHI42Rm8BRlQUSMYWxFd3aYVASAzb6BEoQE8dJj50lCs21jvWdbA5Y11y3qEImIp4O2Np77aIZllOWYiYu+IyIhIyufkxcAhwINqkvcDX2o7zHIcTx8E1gbOBI6YwXGW53jaiFKJWxG4H/AIykj4P4iIEyNitQ7HWJZjov5PfEzdvDYiDgW+CGzclvRRwIco5Xr/tn2W5/j7F8qoQgDHZmZ2SGM5ShqoEbaF+PmlsTJO7YAR8QRgx7p5QWbawUNDMer7PiJWZ2pQjbdn5jWzOY+0pEZ47zd/HFwKOBd4I9Csny8HPINSb99vhueXpm3En/mfZ2qWzcMi4nMRsVNEbBYRu0bEiUzNfvyezDx1FteQJM0T1rc1Kaxja5JYr9aksC4tDcWC/414QQZUAKs01m+ZRvrWB+L9hpAXDddMyvrWxrplPVpvBrao6ydkZqdptCzL+eN8YIvM3L9DB1HLccxExDbAq4C7gNd26dTbjeU5Xm4DvgK8GtgG2BR4FvAeyswGAM8HTuowXZplOT5WY+o7+CbAvwFXAnsBawArUUZZak1/txWlAt5keY6/lzbWj+mSxnKUNGijagvx80vjZizaAevMYoczNWvjOwZ5fqnNqO/7D1EG2DgL+NwszyENwqju/TUa6/tRRlH7DqWNewXggcDrgJuAAN4fEc+b4TWk6RrZZ35m3p2ZLwN2A35BaVf+JnAO8HVK2+PpwDMz850zPb8kad6xvq1JYR1bk8R6tSaFdWlp8Bb8b8QLNaBihcb64mmkv6M+rjiEvGi4ZlLWdzTWLesRiYhtKTMZAFxN+ULciWU5fr5B6ey7CaVSsydwIvBE4MsR8dwOx1iOYyQilgM+S6mAfiQzfzXDU1ie4+UhmblnZh6emT/JzPMz8/u1wvU44Lyablvu+1lrWY6PlRvrK1ACZbbLzC9m5g2Z+ffM/BHwdEplG2CXiPintuNaLM8xExHrAovq5v9m5sVdklqOkgZtVG0hfn5p3IxLO+AngM3q+tGZ+a0Bn19qGtl9HxFPA17B7AZqkAZtVPd+e939+8BzM/OczLwjM6/JzE8DzwXuqeneFxExw+tI0zHS7zoR8VjKQBGbdEmyJfDKiHjIbM4vSZpXrG9rUljH1iSxXq1JYV1aGrwF/xvxQg2ouL2xvtw00i9fH/8+hLxouGZS1ss31i3rEYiIx1E64C9DKavdMvPqLsktyzGTmTdm5q/qck5mfiUzd6V8AdyAMgr+3m2HWY7j5T+BxwB/Ag6exfGW5xjJzBt77Psr8ALgzvrUvm1JLMvxcXvb9uGZ+dv2RJn5d+49ytLuXc5heY6fvZiqZx3dI53lKGnQRtUW4ueXxs2ctwNGxP6UUaegjDr1r4M6t9TFSO77OhJsa6CGQzPzguXcewAAIABJREFUlzM5XhqCufi+A7BfZt7dnigzfwKcUDcfS/cfzaUlMbLvOnW247OAnYA/Ay8B1q7XfSjlO85twB7A2fU3IEnSwmV9W5PCOrYmifVqTQrr0tLgLfjfiBdqQMXNjfXpTBfSioqczvQ+Gi8zKetm9KtlPWQRsT7wPWB14G5gjzridjeW5TyRmV8Avkb5H/KJiGhO1Wc5jomIeAywf93cNzNv7ZW+C8tzHsnMP1JGdgB4RESs09htWY6Pm9u2v9cj7WmUEWoANu9yDstz/LykPt4BHNcjneUoadBG1Rbi55fGzZy2A0bEa4D31s2LgB1mWf+SZmJU9/07gEcDlwMHzvBYaRjm4vvONZl5XteU8N3G+uZdU0mzN5L7vnbw+zKwGnAV8JTMPDYz/5qZd2bmFZn5SeBplB/Q16H3QBKSpPnP+rYmhXVsTRLr1ZoU1qWlwVvwvxEvM9cZGIbMvD0irgMeAKzbK21ErM5U4V0+7Lxp4K5orPcsa0rEX4tlPUS1E++plC8BCbwiM0/qc5hlOb+cBLyQ8vn5HOBL9XnLcXy8mRIN+kdgpYjYo0OajRvrT4+Itev6t2qDpOU5//wa2KGuPwT4S123LMdEZt4REdcAa9Wnur7H9TvttZTRC9Zq7LI8x1REbAZsVDdPzswbeiS3HCUN1AjbQvz80liZy3bAiNgT+GTdvAx4ZmZeu6TnlfoZ4X2/X308FdgpIjqlaZ175Ubbw9WZ+YMZXkvqa4T3fjP9FV1T3TftWl1TSbM0wvv+OZT2RICPZ+ZVXfJzYUQcSxkt/MkR8YTM/MUMryVJmgesb2tSWMfWJLFerUlhXVoaivbfiM/tkXZe/ka8IAMqql8D21BGaF4mM+/qku4xjfXfDD9bGrBfN9Yf0zXVffdb1kMSEWtSRkjfoD61b2YeM41DLcv55ZrG+sMb6xdTZiRZGstxrrWmztqAEg3dzwGN9fWBW/Hvcj7KLs9bluPlQmBRXV+6T9rW/uZ3WctzfL20sd5vZAnLUdIwjKItxM8vjaORtwNGxM7AMZTZG68Ets/Mfj8OSoM0ivu+NW33y+vSy5pMtT/8ELCzh4ZlFPf+hY316dbb4d51d2mQRnHfP7ax/vM+aX9G6QTSuqadQCRp4bK+rUlhHVuTxHq1JoV1aWmwZvMb8V3A74aTncFbaq4zMEQ/qY8rA0/ukW7bxvqZw8uOhuQSpkbf3rZXQsrUSQB/Bi4dVoYmWUSsRpmKrTUy89sz87BpHm5Zzi8Paaz/Y1qmzFwMnF03t4yI5eiuVc530DtiUXPHv8v5Z6PG+l8a65blePlRY32DbokiYlVKgymU8mixPMdQRCwLtEYLugb4dp9DLEdJwzCKthA/vzSORtoOGBHbA1+lDFZzHWWkzD/M9nzSLNn+rUk19Hs/My8D/lQ314suQ8dWGzbW/9w1lbRkRvGZ3+xY0m9AvmW7HCdJWnisb2tSWMfWJLFerUlhXVoarHOAxXW962/Etb/oU1rHZOadw87YoCzkgIpvNNY7RvZGxFJMjSJ7I3D6sDOlwcrMBE6qm4+JiKd0Slefb0U9nVSP0wBFxErAKcCT6lPvycwPTPd4y3Le2a2xfkHbvtbn76rArp0Ojoh1gWfUzdMy8+bBZk+ZuXdmRq8FOLhxyHaNfZfWc/h3OY9ExPrAM+vmHzLzH40NluXY+XpjfZce6XYBWo1LP249aXmOrX9mahraL/UY4QKwHCUNzdDbQvz80pgaWTtgRGxF+RtYHrgJeHZmXtj7KGkoRvGZ37NdobYtXFaTX9Z4ftEMX4s0E6P6zG/V3VcFtu+Rrtn++ZOuqaQlM4r7/pLG+jZ90jZ/NL+kaypJ0kJgfVuTwjq2Jon1ak0K69LSANX+nafVzWfU/p+d7Er57Ac4cegZG6AFG1CRmWcz1fHslRGxZYdk/87UtDuHzqdIGN3LR4G76/rHI2LF5s66/fG6eVdNrwGqUWUnAlvXpw7NzHfO4lSW5RyLiL0jYoU+ad4M7FA3L6HRybc6nNLIBfD+iHhA2/FLA59katq+Dy1RpjVs/l2OgYjYKSK6RrNHxIMoDRKtWWE+2SGZZTkmMvOXTM1esGcdceleImJt4N11czFwZFsSy3P8vLSxfsw0j7EcJQ3UINpCImJRRGRdjupyKT+/NFZGde9HxBMpg0msDNwK7JiZPxvEa5BmaoSf+dJYGfH3ndvr+v/UWSTvJSL2AhbVzVMy8/LpvxJp+kZ0358G3FbXXxcRm3TKS0T8M1MDhPwZOH/6r0SSNN9Y39aksI6tSWK9WpPCurQ0M7XfaOt+P6hLsg/Xx2WAw2o/0OY51gRag7DfSOlHOm/0m2ZmvnsjZRqeFYHvRcR7KVFkKwJ7APvUdBcDh8xJDidcRDwVeETjqTUb64+IiL2b6TPzqPZzZObFEfEh4O3AZsCZEfEB4A+UacH2AzatyT+Umb8b2AtQy5eBZ9X1HwBHRMTGPdIvzsyL25+0LMfCQcAhEfF1SuT3H4BbgFWATYAXMxU4sxjYJzPvbp4gM6+PiP2ATwMPB/4vIt5DmcliHeBNwHY1+Zcz84xhviAtGf8ux8bHgWXr3+ZZwKXA3yn/NxcBr2Hqf+hPgMPaT2BZjp03AVsC9wdOjoiPAv+PUq5bAPsDrWjuA5ozjoDlOW4iYnXguXXzV5n58+kcZzlKGpKht4X4+aUxNdR7PyI2BL5L+f4G8E7gpj7tH1dn5tUzvZY0A7Z/a1KN4vvOnyLiv4APUtpFz67fd37J1My8r6vJ/wa8eXYvRZq2od73mXljRLwfeBfl94CfRsTHge8DNwAPAp4HvJqpAfvenpn3zPoVSZLmC+vbmhTWsTVJrFdrUliX1kQYRD/s6cjMH0TEVyh/PzsD36/9nf5C+ax/B/Cwmny/zLxhNteZK5GZc52HoYqInYBjmZpCpN3FlOj2348uV2qpkXsvm276OsVdp/MsBXwOeEWPw4+gdP72H9KARcRMP0guy8z1upzLspxDEXEpJQiinyuAV2Tm93uc62DgAKDj3y2l4/C/ZObtXfZryGo06YF1c7tuwS3+Xc69Gfxtfh14VWbe2OU8luUYqRWa4ymV6E4SeE9mHtDleMtzTETEa4FP1c3/yMxpz75kOUoahiVpC4mIRUxNaXx0Zu7d5Rp+fmnsDPPer43N7bOG9XNwZh40w2OkGRnFZ36f619Kqa92be+ThmFU935EvI8SLNqtjfNq4PmZedb0ci7N3rDv+4gI4H8oHU663fMAdwL/mZkf7pFGkrSAWN/WpLCOrUlivVqTwrq0JsEg+mG3fS/v+n07Ilak9HXaocvp7wH+ez5+X1+qf5L5LTO/BTwe+Ajlw+82ylQi51JHTDSYYv7LzHsy85XAjsBJlIinxfXxJGCHzHyVnTjGn2U5555Nmc7sBEpU+F+Bu4CbKaPNfh14OfDoXsEUAJl5IPBU4EvA5ZRyvJoShfuizNzRYIr5wb/LsfAySvDLdyjfZ66n/G3eSJn95TPAVpn5gm7BFGBZjpvM/AnwOOBg4BeUkTduBy6hVFKe3C2Yoh5veY6Pl9THu4EvzuRAy1HSMIyiLcTPL40j2wE1ibzvNalGde9n5v6UGXu/QJkx9A7gJuAcymAyj7LTh0Zl2Pd9Fm8GNqfMQP0rym8Dd1Pu+59ROolsbAcQSZos1js0KbzXNUmsV2tSWJeWBisz/56ZOwIvpvQDvZryG/HllH6iT52PwRQwATNUSJIkSZIkSZIkSZIkSZIkSZIktVvwM1RIkiRJkiRJkiRJkiRJkiRJkiS1M6BCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSJEmSJEmSJEmSJEmSJEmSJE0cAyokSZIkSZIkSZIkSZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSJEmSJEmSJEmSJEmSJEmSJE0cAyokSZIkSZIkSZIkSZIkSZIkSdLEMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEmSJEmSJEmSJEmSJEmSJEnSxDGgQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJGjMRcVREZERcOtd5AYiIvWt+MiLWm+v8SJIkSZKkyRARixptEovmOj+SJEmSJEmSJGnhMaBCkiRJkiRJkiRJkiRJkiRJkiRNHAMqJEnSEhm3GTUkSZIkSdL4ioj1GrNO7D3X+ZEkSZIkSZIkSZNtmbnOgCRJGm+ZeRRw1BxnQ5IkSZIkTZjMPAOIuc6HJEmSJEmSJElauJyhQpIkSZIkSZIkSZIkSZIkSZIkTRwDKiRJkiRJkiRJkiRJkiRJkiRJ0sQxoEKSNKci4qCIyIjIun3/iDg4Ii6MiFsi4vqIOD0i9pzGudaLiI/UY2+OiNsi4ncR8ZmI2KTPsVmXg+r2MyLimxFxZUTcHhF/jIhPRMRDpvtaeqRb1Ljeon6vq8PxK0fE7hFxeEScHxE3RcSdEXFNRPwwIt4aEfeb4et9ekR8LSIur+e6tJF270b69dpfL/Cy+tTDG+n+sdS0Ozee22Mar/GQmvauiFhnpu+RJEmSJEnDFBEbR8Q7I+K7EXFFRNxR2zF+FxFHR8RTpnmerWv9/rcR8beIWFzPd3JE/GtE3L/HsTtFxPGN618XEWdFxNt7tQsMsv0iIp4cEUdExMURcWttQ7k8In4WEYfV9oBopE/gksYpjuzQlnDQTPLQSLtDRBxb23BaebkkIr5e2zZWakt/r/aOiFgqIvaJiJ9GxA31HL+MiHe0H9vl+ktHxMtq2f2lUSY/iYi3RMSKfY6f0XvZOG6FiPi3iDgjStvQnVHa034bEd+u116vX/4lSZIkSVqIImK72lbzxyh9SP4WERdExIe69UVobzupde+3RcTPo/RFuTkizo6IN0TEMtPIwwo17WkRcVVt/7k6Ik6NiFf2OkdEXFrzclTdfnJEHFXbPO7o1L4TEStFxAG1XePWRvvEK6Lo2N4SEY9vPP/2abyufRvpt+iXXpKkcdb3H7okSaMSEesD3wc2bDy9MrAIWBQRzwdenJl3dTj2pcBngeXbdj2iLq+MiAMy833TyMeBwEFtT68P/CuwV0TslJk/ntaLGo5TgG07PL8m8LS6vD4idsjMi/qdLCLeA/znYLN4H6cAVwIPBvYGvtIjP8sAe9XN72TmX4acN0mSJEmSpq3+0Hx6h13LMdUO8dKIeH9m7t/lHCsCRwCdBpB4SF12BNairY0iIlYAvgTs0nbcGsBT6rJvROyYmedP71XNXES8Gfgw9x24ad26PAl4PbAKcMsQ8/EA4Dhg+w6716vLrnX7qC6nWQn4XodzbFKXnSPi6Zl5a5c8PAz4JvCEtl1rAFvX5XW1TC7ucPys3suIeDBwKrBR23Gr1+VRwHOAdYC3dsq7JEmSJEkLUW0/ORLoNODjxnV5XUTsmZnf6nGeBwHfAZ7YtmvzujwrIp6fmfd0Of4JwEnAw9t2rUVph9geeE3th/LXPq/ptcDH6dHnMyLWBX4APLLx9EpMtU/sAnys07GZ+cuIOKe+rpcB7++VH+Dl9fHCzDy7T1pJksaaARWSpHFyHCVw4dPA8cBNwOOB/Sg/AL8Q+Avw5uZBEbEj5QfxoPyofAjlx+S7gK2A/SnBBu+NiBsz81M98rAjsBnwW+CDwC+B1YDdgFfX9ZMjYuPMvHyJX/HsLANcQPmh/lzKexKUCvgulPdpfeAbEfHEzLy9x7l2pXQMuAD4CPArYEXu2xjQyScp5fRu4Hk1H8/ulDAz764jJuwPPDMi1s3MK7qcd0fggXX989PIhyRJkiRJo7QMcCtl8IAfABcBf6PUZR8H/Buljv72iLg4M49sHhwRS1F+SH9mfep3lDr2ucBtlMEItqLU7zs5mqlgil9Q2kF+Q+m8vwdlIIN1gNMi4vGZ+ecle7n3FRGPZyoA4BLgE8D5wPWUTv+PBrajtBc0bVLz9t26/U7Ke9F09QzysRIluKU1M+nPKANu/Aq4A3goZeCJ3fuc6nOUQJSjga8CVwEPA/4D2BLYoub1PgEyNaDjJ/Vad9Rz/RC4FLgf8CzgjZRAm29HxJMy86bG8bN9L6F0omgFUxwLnEBpn7mbch9t1uU4SZIkSZIWrDrD4/GUvgcA36LU9/8I3EOp5/87pe5/fERsnZnndjndCZS698fqea6n1NUPAB4L7ETpS/KZDvl4BKWNYDVK29FhwNnA5cADgJ2B11ACGE6KiG0y884u+dicMjDl5ZR2hHMpbVTbNK63LKW9qhVMcQqlneIKyoAN+wDPpQRzdHN4vdZjImLLzDyrU6IaKLJp3bRfhyRp3ovMnrN6S5I0VBFxEHBg46kXZeaX29KsAvyYMsrfPcATMvNXdd+ylB+o16EEU2zTPvpiRDwcOIvyQ/JtwMMz89q2NM1/iD8Hts3MW9rSvAQ4pm5+LTNf2Lb/H68lM6PHa17E1EiW22XmGW37j6JE+1+Wmet1OP6Rmfm7Hud/BqVjwlLAqzLziA5pmq/3NGDHzLyjy/n2pozcALB+Zl46k/w20m1I6SQSwDsy871d0p1EaTi4BnhIjwYDSZIkSZJGLiLWBO7KzBu77F8OOJkSMHEZsGFm3t3Y/2/AoXXzRGDPTnXyGnjx4GZARB1U4uS6eRqwQ2Yubjvu1ZSgAoCvZububfsPYgnbLyLiXZSOA7fW19dxBMWIWA24uTlKY0SsRwkcAHh5Zh41mzzU/f/D1MAbhwH7ZocfPWqZrN7MZ1t7B8BLMvPYtuOWp3RQ2Bi4Dli7febUiPgi8CJKWW+XmZfQJiI2pbRtrQy8NzPf0dg3q/eyjrT5N2BZ4JDM7DoDRUSskZnXd9svSZIkSdJC0mgbuRPYOTO/0yHN6pS6+uOAMzPzqY19BzHVj+VO4Fkd2iTWAH4NPAj4ZWa2z1pJRJxJGTTjvHqOazukeQ4l8GEpYJ/M/Fzb/kuZmt3iAuBpPdqk3gh8tG5+NDPf3CHNx4E3NJ5qb/NZBbiS0obxuczcp8u1DqUMKnInpV/HNZ3SSZI0X7RPHy1J0lw6uT2YAiAzb6ZEykP53/Xaxu5dKMEUAO9uD6aox18GvK1ursTUtIPd7NMeTFHP8wXg263rRsTafc4zFL2CKer+UymzVwA8v8/p7qEEXXQMphikzPwDcEbd3LtTmjpd5g5181iDKSRJkiRJ4yYzr+32w3Xdv5ipdoiH05gFsgZJtPZdAby0W508M+/pMLvEv9bHOynBCIvb9lN/eD+1bu4aEQ/u85Jmo9UmcnG3AICal5uawRSDFBH3p4ziCGVmijd2Cqao+VjcK5/ACe3BFPW4OygzRkAZOXKj5v4aHNIKWHlDp2CKep7zKAEfcN82kdm+l2tQgikAftTtuHqswRSSJEmSpIlQZ6fYr25+rFMwBUBm3sBUG83WEfHITumAj7cHU9Tjr2dqoIZN6kAIzXxsQwmmAHhZp2CKep7vUGbTgC79KBr+tVebFFN9aa4A3t4lzX9QZrfsqPbP+Wrd3D0iVmxPUweueHHdPNlgCknSQmBAhSRpnBzZbUdmng1cWDef0djVWk96TyP4NeCmDse3uyAzf9Zjf+saywCLeqQbmYhYKyIeGREbtxbK7A5QZvXo5cz2GSeG7PD6+MiIeGqH/XtR3ltwWkhJkiRJ0jwQEctHxMMiYqNGvbw580Ozbv5EYN26/rlOAzr0uM4ywLZ183uZeXmP5K3RDIfVfnFlfdwoIrYYwvmn4+mUgTOgdJC4u1fiPr7YY1+znWiDtn07AktTZkT9Nr21gh7WiYiHNZ6f7Xt5HdAKqHlJvT8kSZIkSZp0GwEb1vXjeyXk3gMUbNklzXTaDAJYv23fzvXxt5l5wTTzsXmP+v3lmfnjbieIiIcAj6mbX+sxgMffKf1nemn161gV+JcO+3eiDDwB9uuQJC0QBlRIksbJOX32n10fH1Uj3gE2ro+X9Ip6ryM2ntd2zJLkAWCTPmmHJiK2jojjIuI64GrgYsr0jq3l1TXpmn1O9cvh5bKjE4Ab6nqnmUJaz52Tmb8aTZYkSZIkSZqZiFg5IvaPiF8AtwKXUQaCaNXLz2skb9bNN22sd/0RvIsNmAog+L8+aZv7e7WDzNaXKbNkLA+cGRHfiojX1oCS6HPsoCzJe9nuoh77mrM7rNK2b7P6uBJwV0RktwU4uXFcc9bTWb2XtWPEcXXzBcDvI+KDEbFDnb1DkiRJkqRJtFlj/aw+dfXmQBdr09mSthk8ulceaj5as2MuS5mRspN+fTua7T+9BhEFOLfXzsz8KfDrutmrX8eV9B9gQpKkecGACknSOLm6z/6/1scAVq/rrcpkv2MBrmo7Zkny0O88QxMRBwE/AV44jTzcZ/rFNjf02T9QmXk7cGzdfGFErNzaV0dhfFzddBQDSZIkSdJYioj1KEET7wUeT5mhoJdm3bwZXHFle8I+mm0A/dovrmqsD7z9IjMvAvaktCssAzwX+BTlfbk6Ir4QEdsM+rptluS9bHdbj333NNbby/qBs7xeKzBmSd/LNwDfqusPB94GnAJcFxHnRMTbImK1WeZRkiRJkqT5aInr6k2ZOWdtBm369e1YvbHedTDSae4HOKI+blfbwgCIiAcDz6mbxyzhjKGSJI0Np4CWJI2TnKNjh3GeoYiI7YED6+YfgQ9Tgiv+BNyamXfVdO8CDpjGKeeicns4sC9wP8oIikfX51ujGPydMjqjJEmSJEnj6AvA+pQ2hCOBrwC/ofwYvTgzMyKWYqrOPYwZG+a8/SIzvx4RpwK7A88GtgHWogQ67AXsFRFHA6/IzHu6n2lea3WWuBbYbgbHXdLcmO17mZl/A3aug1S8EFgEPLHma7O6vDUinp+ZZ8385UmSJEmSNO80Axt2Ai6d5nHTGcRzNvn4BaVuP11/7vL8qPt2HAO8D1gOeBlwcH3+pUy9NgfKlCQtGAZUSJLGyYOAy/vsh9JpoBV9f33bvl5aUzRe3yNNv/M097ef5x8/aEfEUj06C6zc5fnpeHV9vAF4SmZ2GzlgTmbPmI7M/GVEnANsTgmiODoiVgD2qElOyMyb5iyDkiRJkiR1ERGPAZ5aN9+bme/skrRbvfzaxvqDgYtmcPlmO0S/9ou1G+tDa7+o9ffP1oWIeCzwPMpACutQfnA/Dzi037lmof29vKRbwiG6rj6uAvxmSUZlXJL3MjPPBs6ux61CCazYG9iVMiLm1yNiw8z8+2zzJ0mSJEnSPHFdY/3GzPzVHOfjfiPKQ3MGi7X6pO23n8y8NiJOAnYDXhYR78rMpLQ3AJyZmRfPKqeSJI2hpeY6A5IkNWw+zf2/y8zFdb1V8Vw/IrpW+iJiWWDTtmOWJA+dznNzY311untUn2v08rj6eHqPYAooIxCOymxGxTy8Pj4tIjag/MB///qcoxhIkiRJksbV4xrrx/VI161e/vPG+tNmeO0/ArfV9X/qk3aLxvrI2i8y8zeZ+X7gKcCt9ekXtieb6Xm7WJL3clDOq4/LM+C2mGm+l52Ouzkzv5WZ/wJ8rD79YKYCgSRJkiRJWsjOa6xvPWe5mMrHBhGxds+Ug3FhY/3JfdJOtw2j1a9jfWBRRGwFPKY+Z78OSdKCYkCFJGmcvKzbjojYHNi4bp7a2NVaD8psB928AFitw/HtNomITXvsf0V9vBs4o21fcyTEXhXQPXrs66c1u1TXUSJr/vt1rBik2+vj8jM45suUzgBBGcGgVXaXAKcPLGeSJEmSJA1Wc9bnXjM4vLbL879ganbOV0XE/aZ74cy8C/hh3XxmRKzbI/mr6uNdzEH7RWZeDrRGKVyzbfftjfWZtCW0O52pQIN9I2LpJTjXbH2LqQCRNw3jAn3ey35Oa6zP9FhJkiRJkuajnwNX1PV9ImKFOcrHN+tjAG8c9sUy8wqm2g92i4iObS71/dhtmqc9Fbisrr+cqX4dtwBfnWVWJUkaSwZUSJLGyc4RcZ+R9mrngs/UzXsa6wDfAP5S198REZt0OP6hwIfr5m3AkX3y8dmIuE+niIh4EbBD67qZeWVbkp9SOioAvDkiosM53sa9R4mcqd/Vx6dGxCM6nH8t4AtLcP7ZaL0PD4yIVaZzQGbezFQF+zXA0+v6UXWaSEmSJEmSxtHvGut7d0oQEa8DntdpX2beA3yobq4LHBMRy3U5z1IRsU7b04fVx+WAI+qMnO3HvQJ4Vt08YRjtFxHx/Ii4f4/9D2VqxMJL2nZfB7RmHt2w2zn6ycwbmWojejLw0U6vpeZn2Yh44Gyv1SMPvwW+Vjf3iIi39EofEetHxJ5tz83qvYyIDSJi2z5ZfFZjvb0cJEmSJElacGrby3vr5gaUtpeuAzpExKoR8YYh5ON7wNl1822d+sK05WOTiNhpCS/baidZF3h/lzQfAtrbmzqq72VrJop/AXav61/LzFtmm0lJksbRMv2TSJI0MucCX6o/Bh8P/A14PLAf8Oia5rDM/GXrgMxcHBH7UEYEXBU4MyI+RBmB725gK+DtQOtH87dm5rV98rAZcG5EfAC4gDKzxQsoHf8Bbgbe2n5gZl4dEV8D9gSeDXwzIg4D/go8DHgJpZL505qv2TgG2IkyCuYPI+L9wM/qvq2AtwBrA2cBW87yGjP10/q4FPDpiPg48I/3ODN/3+W4wykjGLTK5h7gqCHlUZIkSZKkQTgP+BVlFs3XRMTqlIENrqT8WL0XpQ3hTGDrLuc4jFK3fyawC3BBRHyS0iZxG6Ve/xRK+8KXgINaB2bmKbXtYTdKZ/n/jYj/AS4CVqfMKtGaXfN6SjvBvQwiEvFtAAAgAElEQVSo/eJNwBcj4hTgB8BvgJtqHjYD9gVWrGk/3Xb9uyLinPr+vCIizgPOB+5s5Tszr+9y3XYHUN7HTYA3AFtGxGco7TmLKWWyTX2t72Q47Q6vo7zmDYBDIuJ5lPabC4E7gAcATwCeQxlQ4kTKzJ0ts30vHwacHhG/ruc8F/hz3fdQSieHVmeN84H/G8zLlSRJkiRp7H2aqXaX3YAn1faCsyl17lUpgxcsAnamzKb5iSHk40X1mmsAx0XEXsBxlAE77qb0ldiU0k70FOAQSt+X2foEpQ/GxsCb6iCdn6PM2LEusA+wY81TayCNfgNefh44EFip7TlJkhYUAyokSePkhZRAiNfXpd3X6dwR4JSIeDkl2n4V4F11abobOCAzP9UnD6fU5UA6z2TxN2DnzLy0y/FvpvzY/UjguXVp+golkODUPvnoKDOPj4gjKZXgdYCPtSW5u+ZhdUYXUPED4H8pFfwX1aWp4+iQmfnT+qP/RvWp0zLzT0PLpSRJkiRJSygzMyJeQqkLr05py2gfYfACyo/1f6GDzLwnIp4PHE0JvngU8NEZZOOllLb9XYAnAcd2SPMXYMfM/HOHfTCY9ouVKK9zty777wEOzMxvdNj3PkoHgQdQgkaaDqYRRNJLZt4WEU+ntBk9jTJTxWenc+ygZOb1EbE1ZSbObWo+ntbjkL91eG5J3suNmGpb6eQiYFdnBJUkSZIkTYrafrM7cCjwWsoMmR/sccjVQ8rHHyJiS0q7xcaUwIles1B0ajOYyfUWR8SOlHarDenc5vM94CPAt+v27X3OeUVEfBf45/rUxZn5kyXJpyRJ42ipuc6AJEktmXkJ5Yfv91JG47uNMjrAj4C9MvMFmXlXl2OPpowgcGg99lbg78AfKBH3m2bm+6aZj4MoowaeQhmdcTFwKfBJ4HGZ+cMex/4V+CfgA5RRBe6gjAjZeg17UoIeZi0zX0EZLfLHlNky7gAuo4yIuVVmHrok559Ffu6hjIr5buAXwC30H8Wgpdnpw1EMJEmSJEljLzPPB55IGe3wMsrMCtdTRvd7K7BFZl7Z5xy3ZeZulBkLvgBcQmnHWAxcTgk2eA1lZML2Y2/PzF0pIyieQAmeWAzcQJmFYH/g0TWf3a6/pO0Xe1JGNfwSZfaDq4C7KG0CFwKforTFvLvL9U8BtgdOqvm/s1O66cjMazNzW2BXyoynV9TXczvwR+BrwIu596wQA5WZV2Xm0yidFL5Yr3sb5XVdQ5nt4xBg29qu0zTb9/LHlJE03wecDvye0k50J6U963uUTiNPrG1ukiRJkiRNjMy8MzNfT5k18uOUATBuorR33ESpgx9BGezisUPMx8WUdqQXUQIr/sRUG9CVwBmUvhZPzsz2gUNnc70/UV7zgZRZVv8O3EgZJPP1lMCIFRqH3DSN036hsd5pYFJJkua9cFAiSdJcioiDKBU5MrPjTAYjykfrH+LBNaBCIxARX6Q0HNwAPDgz75jjLEmSJEmSJEmSJEmSJC1IEfFO4L8pAzqskpk9Z6mIiPcA/0kJRnlov4FEJEmaj5yhQpIkzYmIuD+wS938osEUkiRJkiRJkiRJkiRJwxERAexeN8+fRjDF0sBL6+a3DaaQJC1UBlRIkqS58m/AinX903OZEUmSJEmSJEmSJEmSpPksItaLiGV6JHkXsHFdP3oap3wxsG5dt1+HJGnB6vXPU5IkaWBqpX09YHlgO8qUkADfzMwL5ypfkiRJkiRJkiRJkiRJC8DewMsj4kvAmcBfgGWBxwIvAxbVdL8GPtfpBBHxiHrMZsBH6tO/AP7fsDItSdJcM6BCkiSNyrrA79qeuwl4yxzkRZIkSZIkSZIkSZIkaaF5GPD2HvsvAnbMzDu67G/v13En8LrMzEFkTpKkcWRAhSRJmgtXA2cB78jMP8x1ZiRJkiRJkiRJkiRJkua5IygDWz4LeASwFrAScD1llokTgc9n5uJpnOsG4OfAf2XmWcPJriRJ4yEMHJQkSZIkSZIkSZIkSZIkSZIkSZNmqbnOgCRJkiRJkiRJkiRJkiRJkiRJ0qgZUCFJkiRJkiRJkiRJkiRJkiRJkiaOARWSJEmSJEmSJEmSJEmSJEmSJGniGFAhSZIkSZIkSZIkSZIkSZIkSZImjgEVkiRJkiRJkiRJkiRJkiRJkiRp4hhQIUmSJEmSJEmSJEmSJEmSJEmSJo4BFZIkSZIkSZIkSZIkSZIkSZIkaeIYUCFJkiRJkiRJkiRJkiRJkiRJkiaOARWSJEmSJEmSJEmSJEmSJEmSJGniGFAhSZIkSZIkSZIkSZIkSZL+P3t3kNPWFQZQ+OK6IlUbxKQDpGQH6bCsg3Yj7KxlHbSzZg8ZZBIMlRopmA6aSIWQAk3ws32+b2SuLN4/ssV/dQQAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHLmq37gzs7O7hjjh/c/vh5jXK56BgAAANbeV2OM79+//uPq6urtlMPAl2IvAgAAwD3ZjbB17EUAAAC4p5XuRVYeVIx//jj+bYLnAgAAsJl+HGP8PvUQ8IXYiwAAAPBQdiNsC3sRAAAAHurR9yKzx/zlAAAAAAAAAAAAAAAA62iK/1Dx+sOL09PTcXBwMMEIAAAArLNXr16Nw8PDDz++/q/3woaxFwEAAOBOdiNsKXsRAAAA7rTqvcgUQcXlhxcHBwfj2bNnE4wAAADABrm8+y2wMexFAAAAeCi7EbaFvQgAAAAP9eh7kdljPwAAAAAAAAAAAAAAAGDdCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHIEFQAAAAAAAAAAAAAAQI6gAgAAAAAAAAAAAAAAyBFUAAAAAAAAAAAAAAAAOYIKAAAAAAAAAAAAAAAgR1ABAAAAAAAAAAAAAADkCCoAAAAAAAAAAAAAAIAcQQUAAAAAAAAAAAAAAJAjqAAAAAAAAAAAAAAAAHLmUw+wbpbL5VgsFtfO9vb2xmymPQEAAADYNrftgqa2XC7H+fn5tbOnT5/aT30G+z0AAAAAAFjPe5FVK93DuB+B+xFU3LBYLMbR0dG1s5OTk7G/vz/RRAAAAAA8ltt2QWwf+z0AAAAAAHAvUuN+BO5HdgQAAAAAAAAAAAAAAOQIKm44Ozu71xkAAAAAAAAAAAAAALC5BBUAAAAAAAAAAAAAAEDOfOoBAAAAAGCd/Pni53E1351ugHd/je9e/nrt6OLFT2PMn0w00GbZefd2fPvyl6nHAAAAAACAjTD5vciqbek9jPsR+P8EFQAAAADwL1fz3XH19TeTPX/ntsP5k0lnAgAAAAAAttPU9yKr5h4GuGk29QAAAAAAAAAAAAAAAACrJqgAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMiZTz3Aulkulx+dvXnzZjx//nzMZvoTAAAAYHstl8uxWCyune3t7dmJAHwmn68AAAAA28W+B4BN47vr0wQVN1xcXHx0dnx8PE5OTsb+/v4EEwEAAACsxmKxGEdHR9fO7EQAPp/PVwAAAIDtYt8DwKbx3fVpkhIAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAPibvfuJjeuq/wZ87Lj5ya/SNEZq+6LWYovUIL1ITXYNKxYsQIioiaNEqhDQFJImFFg6RaLuFikhEW1ZISVK0qqoArGhK9JVky4imggQC6SGqmoiZJpatX6uY78bbDnj8Z07M/fM3Lnf55EQ9vjc8+/eOb33jD8xAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQEVJH330UfrHP/6RlpaW0sLCwvrrCwsLaWlpKS0tLa2/tvZ962vtbCy3VZnW8v0oe3y/7Qyr7rrJMdatrqvWtiLNM0TlfQ5EYb3Lx9wCADRT0X1eu591W77b9te+n5+f37L8Vsd02mevuu/dau1n0++xo4wzl17nzXx3VsUc1WWec/UjR70bPzMdRXU550A9WSMgJu/9wSrz+3WDOied2nFtAECzCVSU9MMf/jD94Ac/SN/97nfTgQMH0vz8fJqfn08HDhxIzz//fHrhhRfS4uJiWlxcTC+88EI6efLkfa/99Kc/TYuLi/fVuVb2hRdeSPPz823LtJbvVKZI2eP7bWdYdddNjrFurHOrr3O1DdSL9zkQhfUuH3MLANBMRfd57X7Wbflu21/7/p///Gfav39/+uijjzaVX9snbz1m4775IPrerdZ+ltnnH2Xtzgvl9XpNenbrrIo5qss85+pHjnrXPifdKixXd3U550A9WSMgJu/9wWrdD+j2ub/qvhS149oAgOYTqOjShx9+mD777LN06tSpNDs7mz777LP097//Pd28eTNduHAhnT9/Pt28eTP99a9/ve+1999/P124cOG+utbK3rx5M83OzrYt01q+U5kiZY/vt51h1V03Oca6sc6tvs7VNlAv3udAFNa7fMwtAEAzFd3ntftZt+W7bX/t+x/96EdpZWUlnThxYlP5tX3y1mM27psPou/dau1nmX3+UdbuvFBer9ekZ7fOqpijusxzrn7kqHftc9JTp05VVucg1eWcA/VkjYCYvPcHq3U/oNvn/qr7UtSOawMAmk+gokc3btxIN2/evO+1ixcvposXL2567dKlSymllC5fvpxu3bqVUkrp1q1b66+nlNbr2lhmo1u3bqXLly8XlilS9vh+26miD02QY6wb67x06dL69bPx68uXL6erV6+GmWeIKtJ6CsRmvcvH3AIANFPRfV67n3Vbvtv2N+5Vrv0rjnfu3El//OMf18tv3Ce/dOnSfT3bnlAAACAASURBVMes7Zu37oHm6Hu3Nrax1s9O+/yjrN14mzjOXHq9Jj27dVbFHNVlnnP1I0e9V69eXV8Lbty4ka5evdp3nYNUl3MO1JM1AmLy3h+s1v2Adr9fN6hz0qkd1wYAxCBQUaF79+6llZWVTa/du3cvpZTS559/ns6cOZNWVlbS6dOn11/faK3M6urq+murq6vpzJkzaXl5ecsyRcoe3287VfShCXKMtbXO5eXl9etn49eff/55mpubCzHPEFWk9RSIzXqXj7kFAGimovu8dj87ffp0On36dOnyne4Z2x2zca9yo1/+8pdpeXl50z758vJy22Na90Cr7nu3Wtto1bR77K3G27Rx5tLrNenZrbMq5qgu85yrHznqXVlZSXNzc/e9Njc3t+kz0rqqyzkH6skaATF57w/W6urqpv2A1t+vK3rur7ovRefetQEAcQhUDNi1a9fSq6++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OAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOBPD7kDd7NixY9Nrp0+fTjt37hxCbwAAAAAGZ+fOnemtt97a9BoA/bG+AgAAADSL/R4ARo3/dm1NoKLF+PjmP9qxa9eutq8DAAAANMn4+HjatWvXsLsB0DjWVwAAAIBmsd8DwKjx366tSQkAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAWz1K/gAAIABJREFUAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQA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AAAAAAAoR1ABAAAAAAAAAAAAAACUI6gAAAAAAAAAAAAAAADKEVQAAAAAAAAAAAAAAADlCCoAAAAAAAAAAAAAAIByBBUAAAAAAAAAAAAAAEA5ggoAAAAAAAAAAAAAAKAcQQUAAAAAAAAAAAAAAFCOoAIAAAAAAAAAAAAAAChHUAEAAAAAAAAAAAAAAJQjqAAAAAAAAAAAAAAAAMoRVAAAAAAAAAAAAAAAAOUIKgAAAAAAAAAAAAAAgHIEFQAAAAAAAAAAAAAAQDmCCgAAAAAAAAAAAAAAoBxBBQAAAAAAAAAAAAAAUI6gAgAAAAAAAAAAAAAAKEdQAQAAAAAAAAAAAAAAlCOoAAAAAAAAAAAAAAAAyhFUAAAAAAAAAAAAAAAA5QgqAAAAAAAAAAAAAACAcgQVAAAAAAAAAAAAAABAOYIKAAAAAAAAAAAAAACgHEEFAAAAAAAAAAAAAABQjqACAAAAAAAAAAAAAAAoR1ABAAAAAAAAAAAAAACUI6gAAAAAAAAAAAAAAADKEVQAAAAAAAAAAAAAAADlCCoAAAAAAAAAAAAAAIByBBUAAAAAAAAAAAAAAEA5ggoAAAAAAAAAAAAAAKAcQQUAAAAAAAAAAAAAAFCOoAIAAAAAAAAAAAAAAChHUAEAAAAAAAAAAAAAAJQjqAAAAAAAAAAAAAAAAMoRVAAAAAAAAAAAAAAAAOUIKgAAAAAAAAAAAAAAgHIEFQAAAAAAAAAAAAAAQDmCCgAAAAAAAAAAAAAAoBxBBQAAAAAAAAAAAAAAUI6gAgAAAAAAAAAAAAAAKEdQAQAAAAAAAAAAAAAAlCOoAAAAAAAAAAAAAAAAyhFUAAAAAAAAAAAAAAAA5QgqAAAAAAAAAAAAAACAcgQVAAAAAAAAAAAAAABAOYIKAAAAAAAAAAAAAACgHEEFAAAAAAAAAAAAAABQjqACAAAAAAAAAAAAAAAoR1ABAAAAAAAAAAAAAACUI6gAAAAAAAAAAAAAAADKEVQAAAAAAAAAAAAAAADlCCoAAAAAAAAAAAAAAIByBBUAAAAAAAAAAAAAAEA5ggoAAAAAAAAAAAAAAKAcQQUAAAAAAAAAAAAAAFCOoAIAAAAAAAAAAAAAAChHUAEAAAAAAAAAAAAAAJQjqAAAAAAAAAAAAAAAAMoRVAAAAAAAAAAAAAAAAOUIKgAAAAAAAAAAAAAAgHIE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gHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShU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AAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAADA/7F379HWnHV9wL+/NxcgJCFyUVpAwkVcICqsJkgQ4VVRqwsERClasa9KEVpslaqwrNrUeqOWBVphRbyQIF6gSCJFQaAYigISoBZSCBclUeSSIBJCQhJCpn/MnJz9npy9z97n7LNvz+ez1qx37/fMfp6Z+T3zPDOz5zcbAAAAAAAAAACA5kioAAAAAAAAAAAAAAAAmiOhAgAAAAAAAAAAAAAAaI6ECgAAAAAAAAAAAAAAoDkSKgAAAAAAAAAAAAAAgOZIqAAAAAAAAAAAAAAAAJojoQIAAAAAAAAAAAAAAGiOhAoAAAAAAAAAAAAAAKA5EioAAAAAAAAAAAAAAIDmSKgAAAAAAAAAAAAAAACaI6ECAAAAAAAAAAAAAABojoQKAAAAAAAAAAAAAACgORIqAAAAAAAAAAAAAACA5kioAAAAAAAAAAAAAAAAmiOhAgAAAAAAAAAAAAAAaI6ECgAAAAAAAAAAAAAAoDkSKgAAAAAAAAAAAAAAgOZIqAAAAAAAAAAAAAAAAJojoQIAAAAAAAAAAAAAAGiOhAoAAAAAAAAAAAAAAKA5EioAAAAAAAAAAAAAAIDmSKgAAAAAAAAAAAAAAACaI6ECAAAAAAAAAAAAAABojoQKAAAAAAAAAAAAAACgOScuewEAVtnpp5+eiy666Fb/BwCwrhzfADBvxhYAMB4CAADL57wEAJjEscJ4EioAJjhy5EjOOOOMZS8GAMDcOL4BYN6MLQBgPAQAAJbPeQkAMIljhfGOLHsBAAAAAAAAAAAAAAAAFk1CBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEA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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.figure(figsize=(20,20), dpi=200)\n", + "\n", + "plt.subplot(4,3,1)\n", + "sns.boxplot(x = 'popularity', data = df)\n", + "\n", + "plt.subplot(4,3,2)\n", + "sns.boxplot(x = 'acousticness', data = df)\n", + "\n", + "plt.subplot(4,3,3)\n", + "sns.boxplot(x = 'energy', data = df)\n", + "\n", + "plt.subplot(4,3,4)\n", + "sns.boxplot(x = 'instrumentalness', data = df)\n", + "\n", + "plt.subplot(4,3,5)\n", + "sns.boxplot(x = 'liveness', data = df)\n", + "\n", + "plt.subplot(4,3,6)\n", + "sns.boxplot(x = 'loudness', data = df)\n", + "\n", + "plt.subplot(4,3,7)\n", + "sns.boxplot(x = 'speechiness', data = df)\n", + "\n", + "plt.subplot(4,3,8)\n", + "sns.boxplot(x = 'tempo', data = df)\n", + "\n", + "plt.subplot(4,3,9)\n", + "sns.boxplot(x = 'time_signature', data = df)\n", + "\n", + "plt.subplot(4,3,10)\n", + "sns.boxplot(x = 'danceability', data = df)\n", + "\n", + "plt.subplot(4,3,11)\n", + "sns.boxplot(x = 'length', data = df)\n", + "\n", + "plt.subplot(4,3,12)\n", + "sns.boxplot(x = 'release_date', data = df)" + ] + }, + { + "source": [ + "ಸಮಾನ ಶ್ರೇಣಿಗಳಿರುವ ಕೆಲವು ಕಾಲಮ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ. ನಮ್ಮ ಶೈಲಿಗಳನ್ನು ಸರಿಯಾಗಿ ಇಡಲು artist_top_genre ಕಾಲಮ್ ಅನ್ನು ಸೇರಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import LabelEncoder, StandardScaler\n", + "le = LabelEncoder()\n", + "\n", + "# scaler = StandardScaler()\n", + "\n", + "X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')]\n", + "\n", + "y = df['artist_top_genre']\n", + "\n", + "X['artist_top_genre'] = le.fit_transform(X['artist_top_genre'])\n", + "\n", + "# X = scaler.fit_transform(X)\n", + "\n", + "y = le.transform(y)\n", + "\n" + ] + }, + { + "source": [ + "K-Means ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಎಷ್ಟು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಬೇಕೆಂದು ಹೇಳಬೇಕಾಗಿರುವ ದೋಷವಿದೆ. ನಾವು ಮೂರು ಹಾಡಿನ ಪ್ರಕಾರಗಳಿವೆ ಎಂದು ತಿಳಿದಿದ್ದೇವೆ, ಆದ್ದರಿಂದ 3 ಮೇಲೆ ಗಮನಹರಿಸೋಣ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 0, 2, 1, 1, 0, 1, 0, 0,\n", + " 0, 1, 0, 2, 0, 0, 2, 2, 1, 1, 0, 2, 2, 2, 2, 1, 1, 0, 2, 0, 2, 0,\n", + " 2, 0, 0, 1, 1, 2, 1, 0, 0, 2, 2, 2, 2, 1, 1, 0, 1, 2, 2, 1, 2, 2,\n", + " 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 0, 2, 1, 1, 1, 2, 2, 2,\n", + " 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 0,\n", + " 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, 1, 0, 1, 2, 1, 2,\n", + " 1, 2, 2, 2, 0, 2, 1, 1, 1, 2, 1, 0, 1, 2, 2, 1, 1, 1, 0, 1, 2, 2,\n", + " 2, 1, 1, 0, 1, 2, 1, 1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,\n", + " 0, 1, 0, 0, 1, 0, 0, 2, 0, 0, 1, 1, 2, 0, 2, 2, 0, 2, 2, 1, 1, 0,\n", + " 1, 1, 0, 0, 1, 0, 2, 0, 1, 0, 2, 0, 0, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n", + " 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2,\n", + " 1, 1, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 1, 1, 1, 2, 2, 2,\n", + " 1, 2, 1, 2, 1, 1, 1, 0, 2, 2, 2, 1, 2, 1, 0, 1, 2, 1, 1, 1, 2, 1],\n", + " dtype=int32)" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "\n", + "from sklearn.cluster import KMeans\n", + "\n", + "nclusters = 3 \n", + "seed = 0\n", + "\n", + "km = KMeans(n_clusters=nclusters, random_state=seed)\n", + "km.fit(X)\n", + "\n", + "# Predict the cluster for each data point\n", + "\n", + "y_cluster_kmeans = km.predict(X)\n", + "y_cluster_kmeans" + ] + }, + { + "source": [ + "ಆ ಸಂಖ್ಯೆಗಳು ನಮಗೆ ಹೆಚ್ಚು ಅರ್ಥವಿಲ್ಲ, ಆದ್ದರಿಂದ ನಿಖರತೆಯನ್ನು ನೋಡಲು 'ಸಿಲುಯೆಟ್ ಸ್ಕೋರ್' ಪಡೆಯೋಣ. ನಮ್ಮ ಸ್ಕೋರ್ ಮಧ್ಯದಲ್ಲಿ ಇದೆ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.5466747351275563" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "from sklearn import metrics\n", + "score = metrics.silhouette_score(X, y_cluster_kmeans)\n", + "score" + ] + }, + { + "source": [ + "KMeans ಅನ್ನು ಆಮದು ಮಾಡಿ ಮತ್ತು ಒಂದು ಮಾದರಿಯನ್ನು ನಿರ್ಮಿಸಿ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "wcss = []\n", + "\n", + "for i in range(1, 11):\n", + " kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)\n", + " kmeans.fit(X)\n", + " wcss.append(kmeans.inertia_)" + ] + }, + { + "source": [ + "ಆ ಮಾದರಿಯನ್ನು ಬಳಸಿ, ಎಲ್ಬೋ ವಿಧಾನವನ್ನು ಉಪಯೋಗಿಸಿ, ನಿರ್ಮಿಸಲು ಅತ್ಯುತ್ತಮ ಗುಂಪುಗಳ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ಧರಿಸಿ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n FutureWarning\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.figure(figsize=(10,5))\n", + "sns.lineplot(range(1, 11), wcss,marker='o',color='red')\n", + "plt.title('Elbow')\n", + "plt.xlabel('Number of clusters')\n", + "plt.ylabel('WCSS')\n", + "plt.show()" + ] + }, + { + "source": [ + "Looks like 3 is a good number after all. Fit the model again and create a scatterplot of your clusters. They do group in bunches, but they are pretty close together." + ], + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "from sklearn.cluster import KMeans\n", + "kmeans = KMeans(n_clusters = 3)\n", + "kmeans.fit(X)\n", + "labels = kmeans.predict(X)\n", + "plt.scatter(df['popularity'],df['danceability'],c = labels)\n", + "plt.xlabel('popularity')\n", + "plt.ylabel('danceability')\n", + "plt.show()" + ] + }, + { + "source": [ + "ಈ ಮಾದರಿಯ ನಿಖರತೆ ಕೆಟ್ಟದಾಗಿಲ್ಲ, ಆದರೆ ಅತ್ಯುತ್ತಮವೂ ಅಲ್ಲ. ಡೇಟಾ K-Means ಕ್ಲಸ್ಟರಿಂಗ್‌ಗೆ ಸೂಕ್ತವಾಗಿರದಿರಬಹುದು. ನೀವು ಬೇರೆ ವಿಧಾನವನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 811, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Result: 109 out of 286 samples were correctly labeled.\nAccuracy score: 0.38\n" + ] + } + ], + "source": [ + "labels = kmeans.labels_\n", + "\n", + "correct_labels = sum(y == labels)\n", + "\n", + "print(\"Result: %d out of %d samples were correctly labeled.\" % (correct_labels, y.size))\n", + "\n", + "print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/2-K-Means/solution/tester.ipynb b/translations/kn/5-Clustering/2-K-Means/solution/tester.ipynb new file mode 100644 index 000000000..959bb4a05 --- /dev/null +++ b/translations/kn/5-Clustering/2-K-Means/solution/tester.ipynb @@ -0,0 +1,345 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "6f92868513e59d321245137c1c4c5311", + "translation_date": "2025-12-19T16:52:29+00:00", + "source_file": "5-Clustering/2-K-Means/solution/tester.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# ಸ್ಪೋಟಿಫೈಯಿಂದ ಸಂಗ್ರಹಿಸಿದ ನೈಜೀರಿಯನ್ ಸಂಗೀತ - ಒಂದು ವಿಶ್ಲೇಷಣೆ\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n", + "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n", + "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install seaborn" + ] + }, + { + "source": [ + "ನಾವು ಕೊನೆಯ ಪಾಠದಲ್ಲಿ ಮುಗಿಸಿದ ಸ್ಥಳದಿಂದ ಪ್ರಾರಂಭಿಸಿ, ಡೇಟಾ ಆಮದುಮಾಡಿ ಫಿಲ್ಟರ್ ಮಾಡಲಾಗಿದೆ.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n
" + }, + "metadata": {}, + "execution_count": 105 + } + ], + "source": [ + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import numpy as np\n", + "\n", + "df = pd.read_csv(\"../../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "source": [ + "ನಾವು ಕೇವಲ 3 ಶೈಲಿಗಳ ಮೇಲೆ ಮಾತ್ರ ಗಮನಹರಿಸುವೆವು. ಬಹುಶಃ ನಾವು 3 ಗುಂಪುಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "metadata": {}, + "execution_count": 106 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "5 Kasala Pioneers \n", + "6 Pull Up Everything Pretty \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "5 DRB Lasgidi nigerian pop 2020 184800 26 \n", + "6 prettyboydo nigerian pop 2018 202648 29 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "5 0.803 0.1270 0.525 0.000007 0.1290 -10.034 \n", + "6 0.818 0.4520 0.587 0.004490 0.5900 -9.840 \n", + "\n", + " speechiness tempo time_signature \n", + "1 0.3600 129.993 3 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 \n", + "5 0.1970 100.103 4 \n", + "6 0.1990 95.842 4 " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
5KasalaPioneersDRB Lasgidinigerian pop2020184800260.8030.12700.5250.0000070.1290-10.0340.1970100.1034
6Pull UpEverything Prettyprettyboydonigerian pop2018202648290.8180.45200.5870.0044900.5900-9.8400.199095.8424
\n
" + }, + "metadata": {}, + "execution_count": 107 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "scaler = StandardScaler()\n", + "\n", + "# X = df.loc[:, ('danceability','energy')]\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "ename": "ValueError", + "evalue": "Unknown label type: 'continuous'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# we create an instance of SVM and fit out data. We do not scale our\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;31m# data since we want to plot the support vectors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mls30\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_30\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 30% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0mls50\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_50\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_50\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 50% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0mls100\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 100% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/semi_supervised/_label_propagation.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 229\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mX_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 230\u001b[0;31m \u001b[0mcheck_classification_targets\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 232\u001b[0m \u001b[0;31m# actual graph construction (implementations should override this)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/utils/multiclass.py\u001b[0m in \u001b[0;36mcheck_classification_targets\u001b[0;34m(y)\u001b[0m\n\u001b[1;32m 181\u001b[0m if y_type not in ['binary', 'multiclass', 'multiclass-multioutput',\n\u001b[1;32m 182\u001b[0m 'multilabel-indicator', 'multilabel-sequences']:\n\u001b[0;32m--> 183\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Unknown label type: %r\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0my_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 185\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: Unknown label type: 'continuous'" + ] + } + ], + "source": [ + "from sklearn.svm import SVC\n", + "from sklearn.semi_supervised import LabelSpreading\n", + "from sklearn.semi_supervised import SelfTrainingClassifier\n", + "from sklearn import datasets\n", + "\n", + "X = df[['danceability','acousticness']].values\n", + "y = df['energy'].values\n", + "\n", + "# X = scaler.fit_transform(X)\n", + "\n", + "# step size in the mesh\n", + "h = .02\n", + "\n", + "rng = np.random.RandomState(0)\n", + "y_rand = rng.rand(y.shape[0])\n", + "y_30 = np.copy(y)\n", + "y_30[y_rand < 0.3] = -1 # set random samples to be unlabeled\n", + "y_50 = np.copy(y)\n", + "y_50[y_rand < 0.5] = -1\n", + "# we create an instance of SVM and fit out data. We do not scale our\n", + "# data since we want to plot the support vectors\n", + "ls30 = (LabelSpreading().fit(X, y_30), y_30, 'Label Spreading 30% data')\n", + "ls50 = (LabelSpreading().fit(X, y_50), y_50, 'Label Spreading 50% data')\n", + "ls100 = (LabelSpreading().fit(X, y), y, 'Label Spreading 100% data')\n", + "\n", + "# the base classifier for self-training is identical to the SVC\n", + "base_classifier = SVC(kernel='rbf', gamma=.5, probability=True)\n", + "st30 = (SelfTrainingClassifier(base_classifier).fit(X, y_30),\n", + " y_30, 'Self-training 30% data')\n", + "st50 = (SelfTrainingClassifier(base_classifier).fit(X, y_50),\n", + " y_50, 'Self-training 50% data')\n", + "\n", + "rbf_svc = (SVC(kernel='rbf', gamma=.5).fit(X, y), y, 'SVC with rbf kernel')\n", + "\n", + "# create a mesh to plot in\n", + "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", + "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", + "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", + " np.arange(y_min, y_max, h))\n", + "\n", + "color_map = {-1: (1, 1, 1), 0: (0, 0, .9), 1: (1, 0, 0), 2: (.8, .6, 0)}\n", + "\n", + "classifiers = (ls30, st30, ls50, st50, ls100, rbf_svc)\n", + "for i, (clf, y_train, title) in enumerate(classifiers):\n", + " # Plot the decision boundary. For that, we will assign a color to each\n", + " # point in the mesh [x_min, x_max]x[y_min, y_max].\n", + " plt.subplot(3, 2, i + 1)\n", + " Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n", + "\n", + " # Put the result into a color plot\n", + " Z = Z.reshape(xx.shape)\n", + " plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)\n", + " plt.axis('off')\n", + "\n", + " # Plot also the training points\n", + " colors = [color_map[y] for y in y_train]\n", + " plt.scatter(X[:, 0], X[:, 1], c=colors, edgecolors='black')\n", + "\n", + " plt.title(title)\n", + "\n", + "plt.suptitle(\"Unlabeled points are colored white\", y=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/5-Clustering/README.md b/translations/kn/5-Clustering/README.md new file mode 100644 index 000000000..ee0e990ec --- /dev/null +++ b/translations/kn/5-Clustering/README.md @@ -0,0 +1,44 @@ + +# ಯಂತ್ರ ಅಧ್ಯಯನಕ್ಕಾಗಿ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳು + +ಕ್ಲಸ್ಟರಿಂಗ್ ಎಂದರೆ ಒಂದು ಯಂತ್ರ ಅಧ್ಯಯನ ಕಾರ್ಯವಾಗಿದ್ದು, ಅದು ಪರಸ್ಪರ ಹೋಲುವ ವಸ್ತುಗಳನ್ನು ಕಂಡುಹಿಡಿದು ಅವುಗಳನ್ನು ಕ್ಲಸ್ಟರ್‌ಗಳು ಎಂದು ಕರೆಯುವ ಗುಂಪುಗಳಲ್ಲಿ ಸೇರಿಸುವುದು. ಯಂತ್ರ ಅಧ್ಯಯನದ ಇತರ ವಿಧಾನಗಳಿಂದ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಭಿನ್ನವಾಗಿರುವುದು ಎಂದರೆ, ಇದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಡೆಯುತ್ತದೆ, ವಾಸ್ತವದಲ್ಲಿ, ಇದು ಮೇಲ್ವಿಚಾರಿತ ಅಧ್ಯಯನದ ವಿರುದ್ಧವಾಗಿದೆ ಎಂದು ಹೇಳಬಹುದು. + +## ಪ್ರಾದೇಶಿಕ ವಿಷಯ: ನೈಜೀರಿಯನ್ ಪ್ರೇಕ್ಷಕರ ಸಂಗೀತ ರುಚಿಗೆ ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳು 🎧 + +ನೈಜೀರಿಯಾದ ವೈವಿಧ್ಯಮಯ ಪ್ರೇಕ್ಷಕರಿಗೆ ವೈವಿಧ್ಯಮಯ ಸಂಗೀತ ರುಚಿಗಳು ಇವೆ. Spotify ನಿಂದ ಸ್ಕ್ರೇಪ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ([ಈ ಲೇಖನದಿಂದ ಪ್ರೇರಿತ](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), ನೈಜೀರಿಯಾದಲ್ಲಿ ಜನಪ್ರಿಯವಾಗಿರುವ ಕೆಲವು ಸಂಗೀತಗಳನ್ನು ನೋಡೋಣ. ಈ ಡೇಟಾಸೆಟ್ ವಿವಿಧ ಹಾಡುಗಳ 'ನೃತ್ಯ ಸಾಮರ್ಥ್ಯ' ಅಂಕ, 'ಅಕೌಸ್ಟಿಕ್‌ನೆಸ್', ಶಬ್ದದ ತೀವ್ರತೆ, 'ಸ್ಪೀಚಿನೆಸ್', ಜನಪ್ರಿಯತೆ ಮತ್ತು ಶಕ್ತಿ ಬಗ್ಗೆ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ಡೇಟಾದಲ್ಲಿ ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಆಸಕ್ತಿದಾಯಕವಾಗಿರುತ್ತದೆ! + +![A turntable](../../../translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.kn.jpg) + +> ಫೋಟೋ ಮಾರ್ಸೆಲಾ ಲಾಸ್ಕೋಸ್ಕಿ ಅವರಿಂದ ಅನ್ಸ್ಪ್ಲ್ಯಾಶ್ ನಲ್ಲಿ + +ಈ ಪಾಠ ಸರಣಿಯಲ್ಲಿ, ನೀವು ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸುವ ಹೊಸ ಮಾರ್ಗಗಳನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತೀರಿ. ನಿಮ್ಮ ಡೇಟಾಸೆಟ್‌ಗೆ ಲೇಬಲ್ಗಳು ಇಲ್ಲದಿದ್ದಾಗ ಕ್ಲಸ್ಟರಿಂಗ್ ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ. ಲೇಬಲ್ಗಳು ಇದ್ದರೆ, ನೀವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕಲಿತ ವರ್ಗೀಕರಣ ತಂತ್ರಗಳು ಹೆಚ್ಚು ಉಪಯುಕ್ತವಾಗಬಹುದು. ಆದರೆ ಲೇಬಲ್ಗಳಿಲ್ಲದ ಡೇಟಾವನ್ನು ಗುಂಪುಮಾಡಲು ನೀವು ನೋಡುತ್ತಿರುವಾಗ, ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳು ಮಾದರಿಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಉತ್ತಮ ಮಾರ್ಗವಾಗಿದೆ. + +> ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾದರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದನ್ನು ಕಲಿಯಲು ಸಹಾಯ ಮಾಡುವ ಕಡಿಮೆ-ಕೋಡ್ ಉಪಕರಣಗಳು ಲಭ್ಯವಿವೆ. ಈ ಕಾರ್ಯಕ್ಕಾಗಿ [Azure ML ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## ಪಾಠಗಳು + +1. [ಕ್ಲಸ್ಟರಿಂಗ್ ಪರಿಚಯ](1-Visualize/README.md) +2. [ಕೆ-ಮೀನ್ಸ್ ಕ್ಲಸ್ಟರಿಂಗ್](2-K-Means/README.md) + +## ಕ್ರೆಡಿಟ್ಸ್ + +ಈ ಪಾಠಗಳನ್ನು 🎶 [ಜೆನ್ ಲೂಪರ್](https://www.twitter.com/jenlooper) ರವರು ಬರೆದಿದ್ದು, [ರಿಶಿತ್ ದಾಗ್ಲಿ](https://rishit_dagli) ಮತ್ತು [ಮುಹಮ್ಮದ್ ಸಕಿಬ್ ಖಾನ್ ಇನಾನ್](https://twitter.com/Sakibinan) ರವರ ಸಹಾಯಕ ವಿಮರ್ಶೆಗಳೊಂದಿಗೆ. + +[ನೈಜೀರಿಯನ್ ಹಾಡುಗಳು](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) ಡೇಟಾಸೆಟ್ Spotify ನಿಂದ ಸ್ಕ್ರೇಪ್ ಮಾಡಲಾಗಿ Kaggle ನಿಂದ ಪಡೆದಿದೆ. + +ಈ ಪಾಠವನ್ನು ರಚಿಸಲು ಸಹಾಯ ಮಾಡಿದ ಉಪಯುಕ್ತ ಕೆ-ಮೀನ್ಸ್ ಉದಾಹರಣೆಗಳಲ್ಲಿ ಈ [ಐರಿಸ್ ಅನ್ವೇಷಣೆ](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), ಈ [ಪರಿಚಯಾತ್ಮಕ ನೋಟ್ಬುಕ್](https://www.kaggle.com/prashant111/k-means-clustering-with-python), ಮತ್ತು ಈ [ಕಲ್ಪನಾತ್ಮಕ NGO ಉದಾಹರಣೆ](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering) ಸೇರಿವೆ. + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/1-Introduction-to-NLP/README.md b/translations/kn/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..6f7322625 --- /dev/null +++ b/translations/kn/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,181 @@ + +# ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ ಪರಿಚಯ + +ಈ ಪಾಠವು *ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ* ಎಂಬ ಉಪಕ್ಷೇತ್ರವಾದ *ಗಣನಾತ್ಮಕ ಭಾಷಾಶಾಸ್ತ್ರ* ನ ಸಂಕ್ಷಿಪ್ತ ಇತಿಹಾಸ ಮತ್ತು ಪ್ರಮುಖ ತತ್ವಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. + +## [ಪೂರ್ವ-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ಪರಿಚಯ + +NLP, ಸಾಮಾನ್ಯವಾಗಿ ತಿಳಿದಿರುವಂತೆ, ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಅನ್ವಯಿಸಿ ಉತ್ಪಾದನಾ ಸಾಫ್ಟ್‌ವೇರ್‌ನಲ್ಲಿ ಬಳಸಲಾಗಿರುವ ಅತ್ಯಂತ ಪ್ರಸಿದ್ಧ ಕ್ಷೇತ್ರಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. + +✅ ನೀವು ಪ್ರತಿದಿನವೂ ಬಳಸುವ ಯಾವುದೇ ಸಾಫ್ಟ್‌ವೇರ್‌ನಲ್ಲಿ ಕೆಲವು NLP ಅಳವಡಿಸಲಾಗಿದೆ ಎಂದು ನೀವು ಭಾವಿಸುತ್ತೀರಾ? ನಿಮ್ಮ ಪದ ಸಂಸ್ಕರಣಾ ಕಾರ್ಯಕ್ರಮಗಳು ಅಥವಾ ನೀವು ನಿಯಮಿತವಾಗಿ ಬಳಸುವ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಬಗ್ಗೆ ಏನು? + +ನೀವು ತಿಳಿಯಲಿರುವುದು: + +- **ಭಾಷೆಗಳ ಕಲ್ಪನೆ**. ಭಾಷೆಗಳು ಹೇಗೆ ಅಭಿವೃದ್ಧಿ ಹೊಂದಿದವು ಮತ್ತು ಅಧ್ಯಯನದ ಪ್ರಮುಖ ಕ್ಷೇತ್ರಗಳು ಯಾವುವು. +- **ವ್ಯಾಖ್ಯಾನ ಮತ್ತು ತತ್ವಗಳು**. ಕಂಪ್ಯೂಟರ್‌ಗಳು ಪಠ್ಯವನ್ನು ಹೇಗೆ ಪ್ರಕ್ರಿಯೆ ಮಾಡುತ್ತವೆ ಎಂಬುದರ ಬಗ್ಗೆ ವ್ಯಾಖ್ಯಾನಗಳು ಮತ್ತು ತತ್ವಗಳನ್ನು ನೀವು ಕಲಿಯುತ್ತೀರಿ, ಇದರಲ್ಲಿ ಪಾರ್ಸಿಂಗ್, ವ್ಯಾಕರಣ ಮತ್ತು ನಾಮಪದ ಮತ್ತು ಕ್ರಿಯಾಪದಗಳನ್ನು ಗುರುತಿಸುವುದು ಸೇರಿದೆ. ಈ ಪಾಠದಲ್ಲಿ ಕೆಲವು ಕೋಡಿಂಗ್ ಕಾರ್ಯಗಳಿವೆ ಮತ್ತು ಕೆಲವು ಪ್ರಮುಖ ತತ್ವಗಳನ್ನು ಪರಿಚಯಿಸಲಾಗುತ್ತದೆ, ಅವುಗಳನ್ನು ನೀವು ಮುಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕೋಡ್ ಮಾಡಲು ಕಲಿಯುತ್ತೀರಿ. + +## ಗಣನಾತ್ಮಕ ಭಾಷಾಶಾಸ್ತ್ರ + +ಗಣನಾತ್ಮಕ ಭಾಷಾಶಾಸ್ತ್ರವು ಹಲವು ದಶಕಗಳ ಸಂಶೋಧನೆ ಮತ್ತು ಅಭಿವೃದ್ಧಿಯ ಕ್ಷೇತ್ರವಾಗಿದ್ದು, ಕಂಪ್ಯೂಟರ್‌ಗಳು ಭಾಷೆಗಳೊಂದಿಗೆ ಹೇಗೆ ಕೆಲಸ ಮಾಡಬಹುದು, ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದು, ಅನುವಾದ ಮಾಡಬಹುದು ಮತ್ತು ಸಂವಹನ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ಅಧ್ಯಯನ ಮಾಡುತ್ತದೆ. ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ (NLP) ಎಂಬುದು ಸಂಬಂಧಿತ ಕ್ಷೇತ್ರವಾಗಿದ್ದು, ಕಂಪ್ಯೂಟರ್‌ಗಳು 'ನೈಸರ್ಗಿಕ' ಅಥವಾ ಮಾನವ ಭಾಷೆಗಳನ್ನು ಹೇಗೆ ಪ್ರಕ್ರಿಯೆ ಮಾಡಬಹುದು ಎಂಬುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸಿದೆ. + +### ಉದಾಹರಣೆ - ಫೋನ್ ಡಿಕ್ಟೇಶನ್ + +ನೀವು ಟೈಪ್ ಮಾಡುವ ಬದಲು ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಮಾತಾಡಿದ್ದರೆ ಅಥವಾ ವರ್ಚುವಲ್ ಸಹಾಯಕನಿಗೆ ಪ್ರಶ್ನೆ ಕೇಳಿದ್ದರೆ, ನಿಮ್ಮ ಮಾತು ಪಠ್ಯ ರೂಪಕ್ಕೆ ಪರಿವರ್ತಿತಗೊಂಡು ನಂತರ ನೀವು ಮಾತನಾಡಿದ ಭಾಷೆಯಿಂದ *ಪಾರ್ಸ್* ಮಾಡಲಾಯಿತು. ಪತ್ತೆಯಾದ ಪ್ರಮುಖ ಪದಗಳನ್ನು ನಂತರ ಫೋನ್ ಅಥವಾ ಸಹಾಯಕನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಕ್ರಮ ಕೈಗೊಳ್ಳಲು ಸಾಧ್ಯವಾದ ಸ್ವರೂಪಕ್ಕೆ ಪ್ರಕ್ರಿಯೆ ಮಾಡಲಾಯಿತು. + +![comprehension](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.kn.png) +> ನಿಜವಾದ ಭಾಷಾಶಾಸ್ತ್ರದ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಕಷ್ಟ! ಚಿತ್ರವನ್ನು [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಒದಗಿಸಿದ್ದಾರೆ + +### ಈ ತಂತ್ರಜ್ಞಾನ ಹೇಗೆ ಸಾಧ್ಯವಾಯಿತು? + +ಇದು ಸಾಧ್ಯವಾಯಿತು ಏಕೆಂದರೆ ಯಾರೋ ಕಂಪ್ಯೂಟರ್ ಪ್ರೋಗ್ರಾಂ ಬರೆಯುವ ಮೂಲಕ ಇದನ್ನು ಮಾಡಿದರು. ಕೆಲವು ದಶಕಗಳ ಹಿಂದೆ, ಕೆಲವು ವಿಜ್ಞಾನ ಕಲ್ಪನೆ ಲೇಖಕರು ಜನರು ತಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗಳಿಗೆ ಮುಖ್ಯವಾಗಿ ಮಾತಾಡುತ್ತಾರೆ ಮತ್ತು ಕಂಪ್ಯೂಟರ್‌ಗಳು ಯಾವಾಗಲೂ ಅವರ ಅರ್ಥವನ್ನು ನಿಖರವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತವೆ ಎಂದು ಭವಿಷ್ಯವಾಣಿ ಮಾಡಿದ್ದರು. ದುಃಖಕರವಾಗಿ, ಇದು ಅನೇಕರು ಊಹಿಸಿದಕ್ಕಿಂತ ಕಠಿಣ ಸಮಸ್ಯೆಯಾಗಿದ್ದು, ಇಂದು ಇದು ಬಹಳ ಚೆನ್ನಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲ್ಪಟ್ಟ ಸಮಸ್ಯೆಯಾಗಿದ್ದರೂ, ವಾಕ್ಯದ ಅರ್ಥವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಾಗ 'ಪೂರ್ಣ' ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸಾಧಿಸುವಲ್ಲಿ ಪ್ರಮುಖ ಸವಾಲುಗಳಿವೆ. ವಿಶೇಷವಾಗಿ ಹಾಸ್ಯವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಾಗ ಅಥವಾ ವಾಕ್ಯದಲ್ಲಿ ವ್ಯಂಗ್ಯವನ್ನು ಪತ್ತೆಹಚ್ಚುವಾಗ ಇದು ಕಠಿಣ ಸಮಸ್ಯೆಯಾಗುತ್ತದೆ. + +ಈ ಸಮಯದಲ್ಲಿ, ನೀವು ಶಾಲಾ ತರಗತಿಗಳನ್ನು ನೆನಪಿಸಿಕೊಳ್ಳಬಹುದು, ಅಲ್ಲಿ ಶಿಕ್ಷಕರು ವಾಕ್ಯದ ವ್ಯಾಕರಣ ಭಾಗಗಳನ್ನು ಕಲಿಸುತ್ತಿದ್ದರು. ಕೆಲವು ದೇಶಗಳಲ್ಲಿ ವಿದ್ಯಾರ್ಥಿಗಳಿಗೆ ವ್ಯಾಕರಣ ಮತ್ತು ಭಾಷಾಶಾಸ್ತ್ರವನ್ನು ವಿಶೇಷ ವಿಷಯವಾಗಿ ಕಲಿಸಲಾಗುತ್ತದೆ, ಆದರೆ ಬಹುತೇಕ ದೇಶಗಳಲ್ಲಿ ಈ ವಿಷಯಗಳು ಭಾಷೆ ಕಲಿಕೆಯ ಭಾಗವಾಗಿ ಸೇರಿವೆ: ಪ್ರಾಥಮಿಕ ಶಾಲೆಯಲ್ಲಿ ನಿಮ್ಮ ಮೊದಲ ಭಾಷೆಯನ್ನು (ಓದಲು ಮತ್ತು ಬರೆಯಲು ಕಲಿಯುವುದು) ಮತ್ತು ನಂತರದ ಶಾಲೆಯಲ್ಲಿ ಎರಡನೇ ಭಾಷೆಯನ್ನು ಕಲಿಯುವಾಗ. ನಾಮಪದಗಳನ್ನು ಕ್ರಿಯಾಪದಗಳಿಂದ ಅಥವಾ ಕ್ರಿಯಾವಿಶೇಷಣಗಳನ್ನು ವಿಶೇಷಣಗಳಿಂದ ವಿಭಜಿಸುವಲ್ಲಿ ನೀವು ಪರಿಣತಿ ಹೊಂದಿರದಿದ್ದರೂ ಚಿಂತೆ ಮಾಡಬೇಡಿ! + +*ಸರಳ ವರ್ತಮಾನ* ಮತ್ತು *ವರ್ತಮಾನ ಪ್ರಗತಿಶೀಲ* ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ನೀವು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಹಿಂಜರಿದರೆ, ನೀವು ಏಕಾಂತವಲ್ಲ. ಇದು ಅನೇಕ ಜನರಿಗೆ, ಭಾಷೆಯ ಸ್ಥಳೀಯ ಭಾಷಣಕಾರರಿಗೂ ಸವಾಲಾಗಿರುವ ವಿಷಯ. ಒಳ್ಳೆಯ ಸುದ್ದಿ ಎಂದರೆ ಕಂಪ್ಯೂಟರ್‌ಗಳು ಅಧಿಕೃತ ನಿಯಮಗಳನ್ನು ಅನ್ವಯಿಸುವಲ್ಲಿ ಬಹಳ ಚೆನ್ನಾಗಿವೆ, ಮತ್ತು ನೀವು ಮಾನವನಂತೆ ವಾಕ್ಯವನ್ನು *ಪಾರ್ಸ್* ಮಾಡಬಲ್ಲ ಕೋಡ್ ಬರೆಯಲು ಕಲಿಯುತ್ತೀರಿ. ನಂತರ ನೀವು ಪರಿಶೀಲಿಸುವ ದೊಡ್ಡ ಸವಾಲು ಎಂದರೆ ವಾಕ್ಯದ *ಅರ್ಥ* ಮತ್ತು *ಭಾವನೆ* ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು. + +## ಪೂರ್ವಾಪೇಕ್ಷಿತಗಳು + +ಈ ಪಾಠಕ್ಕಾಗಿ ಮುಖ್ಯ ಪೂರ್ವಾಪೇಕ್ಷಿತವು ಈ ಪಾಠದ ಭಾಷೆಯನ್ನು ಓದಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಸಾಮರ್ಥ್ಯ. ಯಾವುದೇ ಗಣಿತ ಸಮಸ್ಯೆಗಳು ಅಥವಾ ಸಮೀಕರಣಗಳನ್ನು ಪರಿಹರಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಮೂಲ ಲೇಖಕ ಈ ಪಾಠವನ್ನು ಇಂಗ್ಲಿಷ್‌ನಲ್ಲಿ ಬರೆದಿದ್ದರೂ, ಇದು ಇತರ ಭಾಷೆಗಳಿಗೆ ಅನುವಾದಿಸಲಾಗಿದೆ, ಆದ್ದರಿಂದ ನೀವು ಅನುವಾದವನ್ನು ಓದುತ್ತಿರಬಹುದು. ವಿವಿಧ ಭಾಷೆಗಳ ವ್ಯಾಕರಣ ನಿಯಮಗಳನ್ನು ಹೋಲಿಸಲು ಕೆಲವು ಉದಾಹರಣೆಗಳಲ್ಲಿ ವಿವಿಧ ಭಾಷೆಗಳು ಬಳಸಲ್ಪಟ್ಟಿವೆ. ಅವುಗಳು *ಅನುವಾದಿಸಲ್ಪಟ್ಟಿಲ್ಲ*, ಆದರೆ ವಿವರಣಾತ್ಮಕ ಪಠ್ಯವನ್ನು ಅನುವಾದಿಸಲಾಗಿದೆ, ಆದ್ದರಿಂದ ಅರ್ಥ ಸ್ಪಷ್ಟವಾಗಿರಬೇಕು. + +ಕೋಡಿಂಗ್ ಕಾರ್ಯಗಳಿಗಾಗಿ, ನೀವು Python ಬಳಸುತ್ತೀರಿ ಮತ್ತು ಉದಾಹರಣೆಗಳು Python 3.8 ಬಳಕೆ ಮಾಡುತ್ತಿವೆ. + +ಈ ವಿಭಾಗದಲ್ಲಿ ನೀವು ಬೇಕಾಗಿರುವುದು ಮತ್ತು ಬಳಸುವದು: + +- **Python 3 ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ**. Python 3 ನಲ್ಲಿ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ, ಈ ಪಾಠದಲ್ಲಿ ಇನ್‌ಪುಟ್, ಲೂಪ್‌ಗಳು, ಫೈಲ್ ಓದುವುದು, ಅರೆಗಳು ಬಳಸಲಾಗುತ್ತವೆ. +- **Visual Studio Code + ವಿಸ್ತರಣೆ**. ನಾವು Visual Studio Code ಮತ್ತು ಅದರ Python ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸುತ್ತೇವೆ. ನೀವು ನಿಮ್ಮ ಆಯ್ಕೆಯ Python IDE ಕೂಡ ಬಳಸಬಹುದು. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) Python ಗಾಗಿ ಸರಳೀಕೃತ ಪಠ್ಯ ಪ್ರಕ್ರಿಯೆ ಗ್ರಂಥಾಲಯವಾಗಿದೆ. ನಿಮ್ಮ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಇದನ್ನು ಸ್ಥಾಪಿಸಲು TextBlob ಸೈಟ್‌ನ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ (ಕೆಳಗಿನಂತೆ ಕಾರ್ಪೋರಾ ಸಹ ಸ್ಥಾಪಿಸಿ): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 ಟಿಪ್: ನೀವು Python ಅನ್ನು ನೇರವಾಗಿ VS Code ಪರಿಸರಗಳಲ್ಲಿ ಚಾಲನೆ ಮಾಡಬಹುದು. ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ [ಡಾಕ್ಯುಮೆಂಟೇಶನ್](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) ಪರಿಶೀಲಿಸಿ. + +## ಯಂತ್ರಗಳೊಂದಿಗೆ ಮಾತಾಡುವುದು + +ಕಂಪ್ಯೂಟರ್‌ಗಳು ಮಾನವ ಭಾಷೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸುವ ಇತಿಹಾಸವು ದಶಕಗಳ ಹಿಂದೆ ಆರಂಭವಾಯಿತು, ಮತ್ತು ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪರಿಗಣಿಸಿದ ಮೊದಲ ವಿಜ್ಞಾನಿಗಳಲ್ಲಿ ಒಬ್ಬರು *ಆಲನ್ ಟ್ಯೂರಿಂಗ್*. + +### 'ಟ್ಯೂರಿಂಗ್ ಪರೀಕ್ಷೆ' + +1950ರ ದಶಕದಲ್ಲಿ ಟ್ಯೂರಿಂಗ್ *ಕೃತಕ ಬುದ್ಧಿಮತ್ತೆ* ಕುರಿತು ಸಂಶೋಧನೆ ಮಾಡುತ್ತಿದ್ದಾಗ, ಮಾನವ ಮತ್ತು ಕಂಪ್ಯೂಟರ್ (ಟೈಪ್ ಮಾಡಿದ ಪತ್ರಚರ್ಯೆಯ ಮೂಲಕ) ನಡುವೆ ಸಂಭಾಷಣಾ ಪರೀಕ್ಷೆಯನ್ನು ನೀಡಬಹುದೇ ಎಂದು ಪರಿಗಣಿಸಿದರು, ಅಲ್ಲಿ ಸಂಭಾಷಣೆಯಲ್ಲಿರುವ ಮಾನವನು ಅವರು ಮತ್ತೊಬ್ಬ ಮಾನವನೊಂದಿಗೆ ಮಾತನಾಡುತ್ತಿದ್ದಾರೋ ಅಥವಾ ಕಂಪ್ಯೂಟರ್‌ನೊಂದಿಗೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲಾರರು. + +ನಿರ್ದಿಷ್ಟ ಸಮಯದ ಸಂಭಾಷಣೆಯ ನಂತರ, ಮಾನವನು ಉತ್ತರಗಳು ಕಂಪ್ಯೂಟರ್‌ನಿಂದ ಬಂದವೆಯೇ ಎಂದು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ಆ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು *ಚಿಂತಿಸುವುದಾಗಿ* ಹೇಳಬಹುದೇ? + +### ಪ್ರೇರಣೆ - 'ನಕಲಿ ಆಟ' + +ಈ ಕಲ್ಪನೆ ಒಂದು ಪಕ್ಷದ ಆಟದಿಂದ ಬಂದಿದೆ, ಅದನ್ನು *ನಕಲಿ ಆಟ* ಎಂದು ಕರೆಯುತ್ತಾರೆ, ಅಲ್ಲಿ ಒಂದು ಪ್ರಶ್ನೆಗಾರನು ಒಬ್ಬನಾಗಿ ಕೊಠಡಿಯಲ್ಲಿ ಇರುತ್ತಾನೆ ಮತ್ತು ಇನ್ನೊಂದು ಕೊಠಡಿಯಲ್ಲಿ ಇರುವ ಇಬ್ಬರಲ್ಲಿ ಯಾರು ಪುರುಷ ಮತ್ತು ಯಾರು ಮಹಿಳೆ ಎಂದು ನಿರ್ಧರಿಸುವ ಕಾರ್ಯವನ್ನು ಹೊಂದಿರುತ್ತಾನೆ. ಪ್ರಶ್ನೆಗಾರನು ಟಿಪ್ಪಣಿಗಳನ್ನು ಕಳುಹಿಸಬಹುದು ಮತ್ತು ಬರೆಯಲಾದ ಉತ್ತರಗಳು ರಹಸ್ಯ ವ್ಯಕ್ತಿಯ ಲಿಂಗವನ್ನು ಬಹಿರಂಗಪಡಿಸುವಂತಹ ಪ್ರಶ್ನೆಗಳನ್ನು ಯೋಚಿಸಬೇಕು. ಖಂಡಿತವಾಗಿ, ಇನ್ನೊಂದು ಕೊಠಡಿಯಲ್ಲಿ ಇರುವ ಆಟಗಾರರು ಪ್ರಶ್ನೆಗಾರನನ್ನು ತಪ್ಪುಮಾಡಲು ಅಥವಾ ಗೊಂದಲಕ್ಕೆ ಒಳಪಡಿಸಲು ಉತ್ತರಿಸುತ್ತಾರೆ, ಆದರೆ ಸತ್ಯವಂತಿಕೆಯಿಂದ ಉತ್ತರಿಸುತ್ತಿರುವಂತೆ ಕಾಣಿಸುವ ಪ್ರಯತ್ನ ಮಾಡುತ್ತಾರೆ. + +### ಎಲಿಜಾ ಅಭಿವೃದ್ಧಿ + +1960ರ ದಶಕದಲ್ಲಿ MIT ವಿಜ್ಞಾನಿ *ಜೋಸೆಫ್ ವೈಜನ್‌ಬಾಮ್* [*ಎಲಿಜಾ*](https://wikipedia.org/wiki/ELIZA) ಎಂಬ ಕಂಪ್ಯೂಟರ್ 'ಥೆರಪಿಸ್ಟ್' ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದರು, ಅದು ಮಾನವನಿಗೆ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೇಳಿ ಅವರ ಉತ್ತರಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಂಡಂತೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತಿತ್ತು. ಆದರೆ, ಎಲಿಜಾ ವಾಕ್ಯವನ್ನು ಪಾರ್ಸ್ ಮಾಡಿ ಕೆಲವು ವ್ಯಾಕರಣ ರಚನೆಗಳು ಮತ್ತು ಪ್ರಮುಖ ಪದಗಳನ್ನು ಗುರುತಿಸಬಹುದು, ಆದರೂ ವಾಕ್ಯವನ್ನು *ಅರ್ಥಮಾಡಿಕೊಂಡಿದೆ* ಎಂದು ಹೇಳಲಾಗುವುದಿಲ್ಲ. ಎಲಿಜಾ "**ನಾನು** ದುಃಖಿತ" ಎಂಬ ವಾಕ್ಯವನ್ನು ಪಡೆದರೆ, ಅದು ವಾಕ್ಯದಲ್ಲಿ ಪದಗಳನ್ನು ಮರುಕ್ರಮಿಸಿ "ನೀವು ಎಷ್ಟು ಕಾಲ ದುಃಖಿತ ಇದ್ದೀರಿ" ಎಂಬ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ರೂಪಿಸಬಹುದು. + +ಇದು ಎಲಿಜಾ ವಾಕ್ಯವನ್ನು ಅರ್ಥಮಾಡಿಕೊಂಡು ಮುಂದಿನ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುತ್ತಿರುವಂತೆ ಭಾಸ ನೀಡಿತು, ಆದರೆ ವಾಸ್ತವದಲ್ಲಿ ಅದು ಕಾಲವನ್ನು ಬದಲಾಯಿಸಿ ಕೆಲವು ಪದಗಳನ್ನು ಸೇರಿಸುತ್ತಿತ್ತು. ಎಲಿಜಾ ಪ್ರತಿಕ್ರಿಯೆ ಹೊಂದಿರುವ ಪ್ರಮುಖ ಪದವನ್ನು ಗುರುತಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ಅದು ಬದಲಾಗಿ ಅನೇಕ ವಿಭಿನ್ನ ಹೇಳಿಕೆಗಳಿಗೆ ಅನ್ವಯಿಸುವ ಸಾಧ್ಯವಿರುವ ಯಾದೃಚ್ಛಿಕ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನೀಡುತ್ತಿತ್ತು. ಉದಾಹರಣೆಗೆ, ಬಳಕೆದಾರನು "**ನೀವು** ಒಂದು ಸೈಕಲ್" ಎಂದು ಬರೆದರೆ, ಅದು "ನಾನು ಎಷ್ಟು ಕಾಲ ಸೈಕಲ್ ಆಗಿದ್ದೇನೆ?" ಎಂದು ಪ್ರತಿಕ್ರಿಯಿಸಬಹುದು, ಬದಲಾಗಿ ಹೆಚ್ಚು ಯುಕ್ತಿಪೂರ್ಣ ಪ್ರತಿಕ್ರಿಯೆಯ ಬದಲು. + +[![ಎಲಿಜಾ ಜೊತೆ ಚಾಟ್](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "ಎಲಿಜಾ ಜೊತೆ ಚಾಟ್") + +> 🎥 ಮೂಲ ELIZA ಪ್ರೋಗ್ರಾಂ ಕುರಿತು ವೀಡಿಯೋಗಾಗಿ ಮೇಲಿನ ಚಿತ್ರವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ + +> ಗಮನಿಸಿ: ನೀವು 1966 ರಲ್ಲಿ ಪ್ರಕಟಿತ [ಎಲಿಜಾ](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) ಮೂಲ ವಿವರಣೆಯನ್ನು ಓದಲು ACM ಖಾತೆ ಹೊಂದಿದ್ದರೆ ಓದಬಹುದು. ಬದಲಾಗಿ, ಎಲಿಜಾ ಬಗ್ಗೆ [ವಿಕಿಪೀಡಿಯಾ](https://wikipedia.org/wiki/ELIZA) ನಲ್ಲಿ ಓದಿ. + +## ವ್ಯಾಯಾಮ - ಮೂಲಭೂತ ಸಂಭಾಷಣಾ ಬಾಟ್ ಕೋಡಿಂಗ್ + +ಎಲಿಜಾ ಹೋಲುವ ಸಂಭಾಷಣಾ ಬಾಟ್ ಒಂದು ಪ್ರೋಗ್ರಾಂ ಆಗಿದ್ದು, ಬಳಕೆದಾರರ ಇನ್‌ಪುಟ್ ಅನ್ನು ಪಡೆಯುತ್ತದೆ ಮತ್ತು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಪ್ರತಿಕ್ರಿಯಿಸುವಂತೆ ಕಾಣುತ್ತದೆ. ಎಲಿಜಾ ಹೋಲುವಂತೆ, ನಮ್ಮ ಬಾಟ್‌ ಬಳಿ ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಸಂಭಾಷಣೆ ನಡೆಸುತ್ತಿರುವಂತೆ ಕಾಣಿಸುವ ಹಲವು ನಿಯಮಗಳಿರಲಾರವು. ಬದಲಾಗಿ, ನಮ್ಮ ಬಾಟ್‌ಗೆ ಒಂದೇ ಸಾಮರ್ಥ್ಯವಿದೆ, ಅದು ಯಾವುದೇ ಸರಳ ಸಂಭಾಷಣೆಯಲ್ಲಿ ಕೆಲಸ ಮಾಡಬಹುದಾದ ಯಾದೃಚ್ಛಿಕ ಪ್ರತಿಕ್ರಿಯೆಗಳೊಂದಿಗೆ ಸಂಭಾಷಣೆಯನ್ನು ಮುಂದುವರಿಸುವುದು. + +### ಯೋಜನೆ + +ಸಂಭಾಷಣಾ ಬಾಟ್ ನಿರ್ಮಿಸುವಾಗ ನಿಮ್ಮ ಹಂತಗಳು: + +1. ಬಳಕೆದಾರರಿಗೆ ಬಾಟ್ ಜೊತೆ ಹೇಗೆ ಸಂವಹನ ಮಾಡಬೇಕೆಂದು ಸೂಚನೆಗಳನ್ನು ಮುದ್ರಿಸಿ +2. ಲೂಪ್ ಪ್ರಾರಂಭಿಸಿ + 1. ಬಳಕೆದಾರ ಇನ್‌ಪುಟ್ ಸ್ವೀಕರಿಸಿ + 2. ಬಳಕೆದಾರನಿಗೆ ನಿರ್ಗಮಿಸಲು ಕೇಳಿದ್ದರೆ, ನಿರ್ಗಮಿಸಿ + 3. ಬಳಕೆದಾರ ಇನ್‌ಪುಟ್ ಪ್ರಕ್ರಿಯೆ ಮಾಡಿ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ ನಿರ್ಧರಿಸಿ (ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಪ್ರತಿಕ್ರಿಯೆ ಸಾಧ್ಯವಿರುವ ಸಾಮಾನ್ಯ ಪ್ರತಿಕ್ರಿಯೆಗಳ ಪಟ್ಟಿಯಿಂದ ಯಾದೃಚ್ಛಿಕ ಆಯ್ಕೆ) + 4. ಪ್ರತಿಕ್ರಿಯೆ ಮುದ್ರಿಸಿ +3. ಹಂತ 2 ಗೆ ಮರುಹೊಂದಿಸಿ + +### ಬಾಟ್ ನಿರ್ಮಾಣ + +ಮುಂದೆ ಬಾಟ್ ರಚಿಸೋಣ. ನಾವು ಕೆಲವು ವಾಕ್ಯಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ. + +1. ಕೆಳಗಿನ ಯಾದೃಚ್ಛಿಕ ಪ್ರತಿಕ್ರಿಯೆಗಳೊಂದಿಗೆ Python ನಲ್ಲಿ ಈ ಬಾಟ್ ಅನ್ನು ನೀವು ಸ್ವತಃ ರಚಿಸಿ: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + ಮಾರ್ಗದರ್ಶನಕ್ಕಾಗಿ ಕೆಲವು ಉದಾಹರಣಾ ಔಟ್‌ಪುಟ್ (ಬಳಕೆದಾರ ಇನ್‌ಪುಟ್ `>` ಚಿಹ್ನೆಯಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಸಾಲುಗಳಲ್ಲಿ): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + ಈ ಕಾರ್ಯಕ್ಕೆ ಒಂದು ಸಾಧ್ಯವಾದ ಪರಿಹಾರವನ್ನು [ಇಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) ನೋಡಬಹುದು + + ✅ ನಿಲ್ಲಿಸಿ ಮತ್ತು ಪರಿಗಣಿಸಿ + + 1. ಯಾದೃಚ್ಛಿಕ ಪ್ರತಿಕ್ರಿಯೆಗಳು ಯಾರನ್ನಾದರೂ ಬಾಟ್ ಅವರನ್ನು ನಿಜವಾಗಿಯೂ ಅರ್ಥಮಾಡಿಕೊಂಡಿದೆ ಎಂದು ಭಾವಿಸುವಂತೆ 'ತಪ್ಪಿಸುವುದೇ' ಎಂದು ನೀವು ಭಾವಿಸುತ್ತೀರಾ? + 2. ಬಾಟ್ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಲು ಯಾವ ವೈಶಿಷ್ಟ್ಯಗಳು ಬೇಕಾಗುತ್ತವೆ? + 3. ಒಂದು ಬಾಟ್ ವಾಕ್ಯದ ಅರ್ಥವನ್ನು ನಿಜವಾಗಿಯೂ 'ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದರೆ', ಅದು ಸಂಭಾಷಣೆಯ ಹಿಂದಿನ ವಾಕ್ಯಗಳ ಅರ್ಥವನ್ನು 'ಸ್ಮರಿಸಬೇಕಾಗುತ್ತದೆಯೇ'? + +--- + +## 🚀ಸವಾಲು + +ಮೇಲಿನ "ನಿಲ್ಲಿಸಿ ಮತ್ತು ಪರಿಗಣಿಸಿ" ಅಂಶಗಳಲ್ಲಿ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಅದನ್ನು ಕೋಡ್‌ನಲ್ಲಿ ಅನುಷ್ಠಾನಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಪೇಪರ್‌ನಲ್ಲಿ ಪ್ಸ್ಯೂಡೋಕೋಡ್ ಬಳಸಿ ಪರಿಹಾರವನ್ನು ಬರೆಯಿರಿ. + +ಮುಂದಿನ ಪಾಠದಲ್ಲಿ, ನೀವು ನೈಸರ್ಗಿಕ ಭಾಷೆಯನ್ನು ಪಾರ್ಸ್ ಮಾಡುವ ಮತ್ತು ಯಂತ್ರ ಅಧ್ಯಯನದ ಹಲವಾರು ಇತರ ವಿಧಾನಗಳನ್ನು ಕಲಿಯುತ್ತೀರಿ. + +## [ಪೋಸ್ಟ್-ಪಾಠ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಕೆಳಗಿನ ಉಲ್ಲೇಖಗಳನ್ನು ಹೆಚ್ಚಿನ ಓದು ಅವಕಾಶಗಳಾಗಿ ನೋಡಿ. + +### ಉಲ್ಲೇಖಗಳು + +1. ಶೂಬರ್ಟ್, ಲೆನ್ಹಾರ್ಟ್, "ಗಣನಾತ್ಮಕ ಭಾಷಾಶಾಸ್ತ್ರ", *ಸ್ಟ್ಯಾನ್ಫರ್ಡ್ ತತ್ವಶಾಸ್ತ್ರ ನಿಘಂಟು* (ವಸಂತ 2020 ಆವೃತ್ತಿ), ಎಡ್ವರ್ಡ್ ಎನ್. ಜಾಲ್ಟಾ (ಸಂಪಾದಕ), URL = . +2. ಪ್ರಿನ್ಸ್ಟನ್ ವಿಶ್ವವಿದ್ಯಾಲಯ "ವರ್ಡ್‌ನೆಟ್ ಬಗ್ಗೆ." [WordNet](https://wordnet.princeton.edu/). ಪ್ರಿನ್ಸ್ಟನ್ ವಿಶ್ವವಿದ್ಯಾಲಯ. 2010. + +## ಹೋಮ್ವರ್ಕ್ + +[ಬಾಟ್ ಹುಡುಕಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/kn/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..88a5f7b2b --- /dev/null +++ b/translations/kn/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,27 @@ + +# ಬಾಟ್ ಹುಡುಕಿ + +## ಸೂಚನೆಗಳು + +ಬಾಟ್‌ಗಳು ಎಲ್ಲೆಡೆ ಇವೆ. ನಿಮ್ಮ ಕಾರ್ಯ: ಒಂದು ಹುಡುಕಿ ಅದನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಿ! ನೀವು ಅವುಗಳನ್ನು ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ, ಬ್ಯಾಂಕಿಂಗ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಮತ್ತು ಫೋನಿನಲ್ಲಿ ಕಂಡುಹಿಡಿಯಬಹುದು, ಉದಾಹರಣೆಗೆ ನೀವು ಹಣಕಾಸು ಸೇವಾ ಕಂಪನಿಗಳಿಗೆ ಸಲಹೆ ಅಥವಾ ಖಾತೆ ಮಾಹಿತಿಗಾಗಿ ಕರೆ ಮಾಡಿದಾಗ. ಬಾಟ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಿ ಮತ್ತು ನೀವು ಅದನ್ನು ಗೊಂದಲಕ್ಕೆ ತರುವ ಸಾಧ್ಯತೆ ಇದೆಯೇ ಎಂದು ನೋಡಿ. ನೀವು ಬಾಟ್ ಅನ್ನು ಗೊಂದಲಕ್ಕೆ ತರುವುದಾದರೆ, ಅದು ಏಕೆ ಸಂಭವಿಸಿತು ಎಂದು ನೀವು ಯೋಚಿಸುತ್ತೀರಿ? ನಿಮ್ಮ ಅನುಭವದ ಬಗ್ಗೆ ಒಂದು ಚಿಕ್ಕ ಪ್ರಬಂಧವನ್ನು ಬರೆಯಿರಿ. + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | +| | ಪೂರ್ಣ ಪುಟದ ಪ್ರಬಂಧ ಬರೆಯಲಾಗಿದೆ, ಅಂದಾಜು ಬಾಟ್ ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ವಿವರಿಸಿ ಮತ್ತು ಅದರೊಂದಿಗೆ ನಿಮ್ಮ ಅನುಭವವನ್ನು ವಿವರಿಸಲಾಗಿದೆ | ಪ್ರಬಂಧ ಅಪೂರ್ಣ ಅಥವಾ ಚೆನ್ನಾಗಿ ಸಂಶೋಧಿಸಲ್ಪಟ್ಟಿಲ್ಲ | ಯಾವುದೇ ಪ್ರಬಂಧ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/2-Tasks/README.md b/translations/kn/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..a91f20506 --- /dev/null +++ b/translations/kn/6-NLP/2-Tasks/README.md @@ -0,0 +1,230 @@ + +# ಸಾಮಾನ್ಯ ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ ಕಾರ್ಯಗಳು ಮತ್ತು ತಂತ್ರಗಳು + +ಬಹುತೇಕ *ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ* ಕಾರ್ಯಗಳಿಗೆ, ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬೇಕಾದ ಪಠ್ಯವನ್ನು ವಿಭಜಿಸಿ, ಪರಿಶೀಲಿಸಿ, ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ನಿಯಮಗಳು ಮತ್ತು ಡೇಟಾ ಸೆಟ್‌ಗಳೊಂದಿಗೆ ಸಂಗ್ರಹಿಸಬೇಕು ಅಥವಾ ಕ್ರಾಸ್ ರೆಫರೆನ್ಸ್ ಮಾಡಬೇಕು. ಈ ಕಾರ್ಯಗಳು, ಪ್ರೋಗ್ರಾಮರ್‌ಗೆ ಪಠ್ಯದ _ಅರ್ಥ_ ಅಥವಾ _ಉದ್ದೇಶ_ ಅಥವಾ ಕೇವಲ ಪದಗಳ ಮತ್ತು ಪದಗಳ _ಆವರ್ತನ_ ಅನ್ನು ಪಡೆಯಲು ಅನುಮತಿಸುತ್ತವೆ. + +## [ಪೂರ್ವ-ವ್ಯಾಖ್ಯಾನ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +ಪಠ್ಯವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಸಾಮಾನ್ಯ ತಂತ್ರಗಳನ್ನು ಕಂಡುಹಿಡಿಯೋಣ. ಯಂತ್ರ ಅಧ್ಯಯನದೊಂದಿಗೆ ಸಂಯೋಜಿಸಿದಾಗ, ಈ ತಂತ್ರಗಳು ನಿಮಗೆ ದೊಡ್ಡ ಪ್ರಮಾಣದ ಪಠ್ಯವನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ವಿಶ್ಲೇಷಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತವೆ. ಈ ಕಾರ್ಯಗಳಿಗೆ ML ಅನ್ವಯಿಸುವ ಮೊದಲು, NLP ತಜ್ಞನು ಎದುರಿಸುವ ಸಮಸ್ಯೆಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳೋಣ. + +## NLP ಗೆ ಸಾಮಾನ್ಯವಾದ ಕಾರ್ಯಗಳು + +ನೀವು ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ಪಠ್ಯವನ್ನು ವಿಶ್ಲೇಷಿಸುವ ವಿವಿಧ ವಿಧಾನಗಳಿವೆ. ನೀವು ನಿರ್ವಹಿಸಬಹುದಾದ ಕಾರ್ಯಗಳಿವೆ ಮತ್ತು ಈ ಕಾರ್ಯಗಳ ಮೂಲಕ ನೀವು ಪಠ್ಯದ ಅರ್ಥವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ನಿರ್ಣಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಈ ಕಾರ್ಯಗಳನ್ನು ಕ್ರಮವಾಗಿ ನಿರ್ವಹಿಸುತ್ತೀರಿ. + +### ಟೋಕನೈಜೆಷನ್ + +ಬಹುಶಃ ಬಹುತೇಕ NLP ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಮೊದಲಿಗೆ ಪಠ್ಯವನ್ನು ಟೋಕನ್‌ಗಳಾಗಿ ಅಥವಾ ಪದಗಳಾಗಿ ವಿಭಜಿಸಬೇಕಾಗುತ್ತದೆ. ಇದು ಸರಳವಾಗಿ ಕೇಳಿದರೂ, ವ್ಯಾಕರಣ ಚಿಹ್ನೆಗಳು ಮತ್ತು ವಿಭಿನ್ನ ಭಾಷೆಗಳ ಪದ ಮತ್ತು ವಾಕ್ಯ ವಿಭಾಜಕಗಳನ್ನು ಗಮನದಲ್ಲಿಟ್ಟುಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ, ಇದು ಸಂಕೀರ್ಣವಾಗಬಹುದು. ನೀವು ವಿಭಜನೆಗಳನ್ನು ನಿರ್ಧರಿಸಲು ವಿವಿಧ ವಿಧಾನಗಳನ್ನು ಬಳಸಬೇಕಾಗಬಹುದು. + +![tokenization](../../../../translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.kn.png) +> **Pride and Prejudice** ನಿಂದ ವಾಕ್ಯವನ್ನು ಟೋಕನೈಸ್ ಮಾಡಲಾಗಿದೆ. ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +### ಎम्बೆಡ್ಡಿಂಗ್ಸ್ + +[ಪದ ಎम्बೆಡ್ಡಿಂಗ್ಸ್](https://wikipedia.org/wiki/Word_embedding) ನಿಮ್ಮ ಪಠ್ಯ ಡೇಟಾವನ್ನು ಸಂಖ್ಯಾತ್ಮಕವಾಗಿ ಪರಿವರ್ತಿಸುವ ವಿಧಾನವಾಗಿದೆ. ಎम्बೆಡ್ಡಿಂಗ್ಸ್ ಅನ್ನು ಈ ರೀತಿಯಲ್ಲಿ ಮಾಡಲಾಗುತ್ತದೆ, ಅಂದರೆ ಸಮಾನ ಅರ್ಥವಿರುವ ಪದಗಳು ಅಥವಾ ಜೊತೆಯಾಗಿ ಬಳಸಲಾಗುವ ಪದಗಳು ಗುಂಪು formed ಮಾಡುತ್ತವೆ. + +![word embeddings](../../../../translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.kn.png) +> "ನಿಮ್ಮ ನರಗಳಿಗೆ ನನಗೆ ಅತ್ಯಂತ ಗೌರವವಿದೆ, ಅವು ನನ್ನ ಹಳೆಯ ಸ್ನೇಹಿತರು." - **Pride and Prejudice** ನ ವಾಕ್ಯಕ್ಕೆ ಪದ ಎम्बೆಡ್ಡಿಂಗ್ಸ್. ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +✅ ಪದ ಎम्बೆಡ್ಡಿಂಗ್ಸ್ ಅನ್ನು ಪ್ರಯೋಗಿಸಲು [ಈ ರೋಚಕ ಸಾಧನವನ್ನು](https://projector.tensorflow.org/) ಪ್ರಯತ್ನಿಸಿ. ಒಂದು ಪದವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಸಮಾನ ಪದಗಳ ಗುಂಪುಗಳು ತೋರಿಸಲಾಗುತ್ತದೆ: 'toy' 'disney', 'lego', 'playstation', ಮತ್ತು 'console' ಜೊತೆಗೆ ಗುಂಪು formed ಮಾಡುತ್ತದೆ. + +### ಪಾರ್ಸಿಂಗ್ ಮತ್ತು ಭಾಗ-ಭಾಷಾ ಟ್ಯಾಗಿಂಗ್ + +ಪ್ರತಿ ಟೋಕನೈಸ್ ಮಾಡಿದ ಪದವನ್ನು ಭಾಷೆಯ ಭಾಗವಾಗಿ ಟ್ಯಾಗ್ ಮಾಡಬಹುದು - ನಾಮಪದ, ಕ್ರಿಯಾಪದ, ಅಥವಾ ವಿಶೇಷಣ. ವಾಕ್ಯ `the quick red fox jumped over the lazy brown dog` ಅನ್ನು POS ಟ್ಯಾಗ್ ಮಾಡಿದರೆ fox = ನಾಮಪದ, jumped = ಕ್ರಿಯಾಪದ ಎಂದು ಇರಬಹುದು. + +![parsing](../../../../translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.kn.png) + +> **Pride and Prejudice** ನಿಂದ ವಾಕ್ಯವನ್ನು ಪಾರ್ಸ್ ಮಾಡಲಾಗಿದೆ. ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +ಪಾರ್ಸಿಂಗ್ ಎಂದರೆ ವಾಕ್ಯದಲ್ಲಿ ಯಾವ ಪದಗಳು ಪರಸ್ಪರ ಸಂಬಂಧ ಹೊಂದಿವೆ ಎಂದು ಗುರುತಿಸುವುದು - ಉದಾಹರಣೆಗೆ `the quick red fox jumped` ಒಂದು ವಿಶೇಷಣ-ನಾಮಪದ-ಕ್ರಿಯಾಪದ ಕ್ರಮವಾಗಿದ್ದು, ಇದು `lazy brown dog` ಕ್ರಮದಿಂದ ವಿಭಿನ್ನವಾಗಿದೆ. + +### ಪದ ಮತ್ತು ವಾಕ್ಯांश ಆವರ್ತನೆಗಳು + +ದೊಡ್ಡ ಪಠ್ಯವನ್ನು ವಿಶ್ಲೇಷಿಸುವಾಗ ಉಪಯುಕ್ತ ವಿಧಾನವೆಂದರೆ ಪ್ರತಿಯೊಂದು ಪದ ಅಥವಾ ಆಸಕ್ತಿಯ ವಾಕ್ಯಾಂಶದ ಡಿಕ್ಷನರಿ ನಿರ್ಮಿಸಿ, ಅದು ಎಷ್ಟು ಬಾರಿ ಕಾಣಿಸುತ್ತದೆ ಎಂದು ಎಣಿಸುವುದು. ವಾಕ್ಯ `the quick red fox jumped over the lazy brown dog` ನಲ್ಲಿ 'the' ಪದದ ಆವರ್ತನೆ 2 ಆಗಿದೆ. + +ನಾವು ಪದಗಳ ಆವರ್ತನೆಯನ್ನು ಎಣಿಸುವ ಉದಾಹರಣೆಯ ಪಠ್ಯವನ್ನು ನೋಡೋಣ. ರುದ್ಯಾರ್ಡ್ ಕಿಪ್ಲಿಂಗ್ ಅವರ ಕವಿತೆ The Winners ನಲ್ಲಿ ಕೆಳಗಿನ ಪದ್ಯವಿದೆ: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +ವಾಕ್ಯಾಂಶ ಆವರ್ತನೆಗಳು ಕೇಸ್-ಅಸಂವೇದನಶೀಲ ಅಥವಾ ಕೇಸ್-ಸಂವೇದನಶೀಲವಾಗಿರಬಹುದು, ಉದಾಹರಣೆಗೆ `a friend` ವಾಕ್ಯಾಂಶದ ಆವರ್ತನೆ 2 ಆಗಿದ್ದು, `the` ಆವರ್ತನೆ 6 ಆಗಿದೆ, ಮತ್ತು `travels` 2 ಆಗಿದೆ. + +### ಎನ್-ಗ್ರಾಮ್ಸ್ + +ಪಠ್ಯವನ್ನು ನಿಗದಿತ ಉದ್ದದ ಪದಗಳ ಸರಣಿಗಳಾಗಿ ವಿಭಜಿಸಬಹುದು, ಒಂದು ಪದ (ಯುನಿಗ್ರಾಮ್), ಎರಡು ಪದಗಳು (ಬಿಗ್ರಾಮ್), ಮೂರು ಪದಗಳು (ಟ್ರಿಗ್ರಾಮ್) ಅಥವಾ ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಪದಗಳು (ಎನ್-ಗ್ರಾಮ್). + +ಉದಾಹರಣೆಗೆ `the quick red fox jumped over the lazy brown dog` ನ 2-ಗ್ರಾಮ್ ಅಂಕೆ ಈ ಕೆಳಗಿನ ಎನ್-ಗ್ರಾಮ್‌ಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ: + +1. the quick +2. quick red +3. red fox +4. fox jumped +5. jumped over +6. over the +7. the lazy +8. lazy brown +9. brown dog + +ಇದನ್ನು ವಾಕ್ಯದ ಮೇಲೆ ಸ್ಲೈಡಿಂಗ್ ಬಾಕ್ಸ್ ಆಗಿ ದೃಶ್ಯೀಕರಿಸುವುದು ಸುಲಭವಾಗಬಹುದು. ಇಲ್ಲಿ 3 ಪದಗಳ ಎನ್-ಗ್ರಾಮ್‌ಗಳಿಗಾಗಿ, ಪ್ರತಿ ವಾಕ್ಯದಲ್ಲಿ ಎನ್-ಗ್ರಾಮ್ ಬೋಲ್ಡ್ ಆಗಿದೆ: + +1. **the quick red** fox jumped over the lazy brown dog +2. the **quick red fox** jumped over the lazy brown dog +3. the quick **red fox jumped** over the lazy brown dog +4. the quick red **fox jumped over** the lazy brown dog +5. the quick red fox **jumped over the** lazy brown dog +6. the quick red fox jumped **over the lazy** brown dog +7. the quick red fox jumped over **the lazy brown** dog +8. the quick red fox jumped over the **lazy brown dog** + +![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> ಎನ್-ಗ್ರಾಮ್ ಮೌಲ್ಯ 3: ಇನ್ಫೋಗ್ರಾಫಿಕ್ [ಜೆನ್ ಲೂಪರ್](https://twitter.com/jenlooper) ಅವರಿಂದ + +### ನಾಮಪದ ವಾಕ್ಯಾಂಶ ಹೊರತೆಗೆಯುವುದು + +ಬಹುತೇಕ ವಾಕ್ಯಗಳಲ್ಲಿ, ನಾಮಪದವು ವಿಷಯ ಅಥವಾ ವಸ್ತುವಾಗಿರುತ್ತದೆ. ಇಂಗ್ಲಿಷ್‌ನಲ್ಲಿ, ಇದು ಸಾಮಾನ್ಯವಾಗಿ 'a' ಅಥವಾ 'an' ಅಥವಾ 'the' ಮುಂಚಿತವಾಗಿರುವುದರಿಂದ ಗುರುತಿಸಬಹುದು. ವಾಕ್ಯದ ಅರ್ಥವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸುವಾಗ 'ನಾಮಪದ ವಾಕ್ಯಾಂಶವನ್ನು ಹೊರತೆಗೆಯುವುದು' NLP ನಲ್ಲಿ ಸಾಮಾನ್ಯ ಕಾರ್ಯವಾಗಿದೆ. + +✅ "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun." ಎಂಬ ವಾಕ್ಯದಲ್ಲಿ, ನೀವು ನಾಮಪದ ವಾಕ್ಯಾಂಶಗಳನ್ನು ಗುರುತಿಸಬಹುದೇ? + +`the quick red fox jumped over the lazy brown dog` ವಾಕ್ಯದಲ್ಲಿ 2 ನಾಮಪದ ವಾಕ್ಯಾಂಶಗಳಿವೆ: **quick red fox** ಮತ್ತು **lazy brown dog**. + +### ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ + +ವಾಕ್ಯ ಅಥವಾ ಪಠ್ಯವನ್ನು ಭಾವನೆಗಾಗಿ ವಿಶ್ಲೇಷಿಸಬಹುದು, ಅದು *ಧನಾತ್ಮಕ* ಅಥವಾ *ನಕಾರಾತ್ಮಕ* ಆಗಿದೆಯೇ ಎಂದು. ಭಾವನೆ *ಧ್ರುವೀಯತೆ* ಮತ್ತು *ವಸ್ತುನಿಷ್ಠತೆ/ವಿಷಯನಿಷ್ಠತೆ* ನಲ್ಲಿ ಅಳೆಯಲಾಗುತ್ತದೆ. ಧ್ರುವೀಯತೆ -1.0 ರಿಂದ 1.0 (ನಕಾರಾತ್ಮಕದಿಂದ ಧನಾತ್ಮಕ) ಮತ್ತು 0.0 ರಿಂದ 1.0 (ಅತ್ಯಂತ ವಸ್ತುನಿಷ್ಠದಿಂದ ಅತ್ಯಂತ ವಿಷಯನಿಷ್ಠ) ಅಳೆಯಲಾಗುತ್ತದೆ. + +✅ ನಂತರ ನೀವು ಯಂತ್ರ ಅಧ್ಯಯನ ಬಳಸಿ ಭಾವನೆಯನ್ನು ನಿರ್ಧರಿಸುವ ವಿವಿಧ ವಿಧಾನಗಳನ್ನು ಕಲಿಯುತ್ತೀರಿ, ಆದರೆ ಒಂದು ವಿಧಾನವೆಂದರೆ ಮಾನವ ತಜ್ಞರಿಂದ ಧನಾತ್ಮಕ ಅಥವಾ ನಕಾರಾತ್ಮಕ ಎಂದು ವರ್ಗೀಕರಿಸಲಾದ ಪದಗಳು ಮತ್ತು ವಾಕ್ಯಾಂಶಗಳ ಪಟ್ಟಿ ಹೊಂದಿ, ಆ ಮಾದರಿಯನ್ನು ಪಠ್ಯಕ್ಕೆ ಅನ್ವಯಿಸಿ ಧ್ರುವೀಯತೆ ಅಂಕೆಯನ್ನು ಲೆಕ್ಕಿಸಬಹುದು. ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡಬಹುದು ಮತ್ತು ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಕಡಿಮೆ ಪರಿಣಾಮಕಾರಿಯಾಗಬಹುದು ಎಂದು ನೀವು ನೋಡಬಹುದೇ? + +### ರೂಪಾಂತರ + +ರೂಪಾಂತರವು ನಿಮಗೆ ಒಂದು ಪದವನ್ನು singular ಅಥವಾ plural ರೂಪದಲ್ಲಿ ಪಡೆಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. + +### ಲೆಮಟೈಜೆಷನ್ + +*ಲೆಮ್ಮಾ* ಎಂದರೆ ಪದಗಳ ಗುಂಪಿಗೆ ಮೂಲ ಅಥವಾ ಮುಖ್ಯ ಪದ, ಉದಾಹರಣೆಗೆ *flew*, *flies*, *flying* ಗಳ ಲೆಮ್ಮಾ ಕ್ರಿಯಾಪದ *fly* ಆಗಿದೆ. + +NLP ಸಂಶೋಧಕರಿಗೆ ಉಪಯುಕ್ತವಾದ ಡೇಟಾಬೇಸ್‌ಗಳು ಕೂಡ ಲಭ್ಯವಿವೆ, ವಿಶೇಷವಾಗಿ: + +### ವರ್ಡ್‌ನೆಟ್ + +[WordNet](https://wordnet.princeton.edu/) ಪದಗಳು, ಸಮಾನಾರ್ಥಕಗಳು, ವಿರುದ್ಧಾರ್ಥಕಗಳು ಮತ್ತು ವಿವಿಧ ಭಾಷೆಗಳ ಪ್ರತಿಯೊಂದು ಪದಕ್ಕೆ ಅನೇಕ ವಿವರಗಳ ಡೇಟಾಬೇಸ್ ಆಗಿದೆ. ಅನುವಾದಗಳು, ಸ್ಪೆಲ್ ಚೆಕ್‌ಗಳು ಅಥವಾ ಯಾವುದೇ ರೀತಿಯ ಭಾಷಾ ಸಾಧನಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ ಇದು ಅತ್ಯಂತ ಉಪಯುಕ್ತವಾಗಿದೆ. + +## NLP ಗ್ರಂಥಾಲಯಗಳು + +ಸೌಭಾಗ್ಯವಶಾತ್, ನೀವು ಈ ಎಲ್ಲಾ ತಂತ್ರಗಳನ್ನು ಸ್ವತಃ ನಿರ್ಮಿಸಬೇಕಾಗಿಲ್ಲ, ಏಕೆಂದರೆ ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆ ಅಥವಾ ಯಂತ್ರ ಅಧ್ಯಯನದಲ್ಲಿ ಪರಿಣತಿ ಹೊಂದದ ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರಿಗೆ ಬಹಳ ಸುಲಭವಾಗುವ ಅತ್ಯುತ್ತಮ Python ಗ್ರಂಥಾಲಯಗಳು ಲಭ್ಯವಿವೆ. ಮುಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಇವುಗಳ ಇನ್ನಷ್ಟು ಉದಾಹರಣೆಗಳಿವೆ, ಆದರೆ ಇಲ್ಲಿ ನೀವು ಮುಂದಿನ ಕಾರ್ಯಕ್ಕೆ ಸಹಾಯ ಮಾಡುವ ಕೆಲವು ಉಪಯುಕ್ತ ಉದಾಹರಣೆಗಳನ್ನು ಕಲಿಯುತ್ತೀರಿ. + +### ವ್ಯಾಯಾಮ - `TextBlob` ಗ್ರಂಥಾಲಯ ಬಳಕೆ + +ಈ ರೀತಿಯ ಕಾರ್ಯಗಳನ್ನು ನಿಭಾಯಿಸಲು ಸಹಾಯಕ API ಗಳನ್ನು ಹೊಂದಿರುವ TextBlob ಎಂಬ ಗ್ರಂಥಾಲಯವನ್ನು ಬಳಸಿ. TextBlob "ದೊಡ್ಡ [NLTK](https://nltk.org) ಮತ್ತು [pattern](https://github.com/clips/pattern) ಗ್ರಂಥಾಲಯಗಳ ಮೇಲೆ ನಿಂತಿದೆ ಮತ್ತು ಎರಡರೊಂದಿಗೆ ಚೆನ್ನಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ." ಇದರ API ನಲ್ಲಿ ಸಾಕಷ್ಟು ML ಒಳಗೊಂಡಿದೆ. + +> ಗಮನಿಸಿ: ಅನುಭವಸಂಪನ್ನ Python ಅಭಿವೃದ್ಧಿಪಡಿಸುವವರಿಗೆ ಶಿಫಾರಸು ಮಾಡಲಾದ TextBlob ಗೆ ಉಪಯುಕ್ತ [ತ್ವರಿತ ಪ್ರಾರಂಭ](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) ಮಾರ್ಗದರ್ಶಿ ಲಭ್ಯವಿದೆ + +*ನಾಮಪದ ವಾಕ್ಯಾಂಶಗಳನ್ನು* ಗುರುತಿಸಲು ಪ್ರಯತ್ನಿಸುವಾಗ, TextBlob ನಾಮಪದ ವಾಕ್ಯಾಂಶಗಳನ್ನು ಹುಡುಕಲು ಹಲವಾರು ಎಕ್ಸ್ಟ್ರಾಕ್ಟರ್ ಆಯ್ಕೆಗಳನ್ನು ನೀಡುತ್ತದೆ. + +1. `ConllExtractor` ಅನ್ನು ನೋಡಿ. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # ನಂತರ ಬಳಸಲು Conll ಎಕ್ಸ್ಟ್ರಾಕ್ಟರ್ ಅನ್ನು ಆಮದುಮಾಡಿ ಮತ್ತು ರಚಿಸಿ + extractor = ConllExtractor() + + # ನಂತರ ನೀವು ನಾಮಪದ ವಾಕ್ಯಘಟಕ ಎಕ್ಸ್ಟ್ರಾಕ್ಟರ್ ಬೇಕಾದಾಗ: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # ಡೀಫಾಲ್ಟ್ ಅಲ್ಲದ ಎಕ್ಸ್ಟ್ರಾಕ್ಟರ್ ಸೂಚಿಸಲಾಗಿದೆ ಎಂದು ಗಮನಿಸಿ + np = user_input_blob.noun_phrases + ``` + + > ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) "ConLL-2000 ತರಬೇತಿ ಕಾರ್ಪಸ್ ಬಳಸಿ ಚಂಕ್ ಪಾರ್ಸಿಂಗ್ ಮೂಲಕ ತರಬೇತುಗೊಂಡ ನಾಮಪದ ವಾಕ್ಯಾಂಶ ಎಕ್ಸ್ಟ್ರಾಕ್ಟರ್." ConLL-2000 2000 ರಲ್ಲಿ ನಡೆದ ಕಂಪ್ಯೂಟೇಶನಲ್ ನೈಸರ್ಗಿಕ ಭಾಷಾ ಕಲಿಕೆಯ ಸಮ್ಮೇಳನವನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಪ್ರತಿ ವರ್ಷ ಸಮ್ಮೇಳನವು NLP ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಕಾರ್ಯಾಗಾರವನ್ನು ಆಯೋಜಿಸಿತು, 2000 ರಲ್ಲಿ ಅದು ನಾಮ ಚಂಕಿಂಗ್ ಆಗಿತ್ತು. ವಾಲ್ ಸ್ಟ್ರೀಟ್ ಜರ್ನಲ್ ಮೇಲೆ ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಂಡಿತು, "ಸೆಕ್ಷನ್ 15-18 ತರಬೇತಿ ಡೇಟಾ (211727 ಟೋಕನ್ಸ್) ಮತ್ತು ಸೆಕ್ಷನ್ 20 ಪರೀಕ್ಷಾ ಡೇಟಾ (47377 ಟೋಕನ್ಸ್)" ಆಗಿತ್ತು. ನೀವು ಬಳಸದ ವಿಧಾನಗಳನ್ನು [ಇಲ್ಲಿ](https://www.clips.uantwerpen.be/conll2000/chunking/) ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು [ಇಲ್ಲಿ](https://ifarm.nl/erikt/research/np-chunking.html) ನೋಡಬಹುದು. + +### ಸವಾಲು - NLP ಬಳಸಿ ನಿಮ್ಮ ಬಾಟ್ ಅನ್ನು ಸುಧಾರಿಸುವುದು + +ಹಿಂದಿನ ಪಾಠದಲ್ಲಿ ನೀವು ಬಹಳ ಸರಳ Q&A ಬಾಟ್ ನಿರ್ಮಿಸಿದ್ದೀರಿ. ಈಗ, ನೀವು ಮಾರ್ವಿನ್ ಅನ್ನು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಸಹಾನುಭೂತಿಪರನಾಗಿಸಲು ನಿಮ್ಮ ಇನ್ಪುಟ್‌ನ ಭಾವನೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಿ ಮತ್ತು ಭಾವನೆಗೆ ಹೊಂದಿಕೆಯಾಗುವ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಮುದ್ರಿಸುವಿರಿ. ನೀವು `noun_phrase` ಅನ್ನು ಗುರುತಿಸಿ ಅದನ್ನು ಕುರಿತು ಇನ್ನಷ್ಟು ಇನ್ಪುಟ್ ಕೇಳಬೇಕಾಗುತ್ತದೆ. + +ಉತ್ತಮ ಸಂಭಾಷಣಾ ಬಾಟ್ ನಿರ್ಮಿಸುವ ನಿಮ್ಮ ಹಂತಗಳು: + +1. ಬಳಕೆದಾರರಿಗೆ ಬಾಟ್ ಜೊತೆ ಹೇಗೆ ಸಂವಹನ ಮಾಡಬೇಕೆಂದು ಸೂಚನೆಗಳನ್ನು ಮುದ್ರಿಸಿ +2. ಲೂಪ್ ಪ್ರಾರಂಭಿಸಿ + 1. ಬಳಕೆದಾರ ಇನ್ಪುಟ್ ಸ್ವೀಕರಿಸಿ + 2. ಬಳಕೆದಾರನಿಂದ ನಿರ್ಗಮನ ಕೇಳಿದರೆ, ನಿರ್ಗಮಿಸಿ + 3. ಬಳಕೆದಾರ ಇನ್ಪುಟ್ ಪ್ರಕ್ರಿಯೆ ಮಾಡಿ ಮತ್ತು ಸೂಕ್ತ ಭಾವನೆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನಿರ್ಧರಿಸಿ + 4. ಭಾವನೆಯಲ್ಲಿ ನಾಮಪದ ವಾಕ್ಯಾಂಶ ಕಂಡುಬಂದರೆ, ಅದನ್ನು ಬಹುವಚನ ಮಾಡಿ ಮತ್ತು ಆ ವಿಷಯದ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಇನ್ಪುಟ್ ಕೇಳಿ + 5. ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಮುದ್ರಿಸಿ +3. ಹಂತ 2 ಗೆ ಮರುಹೊಂದಿಸಿ + +TextBlob ಬಳಸಿ ಭಾವನೆ ನಿರ್ಧರಿಸುವ ಕೋಡ್ ತುಣುಕು ಇಲ್ಲಿದೆ. ಭಾವನೆ ಪ್ರತಿಕ್ರಿಯೆಯ ನಾಲ್ಕು *ಗ್ರೇಡಿಯಂಟ್* ಮಾತ್ರಗಳಿವೆ (ನೀವು ಹೆಚ್ಚು ಇರಿಸಬಹುದು): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +ನಿಮಗೆ ಮಾರ್ಗದರ್ಶನ ನೀಡಲು ಕೆಲವು ಉದಾಹರಣಾ ಔಟ್‌ಪುಟ್ ಇಲ್ಲಿದೆ (ಬಳಕೆದಾರ ಇನ್ಪುಟ್ > ಚಿಹ್ನೆಯಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +ಕಾರ್ಯಕ್ಕೆ ಒಂದು ಸಾಧ್ಯ ಪರಿಹಾರ [ಇಲ್ಲಿ](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) ಇದೆ + +✅ ಜ್ಞಾನ ಪರಿಶೀಲನೆ + +1. ಸಹಾನುಭೂತಿಪರ ಪ್ರತಿಕ್ರಿಯೆಗಳು ಯಾರನ್ನಾದರೂ ಬಾಟ್ ಅವರನ್ನು ನಿಜವಾಗಿಯೂ ಅರ್ಥಮಾಡಿಕೊಂಡಿದೆ ಎಂದು 'ಮೋಸಗೊಳಿಸುವುದೇ' ಎಂದು ನೀವು ಭಾವಿಸುತ್ತೀರಾ? +2. ನಾಮಪದ ವಾಕ್ಯಾಂಶವನ್ನು ಗುರುತಿಸುವುದು ಬಾಟ್ ಅನ್ನು ಹೆಚ್ಚು 'ನಂಬಬಹುದಾದ' ಮಾಡುತ್ತದೆಯೇ? +3. ವಾಕ್ಯದಿಂದ 'ನಾಮಪದ ವಾಕ್ಯಾಂಶ' ಹೊರತೆಗೆಯುವುದು ಉಪಯುಕ್ತವಾದದ್ದು ಏಕೆ? + +--- + +ಹಿಂದಿನ ಜ್ಞಾನ ಪರಿಶೀಲನೆಯಲ್ಲಿ ಬಾಟ್ ಅನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸಿ ಮತ್ತು ಸ್ನೇಹಿತನ ಮೇಲೆ ಪರೀಕ್ಷಿಸಿ. ಅದು ಅವರನ್ನು ಮೋಸಗೊಳಿಸಬಹುದೇ? ನೀವು ನಿಮ್ಮ ಬಾಟ್ ಅನ್ನು ಹೆಚ್ಚು 'ನಂಬಬಹುದಾದ' ಮಾಡಬಹುದೇ? + +## 🚀ಸವಾಲು + +ಹಿಂದಿನ ಜ್ಞಾನ ಪರಿಶೀಲನೆಯಲ್ಲಿ ಒಂದು ಕಾರ್ಯವನ್ನು ತೆಗೆದುಕೊಂಡು ಅದನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸಿ. ಬಾಟ್ ಅನ್ನು ಸ್ನೇಹಿತನ ಮೇಲೆ ಪರೀಕ್ಷಿಸಿ. ಅದು ಅವರನ್ನು ಮೋಸಗೊಳಿಸಬಹುದೇ? ನೀವು ನಿಮ್ಮ ಬಾಟ್ ಅನ್ನು ಹೆಚ್ಚು 'ನಂಬಬಹುದಾದ' ಮಾಡಬಹುದೇ? + +## [ಪೋಸ್ಟ್-ವ್ಯಾಖ್ಯಾನ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಮುಂದಿನ ಕೆಲವು ಪಾಠಗಳಲ್ಲಿ ನೀವು ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆಯ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಕಲಿಯುತ್ತೀರಿ. ಈ ರೋಚಕ ತಂತ್ರವನ್ನು [KDNuggets](https://www.kdnuggets.com/tag/nlp) ನಲ್ಲಿ ಇರುವ ಲೇಖನಗಳಲ್ಲಿ ಸಂಶೋಧಿಸಿ. + +## ನಿಯೋಜನೆ + +[ಬಾಟ್ ಅನ್ನು ಮಾತಾಡಿಸಲು ಮಾಡಿ](assignment.md) + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/2-Tasks/assignment.md b/translations/kn/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..6484ed2e5 --- /dev/null +++ b/translations/kn/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,27 @@ + +# ಬಾಟ್‌ಗೆ ಪ್ರತಿಕ್ರಿಯೆ ನೀಡಿಸುವಂತೆ ಮಾಡಿ + +## ಸೂಚನೆಗಳು + +ಹಿಂದಿನ ಕೆಲವು ಪಾಠಗಳಲ್ಲಿ, ನೀವು ಚಾಟ್ ಮಾಡಲು ಮೂಲಭೂತ ಬಾಟ್ ಅನ್ನು ಪ್ರೋಗ್ರಾಮ್ ಮಾಡಿದ್ದೀರಿ. ಈ ಬಾಟ್ ನೀವು 'bye' ಎಂದು ಹೇಳುವವರೆಗೆ ಯಾದೃಚ್ಛಿಕ ಉತ್ತರಗಳನ್ನು ನೀಡುತ್ತದೆ. ನೀವು ಉತ್ತರಗಳನ್ನು ಸ್ವಲ್ಪ ಕಡಿಮೆ ಯಾದೃಚ್ಛಿಕವಾಗಿಸುವಂತೆ ಮಾಡಬಹುದೇ, ಮತ್ತು ನೀವು 'why' ಅಥವಾ 'how' ಎಂಬಂತಹ ವಿಶೇಷ ಪದಗಳನ್ನು ಹೇಳಿದಾಗ ಉತ್ತರಗಳನ್ನು ಪ್ರೇರೇಪಿಸಬಹುದೇ? ನಿಮ್ಮ ಬಾಟ್ ಅನ್ನು ವಿಸ್ತರಿಸುವಾಗ ಈ ರೀತಿಯ ಕೆಲಸವನ್ನು ಕಡಿಮೆ ಕೈಯಿಂದ ಮಾಡಲು ಯಂತ್ರ ಅಧ್ಯಯನ ಹೇಗೆ ಸಹಾಯ ಮಾಡಬಹುದು ಎಂದು ಸ್ವಲ್ಪ ಯೋಚಿಸಿ. ನಿಮ್ಮ ಕಾರ್ಯಗಳನ್ನು ಸುಲಭಗೊಳಿಸಲು ನೀವು NLTK ಅಥವಾ TextBlob ಗ್ರಂಥಾಲಯಗಳನ್ನು ಬಳಸಬಹುದು. + +## ರೂಬ್ರಿಕ್ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯವಿದೆ | +| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | ಹೊಸ bot.py ಫೈಲ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ದಾಖಲೆ ಮಾಡಲಾಗಿದೆ | ಹೊಸ ಬಾಟ್ ಫೈಲ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಆದರೆ ಅದರಲ್ಲಿ ದೋಷಗಳಿವೆ | ಫೈಲ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/3-Translation-Sentiment/README.md b/translations/kn/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..8c774e80d --- /dev/null +++ b/translations/kn/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,202 @@ + +# ಅನುವಾದ ಮತ್ತು ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ ML ನೊಂದಿಗೆ + +ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ನೀವು `TextBlob` ಬಳಸಿ ಮೂಲ ಬಾಟ್ ಅನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸುವುದು ಎಂದು ಕಲಿತಿರಿ, ಇದು ಮೂಲಭೂತ NLP ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಲು ML ಅನ್ನು ಹಿಂಬದಿಯಲ್ಲಿ ಒಳಗೊಂಡಿರುವ ಗ್ರಂಥಾಲಯವಾಗಿದೆ, ಉದಾಹರಣೆಗೆ ನಾಮಪದ ವಾಕ್ಯাংশ ಹೊರತೆಗೆಯುವುದು. ಗಣಕ ಭಾಷಾಶಾಸ್ತ್ರದಲ್ಲಿ ಮತ್ತೊಂದು ಪ್ರಮುಖ ಸವಾಲು ಎಂದರೆ ಒಂದು ಮಾತಾಡುವ ಅಥವಾ ಬರೆಯುವ ಭಾಷೆಯಿಂದ ಮತ್ತೊಂದು ಭಾಷೆಗೆ ವಾಕ್ಯವನ್ನು ನಿಖರವಾಗಿ _ಅನುವಾದ_ ಮಾಡುವುದು. + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +ಅನುವಾದವು ಬಹಳ ಕಠಿಣ ಸಮಸ್ಯೆಯಾಗಿದ್ದು, ಸಾವಿರಾರು ಭಾಷೆಗಳಿದ್ದು ಪ್ರತಿಯೊಂದು ಭಾಷೆಯು ವಿಭಿನ್ನ ವ್ಯಾಕರಣ ನಿಯಮಗಳನ್ನು ಹೊಂದಿರುವುದರಿಂದ ಅದು ಇನ್ನಷ್ಟು ಸಂಕೀರ್ಣವಾಗುತ್ತದೆ. ಒಂದು ವಿಧಾನವೆಂದರೆ ಒಂದು ಭಾಷೆಯ, ಉದಾಹರಣೆಗೆ ಇಂಗ್ಲಿಷ್‌ನ, ಅಧಿಕೃತ ವ್ಯಾಕರಣ ನಿಯಮಗಳನ್ನು ಭಾಷಾ-ಆಧಾರಿತವಲ್ಲದ ರಚನೆಗೆ ಪರಿವರ್ತಿಸಿ, ನಂತರ ಅದನ್ನು ಮತ್ತೊಂದು ಭಾಷೆಗೆ ಮರಳಿಸಿ ಅನುವಾದಿಸುವುದು. ಈ ವಿಧಾನದಲ್ಲಿ ನೀವು ಕೆಳಗಿನ ಹಂತಗಳನ್ನು ಅನುಸರಿಸುತ್ತೀರಿ: + +1. **ಗುರುತಿಸುವಿಕೆ**. ಇನ್ಪುಟ್ ಭಾಷೆಯ ಪದಗಳನ್ನು ನಾಮಪದ, ಕ್ರಿಯಾಪದ ಇತ್ಯಾದಿಯಾಗಿ ಗುರುತಿಸುವುದು ಅಥವಾ ಟ್ಯಾಗ್ ಮಾಡುವುದು. +2. **ಅನುವಾದ ಸೃಷ್ಟಿ**. ಗುರಿ ಭಾಷೆಯ ಸ್ವರೂಪದಲ್ಲಿ ಪ್ರತಿ ಪದದ ನೇರ ಅನುವಾದವನ್ನು ಉತ್ಪಾದಿಸುವುದು. + +### ಉದಾಹರಣೆಯ ವಾಕ್ಯ, ಇಂಗ್ಲಿಷ್ ನಿಂದ ಐರಿಷ್ + +'ಇಂಗ್ಲಿಷ್' ನಲ್ಲಿ, ವಾಕ್ಯ _I feel happy_ ಮೂರು ಪದಗಳಿದ್ದು ಕ್ರಮದಲ್ಲಿ: + +- **ವಿಷಯ** (I) +- **ಕ್ರಿಯಾಪದ** (feel) +- **ವಿಶೇಷಣ** (happy) + +ಆದರೆ, 'ಐರಿಷ್' ಭಾಷೆಯಲ್ಲಿ, ಅದೇ ವಾಕ್ಯವು ಬಹಳ ವಿಭಿನ್ನ ವ್ಯಾಕರಣ ರಚನೆ ಹೊಂದಿದೆ - "*happy*" ಅಥವಾ "*sad*" ಎಂಬ ಭಾವನೆಗಳನ್ನು ನಿಮ್ಮ ಮೇಲೆ ಇರುವಂತೆ ವ್ಯಕ್ತಪಡಿಸಲಾಗುತ್ತದೆ. + +ಇಂಗ್ಲಿಷ್ ವಾಕ್ಯ `I feel happy` ಐರಿಷ್‌ನಲ್ಲಿ `Tá athas orm` ಆಗಿರುತ್ತದೆ. *ಶಬ್ದಾರ್ಥ* ಅನುವಾದವು `Happy is upon me` ಆಗಿರುತ್ತದೆ. + +ಐರಿಷ್ ಮಾತನಾಡುವವರು ಇಂಗ್ಲಿಷ್‌ಗೆ ಅನುವಾದಿಸುವಾಗ `I feel happy` ಎಂದು ಹೇಳುತ್ತಾರೆ, `Happy is upon me` ಎಂದು ಅಲ್ಲ, ಏಕೆಂದರೆ ಅವರು ವಾಕ್ಯದ ಅರ್ಥವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತಾರೆ, ಪದಗಳು ಮತ್ತು ವಾಕ್ಯ ರಚನೆ ವಿಭಿನ್ನವಾಗಿದ್ದರೂ. + +ಐರಿಷ್ ವಾಕ್ಯದ ಅಧಿಕೃತ ಕ್ರಮಗಳು: + +- **ಕ್ರಿಯಾಪದ** (Tá ಅಥವಾ is) +- **ವಿಶೇಷಣ** (athas, ಅಥವಾ happy) +- **ವಿಷಯ** (orm, ಅಥವಾ upon me) + +## ಅನುವಾದ + +ಸರಳ ಅನುವಾದ ಕಾರ್ಯಕ್ರಮವು ಪದಗಳನ್ನು ಮಾತ್ರ ಅನುವಾದಿಸಬಹುದು, ವಾಕ್ಯ ರಚನೆಯನ್ನು ಗಮನಿಸದೆ. + +✅ ನೀವು ವಯಸ್ಕನಾಗಿ ಎರಡನೇ (ಅಥವಾ ಮೂರನೇ ಅಥವಾ ಹೆಚ್ಚು) ಭಾಷೆಯನ್ನು ಕಲಿತಿದ್ದರೆ, ನೀವು ನಿಮ್ಮ ಮೂಲ ಭಾಷೆಯಲ್ಲಿ ಯೋಚಿಸಿ, ತಲೆಯೊಳಗೆ ಪದದಿಂದ ಪದಕ್ಕೆ ಎರಡನೇ ಭಾಷೆಗೆ ಅನುವಾದಿಸಿ, ನಂತರ ನಿಮ್ಮ ಅನುವಾದವನ್ನು ಮಾತನಾಡಲು ಪ್ರಾರಂಭಿಸಿದ್ದೀರಿ. ಇದು ಸರಳ ಅನುವಾದ ಕಂಪ್ಯೂಟರ್ ಕಾರ್ಯಕ್ರಮಗಳು ಮಾಡುವುದಕ್ಕೆ ಸಮಾನವಾಗಿದೆ. ಈ ಹಂತವನ್ನು ದಾಟಿ ಪ್ರವಾಹಿತ ಭಾಷಾ ನಿಪುಣತೆಯನ್ನು ಪಡೆಯುವುದು ಮುಖ್ಯ! + +ಸರಳ ಅನುವಾದವು ಕೆಟ್ಟ (ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಹಾಸ್ಯಾಸ್ಪದ) ತಪ್ಪು ಅನುವಾದಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ: `I feel happy` ಅನ್ನು ಐರಿಷ್‌ನಲ್ಲಿ ಶಬ್ದಾರ್ಥವಾಗಿ `Mise bhraitheann athas` ಎಂದು ಅನುವಾದಿಸಲಾಗುತ್ತದೆ. ಇದರ ಅರ್ಥ (ಶಬ್ದಾರ್ಥವಾಗಿ) `me feel happy` ಆಗಿದ್ದು, ಇದು ಮಾನ್ಯ ಐರಿಷ್ ವಾಕ್ಯವಲ್ಲ. ಇಂಗ್ಲಿಷ್ ಮತ್ತು ಐರಿಷ್ ಎರಡು ಸಮೀಪದ ದ್ವೀಪಗಳಲ್ಲಿ ಮಾತನಾಡುವ ಭಾಷೆಗಳಾಗಿದ್ದರೂ, ಅವು ವಿಭಿನ್ನ ವ್ಯಾಕರಣ ರಚನೆಗಳನ್ನು ಹೊಂದಿವೆ. + +> ನೀವು ಐರಿಷ್ ಭಾಷಾ ಪರಂಪರೆಗಳ ಬಗ್ಗೆ ಕೆಲವು ವೀಡಿಯೊಗಳನ್ನು ನೋಡಬಹುದು, ಉದಾಹರಣೆಗೆ [ಇದು](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### ಯಂತ್ರ ಅಧ್ಯಯನ ವಿಧಾನಗಳು + +ಈವರೆಗೆ, ನೀವು ನೈಸರ್ಗಿಕ ಭಾಷಾ ಪ್ರಕ್ರಿಯೆಗೆ ಅಧಿಕೃತ ನಿಯಮಗಳ ವಿಧಾನವನ್ನು ಕಲಿತಿದ್ದೀರಿ. ಮತ್ತೊಂದು ವಿಧಾನವೆಂದರೆ ಪದಗಳ ಅರ್ಥವನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ, _ಬದಲಾಗಿ ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಬಳಸಿ ಮಾದರಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು_. ಮೂಲ ಮತ್ತು ಗುರಿ ಭಾಷೆಗಳಲ್ಲಿ ಸಾಕಷ್ಟು ಪಠ್ಯ (ಒಂದು *ಕೋರ್ಪಸ್* ಅಥವಾ *ಕೋರ್ಪೋರಾ*) ಇದ್ದರೆ ಇದು ಅನುವಾದದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದು. + +ಉದಾಹರಣೆಗೆ, 1813 ರಲ್ಲಿ ಜೇನ್ ಆಸ್ಟಿನ್ ಬರೆದ ಪ್ರಸಿದ್ಧ ಇಂಗ್ಲಿಷ್ ناವಲ *Pride and Prejudice* ಯನ್ನು ಪರಿಗಣಿಸಿ. ನೀವು ಇಂಗ್ಲಿಷ್ ಪುಸ್ತಕ ಮತ್ತು ಅದರ ಮಾನವ ಅನುವಾದವನ್ನು *ಫ್ರೆಂಚ್* ನಲ್ಲಿ ಪರಿಶೀಲಿಸಿದರೆ, ಒಂದು ಭಾಷೆಯಲ್ಲಿನ ವಾಕ್ಯಗಳು ಇನ್ನೊಂದು ಭಾಷೆಗೆ _ಪ್ರಚಲಿತವಾಗಿ_ ಅನುವಾದವಾಗಿರುವುದನ್ನು ಪತ್ತೆಹಚ್ಚಬಹುದು. ನೀವು ಅದನ್ನು ಕ್ಷಣದಲ್ಲೇ ಮಾಡುತ್ತೀರಿ. + +ಉದಾಹರಣೆಗೆ, ಇಂಗ್ಲಿಷ್ ವಾಕ್ಯ `I have no money` ಅನ್ನು ಫ್ರೆಂಚ್‌ಗೆ ಶಬ್ದಾರ್ಥವಾಗಿ ಅನುವಾದಿಸಿದಾಗ, ಅದು `Je n'ai pas de monnaie` ಆಗಬಹುದು. "Monnaie" ಒಂದು ಕಪಟ ಫ್ರೆಂಚ್ 'false cognate', ಏಕೆಂದರೆ 'money' ಮತ್ತು 'monnaie' ಸಮಾನಾರ್ಥಕವಲ್ಲ. ಮಾನವನು ಮಾಡಬಹುದಾದ ಉತ್ತಮ ಅನುವಾದ `Je n'ai pas d'argent` ಆಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ನೀವು ಹಣವಿಲ್ಲ ಎಂದು ಉತ್ತಮವಾಗಿ ಸೂಚಿಸುತ್ತದೆ (ಮತ್ತೆ 'monnaie' ಅರ್ಥ 'ಲೂಸ್ ಚೇಂಜ್'). + +![monnaie](../../../../translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.kn.png) + +> ಚಿತ್ರ [Jen Looper](https://twitter.com/jenlooper) ಅವರಿಂದ + +ಯಂತ್ರ ಅಧ್ಯಯನ ಮಾದರಿಯು ಸಾಕಷ್ಟು ಮಾನವ ಅನುವಾದಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಅದು ಎರಡೂ ಭಾಷೆಗಳ ಪರಿಣತ ಮಾನವರಿಂದ ಹಿಂದಿನ ಅನುವಾದಗಳಲ್ಲಿ ಕಂಡ ಸಾಮಾನ್ಯ ಮಾದರಿಗಳನ್ನು ಗುರುತಿಸಿ ಅನುವಾದಗಳ ನಿಖರತೆಯನ್ನು ಸುಧಾರಿಸಬಹುದು. + +### ಅಭ್ಯಾಸ - ಅನುವಾದ + +ನೀವು ವಾಕ್ಯಗಳನ್ನು ಅನುವಾದಿಸಲು `TextBlob` ಅನ್ನು ಬಳಸಬಹುದು. ಪ್ರಸಿದ್ಧ **Pride and Prejudice** ಮೊದಲ ಸಾಲನ್ನು ಪ್ರಯತ್ನಿಸಿ: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` ಅನುವಾದದಲ್ಲಿ ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +TextBlob ನ ಅನುವಾದವು 1932 ರಲ್ಲಿ V. Leconte ಮತ್ತು Ch. Pressoir ಅವರಿಂದ ಮಾಡಿದ ಫ್ರೆಂಚ್ ಅನುವಾದಕ್ಕಿಂತ ಬಹಳ ನಿಖರವಾಗಿದೆ ಎಂದು ವಾದಿಸಬಹುದು: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಯಂತ್ರ ಅಧ್ಯಯನದಿಂದ ತಿಳಿದಿರುವ ಅನುವಾದವು ಮೂಲ ಲೇಖಕರ ಮಾತುಗಳಿಗೆ ಅನಗತ್ಯವಾಗಿ ಪದಗಳನ್ನು ಸೇರಿಸುವ ಮಾನವ ಅನುವಾದಿಗಿಂತ ಉತ್ತಮ ಕೆಲಸ ಮಾಡುತ್ತದೆ. + +> ಇಲ್ಲಿ ಏನಾಗುತ್ತಿದೆ? ಮತ್ತು TextBlob ಅನುವಾದದಲ್ಲಿ ಏಕೆ ಇಷ್ಟು ಉತ್ತಮವಾಗಿದೆ? ಹೌದು, ಹಿಂಬದಿಯಲ್ಲಿ, ಇದು Google translate ಅನ್ನು ಬಳಸುತ್ತಿದೆ, ಇದು ಲಕ್ಷಾಂತರ ವಾಕ್ಯಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ ಕಾರ್ಯಕ್ಕೆ ಅತ್ಯುತ್ತಮ ಸರಣಿಗಳನ್ನು ಊಹಿಸುವ ಸುಧಾರಿತ AI. ಇಲ್ಲಿ ಯಾವುದೇ ಕೈಯಿಂದ ಮಾಡಲಾಗುವುದಿಲ್ಲ ಮತ್ತು `blob.translate` ಬಳಸಲು ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ ಬೇಕಾಗುತ್ತದೆ. + +✅ ಇನ್ನಷ್ಟು ವಾಕ್ಯಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ. ಯಾವುದು ಉತ್ತಮ, ML ಅಥವಾ ಮಾನವ ಅನುವಾದ? ಯಾವ ಸಂದರ್ಭಗಳಲ್ಲಿ? + +## ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ + +ಮತ್ತೊಂದು ಕ್ಷೇತ್ರದಲ್ಲಿ ಯಂತ್ರ ಅಧ್ಯಯನವು ಚೆನ್ನಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದರೆ ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ. ಭಾವನಾತ್ಮಕತೆಯ ಅ-ML ವಿಧಾನವು 'ಧನಾತ್ಮಕ' ಮತ್ತು 'ನಕಾರಾತ್ಮಕ' ಪದಗಳು ಮತ್ತು ವಾಕ್ಯಗಳನ್ನು ಗುರುತಿಸುವುದು. ನಂತರ, ಹೊಸ ಪಠ್ಯವನ್ನು ನೀಡಿದಾಗ, ಒಟ್ಟು ಧನಾತ್ಮಕ, ನಕಾರಾತ್ಮಕ ಮತ್ತು ತಟಸ್ಥ ಪದಗಳ ಮೌಲ್ಯವನ್ನು ಲೆಕ್ಕಿಸಿ ಒಟ್ಟು ಭಾವನಾತ್ಮಕತೆಯನ್ನು ಗುರುತಿಸುವುದು. + +ಈ ವಿಧಾನವು ಸುಲಭವಾಗಿ ಮೋಸಗೊಳ್ಳುತ್ತದೆ, ನೀವು Marvin ಕಾರ್ಯದಲ್ಲಿ ನೋಡಿದಂತೆ - ವಾಕ್ಯ `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` ಒಂದು ವ್ಯಂಗ್ಯಾತ್ಮಕ, ನಕಾರಾತ್ಮಕ ಭಾವನಾತ್ಮಕ ವಾಕ್ಯ, ಆದರೆ ಸರಳ ಅಲ್ಗಾರಿದಮ್ 'great', 'wonderful', 'glad' ಅನ್ನು ಧನಾತ್ಮಕವಾಗಿ ಮತ್ತು 'waste', 'lost' ಮತ್ತು 'dark' ಅನ್ನು ನಕಾರಾತ್ಮಕವಾಗಿ ಗುರುತಿಸುತ್ತದೆ. ಒಟ್ಟು ಭಾವನಾತ್ಮಕತೆ ಈ ವಿರುದ್ಧ ಪದಗಳಿಂದ ಪ್ರಭಾವಿತವಾಗುತ್ತದೆ. + +✅ ಒಂದು ಕ್ಷಣ ನಿಲ್ಲಿ ಮತ್ತು ನಾವು ಮಾನವ ಮಾತನಾಡುವವರಾಗಿ ವ್ಯಂಗ್ಯವನ್ನು ಹೇಗೆ ವ್ಯಕ್ತಪಡಿಸುತ್ತೇವೆ ಎಂದು ಯೋಚಿಸಿ. ಧ್ವನಿಯ ಉಚ್ಛಾರಣೆಯು ದೊಡ್ಡ ಪಾತ್ರ ವಹಿಸುತ್ತದೆ. "Well, that film was awesome" ಎಂಬ ವಾಕ್ಯವನ್ನು ವಿಭಿನ್ನ ರೀತಿಯಲ್ಲಿ ಹೇಳಿ ನಿಮ್ಮ ಧ್ವನಿ ಅರ್ಥವನ್ನು ಹೇಗೆ ವ್ಯಕ್ತಪಡಿಸುತ್ತದೆ ಎಂದು ಕಂಡುಹಿಡಿಯಿರಿ. + +### ML ವಿಧಾನಗಳು + +ML ವಿಧಾನವು ನಕಾರಾತ್ಮಕ ಮತ್ತು ಧನಾತ್ಮಕ ಪಠ್ಯಗಳನ್ನು - ಟ್ವೀಟ್‌ಗಳು, ಚಲನಚಿತ್ರ ವಿಮರ್ಶೆಗಳು ಅಥವಾ ಮಾನವರು ಅಂಕೆ ಮತ್ತು ಬರಹ ಅಭಿಪ್ರಾಯ ನೀಡಿದ ಯಾವುದೇ ಪಠ್ಯಗಳನ್ನು ಕೈಯಿಂದ ಸಂಗ್ರಹಿಸುವುದು. ನಂತರ NLP ತಂತ್ರಗಳನ್ನು ಅಭಿಪ್ರಾಯಗಳು ಮತ್ತು ಅಂಕೆಗಳಿಗೆ ಅನ್ವಯಿಸಿ, ಮಾದರಿಗಳು ಹೊರಬರುತ್ತವೆ (ಉದಾ: ಧನಾತ್ಮಕ ಚಲನಚಿತ್ರ ವಿಮರ್ಶೆಗಳಲ್ಲಿ 'Oscar worthy' ಪದಗಳು ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆಗಿಂತ ಹೆಚ್ಚು ಕಾಣಿಸಬಹುದು, ಅಥವಾ ಧನಾತ್ಮಕ ರೆಸ್ಟೋರೆಂಟ್ ವಿಮರ್ಶೆಗಳಲ್ಲಿ 'gourmet' ಪದವು 'disgusting' ಗಿಂತ ಹೆಚ್ಚು). + +> ⚖️ **ಉದಾಹರಣೆ**: ನೀವು ರಾಜಕಾರಣಿಯ ಕಚೇರಿಯಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೀರಿ ಮತ್ತು ಹೊಸ ಕಾಯ್ದೆ ಚರ್ಚೆಯಲ್ಲಿದೆ ಎಂದು ಊಹಿಸೋಣ, ನಾಗರಿಕರು ಆ ಕಾಯ್ದೆಗೆ ಬೆಂಬಲಿಸುವ ಅಥವಾ ವಿರೋಧಿಸುವ ಇಮೇಲ್‌ಗಳನ್ನು ಕಚೇರಿಗೆ ಬರೆಯಬಹುದು. ನೀವು ಆ ಇಮೇಲ್‌ಗಳನ್ನು ಓದಿ ಎರಡು ಗುಂಪುಗಳಲ್ಲಿ, *ಬೆಂಬಲ* ಮತ್ತು *ವಿರೋಧ* ಎಂದು ವಿಂಗಡಿಸುವ ಕೆಲಸವನ್ನು ಮಾಡಬೇಕಾಗಬಹುದು. ಇಮೇಲ್‌ಗಳು ಬಹಳವಾಗಿದ್ದರೆ, ಅವುಗಳನ್ನು ಓದಲು ನೀವು ಅತಿಯಾದ ಒತ್ತಡಕ್ಕೆ ಒಳಗಾಗಬಹುದು. ಒಂದು ಬಾಟ್ ಅವುಗಳನ್ನು ಓದಿ, ಅರ್ಥಮಾಡಿಕೊಂಡು, ಯಾವ ಗುಂಪಿಗೆ ಸೇರಬೇಕೆಂದು ಹೇಳಿದರೆ ಚೆನ್ನಾಗಿರುತ್ತದೆಯೇ? +> +> ಅದನ್ನು ಸಾಧಿಸುವ ಒಂದು ವಿಧಾನ ಯಂತ್ರ ಅಧ್ಯಯನವನ್ನು ಬಳಸುವುದು. ನೀವು *ವಿರೋಧ* ಇಮೇಲ್‌ಗಳ ಒಂದು ಭಾಗ ಮತ್ತು *ಬೆಂಬಲ* ಇಮೇಲ್‌ಗಳ ಒಂದು ಭಾಗವನ್ನು ಮಾದರಿಯನ್ನು ತರಬೇತುಗೊಳಿಸಲು ಬಳಸುತ್ತೀರಿ. ಮಾದರಿ ವಿರೋಧ ಮತ್ತು ಬೆಂಬಲ ಗುಂಪುಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಪದಗಳು ಮತ್ತು ವಾಕ್ಯಗಳನ್ನು ಗುರುತಿಸುವುದು, ಆದರೆ ಯಾವುದೇ ವಿಷಯವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದಿಲ್ಲ, ಕೇವಲ ಕೆಲವು ಪದಗಳು ಮತ್ತು ಮಾದರಿಗಳು ಯಾವ ಗುಂಪಿನಲ್ಲಿ ಹೆಚ್ಚು ಕಾಣಿಸಬಹುದು ಎಂದು ತಿಳಿದುಕೊಳ್ಳುತ್ತದೆ. ನೀವು ಮಾದರಿಯನ್ನು ತರಬೇತಿಗೆ ಬಳಸದ ಇಮೇಲ್‌ಗಳೊಂದಿಗೆ ಪರೀಕ್ಷಿಸಿ, ನೀವು ತಲುಪಿದ ನಿರ್ಣಯಕ್ಕೆ ಅದು ಸಹಮತಿಯಾಗಿದೆಯೇ ಎಂದು ನೋಡಬಹುದು. ನಂತರ, ನೀವು ಮಾದರಿಯ ನಿಖರತೆಯಿಂದ ಸಂತೃಪ್ತರಾದಾಗ, ಭವಿಷ್ಯದ ಇಮೇಲ್‌ಗಳನ್ನು ಓದದೆ ಪ್ರಕ್ರಿಯೆ ಮಾಡಬಹುದು. + +✅ ಈ ಪ್ರಕ್ರಿಯೆ ನೀವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಬಳಸಿದ ಪ್ರಕ್ರಿಯೆಗಳಂತೆ ತೋರುತ್ತದೆಯೇ? + +## ಅಭ್ಯಾಸ - ಭಾವನಾತ್ಮಕ ವಾಕ್ಯಗಳು + +ಭಾವನಾತ್ಮಕತೆ -1 ರಿಂದ 1 ರ *ಪೋಲಾರಿಟಿ* ಮೂಲಕ ಅಳೆಯಲಾಗುತ್ತದೆ, ಅಂದರೆ -1 ಅತ್ಯಂತ ನಕಾರಾತ್ಮಕ ಭಾವನಾತ್ಮಕತೆ ಮತ್ತು 1 ಅತ್ಯಂತ ಧನಾತ್ಮಕ. ಭಾವನಾತ್ಮಕತೆ 0 - 1 ಅಂಕೆಯೊಂದಿಗೆ ವಸ್ತುನಿಷ್ಠತೆ (0) ಮತ್ತು ವಿಷಯನಿಷ್ಠತೆ (1) ಕೂಡ ಅಳೆಯಲಾಗುತ್ತದೆ. + +ಮತ್ತೆ ಜೇನ್ ಆಸ್ಟಿನ್ ಅವರ *Pride and Prejudice* ಅನ್ನು ನೋಡಿ. ಪಠ್ಯವನ್ನು [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) ನಲ್ಲಿ ಲಭ್ಯವಿದೆ. ಕೆಳಗಿನ ಉದಾಹರಣೆ ಒಂದು ಚಿಕ್ಕ ಕಾರ್ಯಕ್ರಮವನ್ನು ತೋರಿಸುತ್ತದೆ, ಇದು ಪುಸ್ತಕದ ಮೊದಲ ಮತ್ತು ಕೊನೆಯ ವಾಕ್ಯಗಳ ಭಾವನಾತ್ಮಕತೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಿ ಅದರ ಪೋಲಾರಿಟಿ ಮತ್ತು ವಿಷಯನಿಷ್ಠೆ/ವಸ್ತುನಿಷ್ಠೆ ಅಂಕೆಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ. + +ನೀವು ಕೆಳಗಿನ ಕಾರ್ಯದಲ್ಲಿ `TextBlob` ಗ್ರಂಥಾಲಯವನ್ನು (ಮೇಲಿನ ವಿವರಣೆ ಪ್ರಕಾರ) `sentiment` ನಿರ್ಧರಿಸಲು ಬಳಸಬೇಕು (ನೀವು ನಿಮ್ಮದೇ ಭಾವನಾತ್ಮಕತೆ ಲೆಕ್ಕಿಸುವ ಯಂತ್ರವನ್ನು ಬರೆಯಬೇಕಾಗಿಲ್ಲ). + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +ನೀವು ಕೆಳಗಿನ ಔಟ್‌ಪುಟ್ ಅನ್ನು ನೋಡುತ್ತೀರಿ: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## ಸವಾಲು - ಭಾವನಾತ್ಮಕ ಪೋಲಾರಿಟಿ ಪರಿಶೀಲನೆ + +ನಿಮ್ಮ ಕಾರ್ಯವೆಂದರೆ, ಭಾವನಾತ್ಮಕ ಪೋಲಾರಿಟಿ ಬಳಸಿ, *Pride and Prejudice* ನಲ್ಲಿ ಸಂಪೂರ್ಣ ಧನಾತ್ಮಕ ವಾಕ್ಯಗಳು ಸಂಪೂರ್ಣ ನಕಾರಾತ್ಮಕ ವಾಕ್ಯಗಳಿಗಿಂತ ಹೆಚ್ಚು ಇದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸುವುದು. ಈ ಕಾರ್ಯಕ್ಕಾಗಿ, ಪೋಲಾರಿಟಿ ಅಂಕೆ 1 ಅಥವಾ -1 ಅನ್ನು ಸಂಪೂರ್ಣ ಧನಾತ್ಮಕ ಅಥವಾ ಸಂಪೂರ್ಣ ನಕಾರಾತ್ಮಕ ಎಂದು ಪರಿಗಣಿಸಬಹುದು. + +**ಹಂತಗಳು:** + +1. Project Gutenberg ನಿಂದ [Pride and Prejudice ನ ಪ್ರತಿಯನ್ನು](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) .txt ಫೈಲ್ ಆಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ. ಫೈಲ್ ಆರಂಭ ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ಇರುವ ಮೆಟಾಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಿ, ಮೂಲ ಪಠ್ಯವನ್ನು ಮಾತ್ರ ಉಳಿಸಿ +2. ಫೈಲ್ ಅನ್ನು Python ನಲ್ಲಿ ತೆರೆಯಿರಿ ಮತ್ತು ವಿಷಯವನ್ನು ಸ್ಟ್ರಿಂಗ್ ಆಗಿ ತೆಗೆದುಕೊಳ್ಳಿ +3. ಪುಸ್ತಕ ಸ್ಟ್ರಿಂಗ್ ಬಳಸಿ TextBlob ರಚಿಸಿ +4. ಪುಸ್ತಕದ ಪ್ರತಿ ವಾಕ್ಯವನ್ನು ಲೂಪ್‌ನಲ್ಲಿ ವಿಶ್ಲೇಷಿಸಿ + 1. ಪೋಲಾರಿಟಿ 1 ಅಥವಾ -1 ಇದ್ದರೆ, ಆ ವಾಕ್ಯವನ್ನು ಧನಾತ್ಮಕ ಅಥವಾ ನಕಾರಾತ್ಮಕ ಸಂದೇಶಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ +5. ಕೊನೆಯಲ್ಲಿ, ಎಲ್ಲಾ ಧನಾತ್ಮಕ ಮತ್ತು ನಕಾರಾತ್ಮಕ ವಾಕ್ಯಗಳನ್ನು (ಬೇರೆ ಬೇರೆ) ಮತ್ತು ಅವುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಮುದ್ರಿಸಿ. + +ಇಲ್ಲಿ ಒಂದು ಉದಾಹರಣೆಯ [ಉತ್ತರ](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb) ಇದೆ. + +✅ ಜ್ಞಾನ ಪರಿಶೀಲನೆ + +1. ಭಾವನಾತ್ಮಕತೆ ವಾಕ್ಯದಲ್ಲಿ ಬಳಸಿದ ಪದಗಳ ಆಧಾರದಲ್ಲಿ ಇರುತ್ತದೆ, ಆದರೆ ಕೋಡ್ ಪದಗಳನ್ನು *ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತದೆಯೇ*? +2. ನೀವು ಭಾವನಾತ್ಮಕ ಪೋಲಾರಿಟಿ ನಿಖರವಾಗಿದೆ ಎಂದು ಭಾವಿಸುತ್ತೀರಾ, ಅಥವಾ ಬೇರೆ ಪದಗಳಲ್ಲಿ, ಅಂಕೆಗಳಿಗೆ ನೀವು *ಒಪ್ಪುತ್ತೀರಾ*? + 1. ವಿಶೇಷವಾಗಿ, ಕೆಳಗಿನ ವಾಕ್ಯಗಳ ಸಂಪೂರ್ಣ **ಧನಾತ್ಮಕ** ಪೋಲಾರಿಟಿಗೆ ನೀವು ಒಪ್ಪುತ್ತೀರಾ ಅಥವಾ ವಿರೋಧಿಸುತ್ತೀರಾ? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. ಮುಂದಿನ 3 ವಾಕ್ಯಗಳನ್ನು ಸಂಪೂರ್ಣ ಧನಾತ್ಮಕ ಭಾವನಾತ್ಮಕತೆ ಪಡೆದಿವೆ, ಆದರೆ ನಿಕಟ ಓದಿನಲ್ಲಿ ಅವು ಧನಾತ್ಮಕ ವಾಕ್ಯಗಳಲ್ಲ. ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ ಅವುಗಳನ್ನು ಧನಾತ್ಮಕ ಎಂದು ಯಾಕೆ ಭಾವಿಸಿತು? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. ಕೆಳಗಿನ ವಾಕ್ಯಗಳ ಸಂಪೂರ್ಣ **ನಕಾರಾತ್ಮಕ** ಪೋಲಾರಿಟಿಗೆ ನೀವು ಒಪ್ಪುತ್ತೀರಾ ಅಥವಾ ವಿರೋಧಿಸುತ್ತೀರಾ? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ ಜೇನ್ ಆಸ್ಟಿನ್ ಅವರ ಅಭಿಮಾನಿಗಳು ತಿಳಿದುಕೊಳ್ಳುತ್ತಾರೆ ಅವರು ತಮ್ಮ ಪುಸ್ತಕಗಳಲ್ಲಿ ಇಂಗ್ಲಿಷ್ ರೆಜೆನ್ಸಿ ಸಮಾಜದ ಅತಿವಾದ ಅಂಶಗಳನ್ನು ವಿಮರ್ಶಿಸುವುದನ್ನು. *Pride and Prejudice* ನ ಪ್ರಮುಖ ಪಾತ್ರ ಎಲಿಜಬೆತ್ ಬೆನೆಟ್ (ಲೇಖಕನಂತೆ) ಸಾಮಾಜಿಕ ವೀಕ್ಷಕಳು ಮತ್ತು ಅವಳ ಭಾಷೆ ಬಹಳ ಸೂಕ್ಷ್ಮವಾಗಿದೆ. ಕಥೆಯ ಪ್ರೇಮ ಸಂಬಂಧಿ ಮಿಸ್ಟರ್ ಡಾರ್ಸಿ ಕೂಡ ಎಲಿಜಬೆತ್ ಅವರ ಆಟದ ಮತ್ತು ಹಾಸ್ಯಾಸ್ಪದ ಭಾಷಾ ಬಳಕೆಯನ್ನು ಗಮನಿಸುತ್ತಾನೆ: "ನಾನು ನಿಮ್ಮ ಪರಿಚಯವನ್ನು ಸಾಕಷ್ಟು ಕಾಲ ಹೊಂದಿದ್ದೇನೆ, ನೀವು ಕೆಲವೊಮ್ಮೆ ನಿಮ್ಮದೇ ಅಲ್ಲದ ಅಭಿಪ್ರಾಯಗಳನ್ನು ಪ್ರೊಫೆಸ್ಸ್ ಮಾಡುವುದರಲ್ಲಿ ದೊಡ್ಡ ಆನಂದವನ್ನು ಕಂಡುಕೊಳ್ಳುತ್ತೀರಿ." + +--- + +## 🚀ಸವಾಲು + +ಮಾರ್ವಿನ್ ಅನ್ನು ಬಳಕೆದಾರ ಇನ್ಪುಟ್‌ನಿಂದ ಇತರ ಲಕ್ಷಣಗಳನ್ನು ಹೊರತೆಗೆಯುವ ಮೂಲಕ ಇನ್ನೂ ಉತ್ತಮಗೊಳಿಸಬಹುದೇ? + +## [ಪೋಸ್ಟ್-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +ಪಠ್ಯದಿಂದ ಭಾವನೆಯನ್ನು ಹೊರತೆಗೆಯಲು ಅನೇಕ ವಿಧಾನಗಳಿವೆ. ಈ ತಂತ್ರವನ್ನು ಬಳಸಬಹುದಾದ ವ್ಯವಹಾರಿಕ ಅನ್ವಯಗಳನ್ನು ಯೋಚಿಸಿ. ಇದು ಹೇಗೆ ತಪ್ಪು ಹೋಗಬಹುದು ಎಂದು ಯೋಚಿಸಿ. [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott) ಮುಂತಾದ ಭಾವನೆಯನ್ನು ವಿಶ್ಲೇಷಿಸುವ ಸುಧಾರಿತ ಉದ್ಯಮ-ಸಿದ್ಧ ವ್ಯವಸ್ಥೆಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚು ಓದಿ. ಮೇಲಿನ ಪ್ರೈಡ್ ಮತ್ತು ಪ್ರಿಜುಡಿಸ್ ವಾಕ್ಯಗಳನ್ನು ಕೆಲವು ಪರೀಕ್ಷಿಸಿ ಮತ್ತು ಇದು ಸೂಕ್ಷ್ಮತೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಬಹುದೇ ಎಂದು ನೋಡಿ. + +## ನಿಯೋಜನೆ + +[Poetic license](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/3-Translation-Sentiment/assignment.md b/translations/kn/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..bc243c76f --- /dev/null +++ b/translations/kn/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,27 @@ + +# ಕಾವ್ಯಾತ್ಮಕ ಪರವಾನಗಿ + +## ಸೂಚನೆಗಳು + +[ಈ ನೋಟ್ಬುಕ್](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) ನಲ್ಲಿ ನೀವು 500 ಕ್ಕೂ ಹೆಚ್ಚು ಎಮಿಲಿ ಡಿಕಿನ್ಸನ್ ಕವಿತೆಗಳನ್ನೂ, ಅವುಗಳ ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಅಜೂರ್ ಟೆಕ್ಸ್ಟ್ ಅನಾಲಿಟಿಕ್ಸ್ ಬಳಸಿ ಪೂರ್ವವೀಕ್ಷಣೆ ಮಾಡಲಾಗಿದೆ. ಈ ಡೇಟಾಸೆಟ್ ಬಳಸಿ, ಪಾಠದಲ್ಲಿ ವಿವರಿಸಲಾದ ತಂತ್ರಗಳನ್ನು ಉಪಯೋಗಿಸಿ ವಿಶ್ಲೇಷಿಸಿ. ಒಂದು ಕವಿತೆಯ ಸೂಚಿಸಲಾದ ಭಾವನೆ ಅಜೂರ್ ಸೇವೆಯ ಹೆಚ್ಚು ಸುಧಾರಿತ ನಿರ್ಣಯದೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆಯೇ? ನಿಮ್ಮ ಅಭಿಪ್ರಾಯದಲ್ಲಿ ಏಕೆ ಅಥವಾ ಏಕೆ ಅಲ್ಲ? ಏನಾದರೂ ನಿಮಗೆ ಆಶ್ಚರ್ಯಕರವಾಗಿದೆಯೇ? + +## ಮೌಲ್ಯಮಾಪನ + +| ಮಾನದಂಡಗಳು | ಉದಾಹರಣೀಯ | ತೃಪ್ತಿಕರ | ಸುಧಾರಣೆಯ ಅಗತ್ಯ | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | ಲೇಖಕರ ಮಾದರಿ ಔಟ್‌ಪುಟ್‌ನ ದೃಢ ವಿಶ್ಲೇಷಣೆಯೊಂದಿಗೆ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ | ನೋಟ್ಬುಕ್ ಅಪೂರ್ಣವಾಗಿದೆ ಅಥವಾ ವಿಶ್ಲೇಷಣೆ ನಡೆಸುವುದಿಲ್ಲ | ಯಾವುದೇ ನೋಟ್ಬುಕ್ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿಲ್ಲ | + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/kn/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..2780e398f --- /dev/null +++ b/translations/kn/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/kn/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..4cb199508 --- /dev/null +++ b/translations/kn/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb b/translations/kn/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb new file mode 100644 index 000000000..ae7954472 --- /dev/null +++ b/translations/kn/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb @@ -0,0 +1,100 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 4, + "coopTranslator": { + "original_hash": "27de2abc0235ebd22080fc8f1107454d", + "translation_date": "2025-12-19T16:49:20+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/notebook.ipynb", + "language_code": "kn" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from textblob import TextBlob\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You should download the book text, clean it, and import it here\n", + "with open(\"pride.txt\", encoding=\"utf8\") as f:\n", + " file_contents = f.read()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "book_pride = TextBlob(file_contents)\n", + "positive_sentiment_sentences = []\n", + "negative_sentiment_sentences = []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for sentence in book_pride.sentences:\n", + " if sentence.sentiment.polarity == 1:\n", + " positive_sentiment_sentences.append(sentence)\n", + " if sentence.sentiment.polarity == -1:\n", + " negative_sentiment_sentences.append(sentence)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"The \" + str(len(positive_sentiment_sentences)) + \" most positive sentences:\")\n", + "for sentence in positive_sentiment_sentences:\n", + " print(\"+ \" + str(sentence.replace(\"\\n\", \"\").replace(\" \", \" \")))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"The \" + str(len(negative_sentiment_sentences)) + \" most negative sentences:\")\n", + "for sentence in negative_sentiment_sentences:\n", + " print(\"- \" + str(sentence.replace(\"\\n\", \"\").replace(\" \", \" \")))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ.\n\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/kn/6-NLP/4-Hotel-Reviews-1/README.md b/translations/kn/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..08b085c38 --- /dev/null +++ b/translations/kn/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,419 @@ + +# ಹೋಟೆಲ್ ವಿಮರ್ಶೆಗಳೊಂದಿಗೆ ಭಾವನೆ ವಿಶ್ಲೇಷಣೆ - ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ + +ಈ ವಿಭಾಗದಲ್ಲಿ ನೀವು ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ಕಲಿತ ತಂತ್ರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ದೊಡ್ಡ ಡೇಟಾಸೆಟ್‌ನ ಅನ್ವೇಷಣಾತ್ಮಕ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಮಾಡುತ್ತೀರಿ. ವಿವಿಧ ಕಾಲಮ್‌ಗಳ ಉಪಯುಕ್ತತೆಯನ್ನು ಚೆನ್ನಾಗಿ ಅರ್ಥಮಾಡಿಕೊಂಡ ನಂತರ, ನೀವು ತಿಳಿಯಲಿದ್ದೀರಿ: + +- ಅನಗತ್ಯ ಕಾಲಮ್‌ಗಳನ್ನು ಹೇಗೆ ತೆಗೆದುಹಾಕುವುದು +- ಇತ್ತೀಚಿನ ಕಾಲಮ್‌ಗಳ ಆಧಾರದ ಮೇಲೆ ಹೊಸ ಡೇಟಾವನ್ನು ಹೇಗೆ ಲೆಕ್ಕಹಾಕುವುದು +- ಅಂತಿಮ ಸವಾಲಿಗಾಗಿ ಫಲಿತಾಂಶ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಹೇಗೆ ಉಳಿಸುವುದು + +## [ಪೂರ್ವ-ಪಾಠ ಕ್ವಿಜ್](https://ff-quizzes.netlify.app/en/ml/) + +### ಪರಿಚಯ + +ಇದುವರೆಗೆ ನೀವು ತಿಳಿದುಕೊಂಡಿರುವುದು, ಪಠ್ಯ ಡೇಟಾ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾ ಪ್ರಕಾರಗಳಿಗಿಂತ ಬಹಳ ವಿಭಿನ್ನವಾಗಿದೆ. ಅದು ಮಾನವನು ಬರೆದ ಅಥವಾ ಮಾತನಾಡಿದ ಪಠ್ಯವಾಗಿದ್ದರೆ, ಅದನ್ನು ಮಾದರಿಗಳು ಮತ್ತು ಆವರ್ತನೆಗಳು, ಭಾವನೆ ಮತ್ತು ಅರ್ಥವನ್ನು ಕಂಡುಹಿಡಿಯಲು ವಿಶ್ಲೇಷಿಸಬಹುದು. ಈ ಪಾಠವು ನಿಮಗೆ ನಿಜವಾದ ಡೇಟಾ ಸೆಟ್ ಮತ್ತು ನಿಜವಾದ ಸವಾಲಿನೊಳಗೆ ಕರೆದೊಯ್ಯುತ್ತದೆ: **[ಯುರೋಪಿನ 515K ಹೋಟೆಲ್ ವಿಮರ್ಶೆಗಳ ಡೇಟಾ](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** ಮತ್ತು ಇದಕ್ಕೆ [CC0: ಸಾರ್ವಜನಿಕ ಡೊಮೇನ್ ಪರವಾನಗಿ](https://creativecommons.org/publicdomain/zero/1.0/) ಇದೆ. ಇದು Booking.com ನ ಸಾರ್ವಜನಿಕ ಮೂಲಗಳಿಂದ ಸ್ಕ್ರೇಪ್ ಮಾಡಲಾಗಿದೆ. ಡೇಟಾಸೆಟ್ ರಚನೆದವರು ಜಿಯಾಶೆನ್ ಲಿಯು. + +### ತಯಾರಿ + +ನೀವು ಬೇಕಾಗಿರುವುದು: + +* Python 3 ಬಳಸಿ .ipynb ನೋಟ್ಬುಕ್‌ಗಳನ್ನು ಚಾಲನೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯ +* pandas +* NLTK, [ನೀವು ಸ್ಥಳೀಯವಾಗಿ ಸ್ಥಾಪಿಸಬೇಕು](https://www.nltk.org/install.html) +* Kaggle ನಲ್ಲಿ ಲಭ್ಯವಿರುವ ಡೇಟಾಸೆಟ್ [515K ಹೋಟೆಲ್ ವಿಮರ್ಶೆಗಳ ಡೇಟಾ ಯುರೋಪಿನಲ್ಲಿ](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). ಇದು ಅನ್ಜಿಪ್ ಮಾಡಿದಾಗ ಸುಮಾರು 230 MB ಆಗಿದೆ. ಈ NLP ಪಾಠಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ರೂಟ್ `/data` ಫೋಲ್ಡರ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ. + +## ಅನ್ವೇಷಣಾತ್ಮಕ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ + +ಈ ಸವಾಲು ನೀವು ಭಾವನೆ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಅತಿಥಿ ವಿಮರ್ಶಾ ಅಂಕಗಳನ್ನು ಬಳಸಿ ಹೋಟೆಲ್ ಶಿಫಾರಸು ಬಾಟ್ ನಿರ್ಮಿಸುತ್ತಿದ್ದೀರಿ ಎಂದು ಊಹಿಸುತ್ತದೆ. ನೀವು ಬಳಸಲಿರುವ ಡೇಟಾಸೆಟ್ 6 ನಗರಗಳಲ್ಲಿ 1493 ವಿಭಿನ್ನ ಹೋಟೆಲ್‌ಗಳ ವಿಮರ್ಶೆಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. + +Python, ಹೋಟೆಲ್ ವಿಮರ್ಶೆಗಳ ಡೇಟಾಸೆಟ್ ಮತ್ತು NLTK ಭಾವನೆ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಬಳಸಿ ನೀವು ಕಂಡುಹಿಡಿಯಬಹುದು: + +* ವಿಮರ್ಶೆಗಳಲ್ಲಿ ಅತ್ಯಂತ ಹೆಚ್ಚು ಬಳಕೆಯಾದ ಪದಗಳು ಮತ್ತು ವಾಕ್ಯಗಳು ಯಾವುವು? +* ಹೋಟೆಲ್ ಅನ್ನು ವರ್ಣಿಸುವ ಅಧಿಕೃತ *ಟ್ಯಾಗ್‌ಗಳು* ವಿಮರ್ಶಾ ಅಂಕಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆ ಹೊಂದಿದೆಯೇ (ಉದಾ: *ಯುವ ಮಕ್ಕಳೊಂದಿಗೆ ಕುಟುಂಬ*ಗಾಗಿ ಹೆಚ್ಚು ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆಗಳು ಇದ್ದರೆ, *ಒಂಟಿ ಪ್ರಯಾಣಿಕ*ಗಿಂತ ಹೆಚ್ಚು, ಇದು *ಒಂಟಿ ಪ್ರಯಾಣಿಕರಿಗೆ* ಉತ್ತಮವಾಗಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆಯೇ?) +* NLTK ಭಾವನೆ ಅಂಕಗಳು ಹೋಟೆಲ್ ವಿಮರ್ಶಕರ ಸಂಖ್ಯಾತ್ಮಕ ಅಂಕಗಳೊಂದಿಗೆ 'ಒಪ್ಪಿಗೆಯಲ್ಲವೇ'? + +#### ಡೇಟಾಸೆಟ್ + +ನೀವು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಂಡಿರುವ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಅನ್ವೇಷಿಸೋಣ. ಫೈಲ್ ಅನ್ನು VS Code ಅಥವಾ Excel ಮುಂತಾದ ಸಂಪಾದಕದಲ್ಲಿ ತೆರೆಯಿರಿ. + +ಡೇಟಾಸೆಟ್‌ನ ಹೆಡರ್‌ಗಳು ಹೀಗಿವೆ: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +ಇವುಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸುಲಭವಾಗುವಂತೆ ಗುಂಪು ಮಾಡಲಾಗಿದೆ: +##### ಹೋಟೆಲ್ ಕಾಲಮ್‌ಗಳು + +* `Hotel_Name`, `Hotel_Address`, `lat` (ಅಕ್ಷಾಂಶ), `lng` (ರೇಖಾಂಶ) + * *lat* ಮತ್ತು *lng* ಬಳಸಿ Python ನಲ್ಲಿ ಹೋಟೆಲ್ ಸ್ಥಳಗಳನ್ನು ತೋರಿಸುವ ನಕ್ಷೆಯನ್ನು ರಚಿಸಬಹುದು (ನಕಾರಾತ್ಮಕ ಮತ್ತು ಧನಾತ್ಮಕ ವಿಮರ್ಶೆಗಳಿಗೆ ಬಣ್ಣ ಕೋಡ್ ಮಾಡಬಹುದು) + * Hotel_Address ನಮಗೆ ಸ್ಪಷ್ಟವಾಗಿ ಉಪಯುಕ್ತವಲ್ಲ, ಮತ್ತು ನಾವು ಅದನ್ನು ಸುಲಭವಾಗಿ ಶ್ರೇಣೀಕರಿಸಲು ಮತ್ತು ಹುಡುಕಲು ದೇಶದೊಂದಿಗೆ ಬದಲಾಯಿಸಬಹುದು + +**ಹೋಟೆಲ್ ಮೆಟಾ-ವಿಮರ್ಶೆ ಕಾಲಮ್‌ಗಳು** + +* `Average_Score` + * ಡೇಟಾಸೆಟ್ ರಚನೆದವರ ಪ್ರಕಾರ, ಈ ಕಾಲಮ್ *ಹೋಟೆಲ್‌ನ ಸರಾಸರಿ ಅಂಕ, ಕಳೆದ ವರ್ಷದ ಇತ್ತೀಚಿನ ಕಾಮೆಂಟ್ ಆಧಾರಿತವಾಗಿ ಲೆಕ್ಕಹಾಕಲಾಗಿದೆ*. ಇದು ಅಸಾಮಾನ್ಯ ವಿಧಾನವಾಗಿದ್ದರೂ, ಡೇಟಾ ಸ್ಕ್ರೇಪ್ ಆಗಿರುವುದರಿಂದ ನಾವು ಇದನ್ನು ಪ್ರಸ್ತುತ ಮೌಲ್ಯವಾಗಿ ತೆಗೆದುಕೊಳ್ಳಬಹುದು. + + ✅ ಈ ಡೇಟಾದ ಇತರ ಕಾಲಮ್‌ಗಳ ಆಧಾರದ ಮೇಲೆ, ಸರಾಸರಿ ಅಂಕವನ್ನು ಲೆಕ್ಕಹಾಕಲು ಬೇರೆ ಯಾವ ವಿಧಾನವನ್ನು ನೀವು ಯೋಚಿಸಬಹುದು? + +* `Total_Number_of_Reviews` + * ಈ ಹೋಟೆಲ್ ಪಡೆದ ವಿಮರ್ಶೆಗಳ ಒಟ್ಟು ಸಂಖ್ಯೆ - ಇದು ಡೇಟಾಸೆಟ್‌ನ ವಿಮರ್ಶೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದದೆಯೇ ಎಂಬುದು ಸ್ಪಷ್ಟವಿಲ್ಲ (ಕೆಲವು ಕೋಡ್ ಬರೆಯದೆ) +* `Additional_Number_of_Scoring` + * ಇದರಿಂದ ಅರ್ಥ, ವಿಮರ್ಶೆ ಅಂಕ ನೀಡಲಾಗಿದೆ ಆದರೆ ವಿಮರ್ಶಕನು ಧನಾತ್ಮಕ ಅಥವಾ ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆ ಬರೆಯಲಿಲ್ಲ + +**ವಿಮರ್ಶೆ ಕಾಲಮ್‌ಗಳು** + +- `Reviewer_Score` + - ಕನಿಷ್ಠ 1 ದಶಮಾಂಶ ಸ್ಥಾನವಿರುವ ಸಂಖ್ಯಾತ್ಮಕ ಮೌಲ್ಯ, ಕನಿಷ್ಠ ಮತ್ತು ಗರಿಷ್ಠ ಮೌಲ್ಯಗಳು 2.5 ಮತ್ತು 10 + - 2.5 ಅತಿ ಕಡಿಮೆ ಅಂಕವಾಗಿರುವುದಕ್ಕೆ ಕಾರಣ ವಿವರಿಸಲಾಗಿಲ್ಲ +- `Negative_Review` + - ವಿಮರ್ಶಕನು ಏನೂ ಬರೆಯದಿದ್ದರೆ, ಈ ಕ್ಷೇತ್ರದಲ್ಲಿ "**No Negative**" ಇರುತ್ತದೆ + - ಗಮನಿಸಿ, ವಿಮರ್ಶಕನು ಧನಾತ್ಮಕ ವಿಮರ್ಶೆಯನ್ನು ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆ ಕಾಲಮ್‌ನಲ್ಲಿ ಬರೆಯಬಹುದು (ಉದಾ: "ಈ ಹೋಟೆಲ್ ಬಗ್ಗೆ ಏನೂ ಕೆಟ್ಟದ್ದು ಇಲ್ಲ") +- `Review_Total_Negative_Word_Counts` + - ಹೆಚ್ಚು ನಕಾರಾತ್ಮಕ ಪದಗಳ ಸಂಖ್ಯೆ ಕಡಿಮೆ ಅಂಕವನ್ನು ಸೂಚಿಸುತ್ತದೆ (ಭಾವನಾತ್ಮಕತೆಯನ್ನು ಪರಿಶೀಲಿಸದೆ) +- `Positive_Review` + - ವಿಮರ್ಶಕನು ಏನೂ ಬರೆಯದಿದ್ದರೆ, ಈ ಕ್ಷೇತ್ರದಲ್ಲಿ "**No Positive**" ಇರುತ್ತದೆ + - ಗಮನಿಸಿ, ವಿಮರ್ಶಕನು ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆಯನ್ನು ಧನಾತ್ಮಕ ವಿಮರ್ಶೆ ಕಾಲಮ್‌ನಲ್ಲಿ ಬರೆಯಬಹುದು (ಉದಾ: "ಈ ಹೋಟೆಲ್ ಬಗ್ಗೆ ಏನೂ ಒಳ್ಳೆಯದು ಇಲ್ಲ") +- `Review_Total_Positive_Word_Counts` + - ಹೆಚ್ಚು ಧನಾತ್ಮಕ ಪದಗಳ ಸಂಖ್ಯೆ ಹೆಚ್ಚು ಅಂಕವನ್ನು ಸೂಚಿಸುತ್ತದೆ (ಭಾವನಾತ್ಮಕತೆಯನ್ನು ಪರಿಶೀಲಿಸದೆ) +- `Review_Date` ಮತ್ತು `days_since_review` + - ವಿಮರ್ಶೆಗೆ تازگي ಅಥವಾ ಹಳೆಯತನದ ಅಳತೆ ಅನ್ವಯಿಸಬಹುದು (ಹಳೆಯ ವಿಮರ್ಶೆಗಳು ನವೀನ ವಿಮರ್ಶೆಗಳಂತೆ ನಿಖರವಾಗಿರದಿರಬಹುದು, ಹೋಟೆಲ್ ನಿರ್ವಹಣೆ ಬದಲಾಗಿದೆ, ಪುನರ್ ನಿರ್ಮಾಣ ಮಾಡಲಾಗಿದೆ, ಅಥವಾ ಈಜುಕೊಳ ಸೇರಿಸಲಾಗಿದೆ ಮುಂತಾದ ಕಾರಣಗಳಿಂದ) +- `Tags` + - ವಿಮರ್ಶಕನು ತಮ್ಮ ಅತಿಥಿ ಪ್ರಕಾರ (ಉದಾ: ಒಂಟಿ ಅಥವಾ ಕುಟುಂಬ), ಕೊಠಡಿ ಪ್ರಕಾರ, ಉಳಿದಿರುವ ಅವಧಿ ಮತ್ತು ವಿಮರ್ಶೆ ಸಲ್ಲಿಸಿದ ಸಾಧನವನ್ನು ವರ್ಣಿಸಲು ಆಯ್ಕೆಮಾಡಬಹುದಾದ ಚಿಕ್ಕ ವರ್ಣನಾತ್ಮಕ ಪದಗಳು + - ದುರದೃಷ್ಟವಶಾತ್, ಈ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಬಳಸುವುದು ಸಮಸ್ಯೆಯಾಗಿದೆ, ಕೆಳಗಿನ ವಿಭಾಗದಲ್ಲಿ ಅವುಗಳ ಉಪಯುಕ್ತತೆಯನ್ನು ಚರ್ಚಿಸಲಾಗಿದೆ + +**ವಿಮರ್ಶಕ ಕಾಲಮ್‌ಗಳು** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - ಶಿಫಾರಸು ಮಾದರಿಯಲ್ಲಿ ಇದು ಒಂದು ಅಂಶವಾಗಬಹುದು, ಉದಾಹರಣೆಗೆ, ನೂರಾರು ವಿಮರ್ಶೆಗಳಿರುವ ಹೆಚ್ಚು ಸಕ್ರಿಯ ವಿಮರ್ಶಕರು ಹೆಚ್ಚು ನಕಾರಾತ್ಮಕವಾಗಿರಬಹುದು ಎಂದು ನೀವು ನಿರ್ಧರಿಸಬಹುದು. ಆದರೆ ಯಾವುದೇ ವಿಮರ್ಶೆಯ ವಿಮರ್ಶಕನು ವಿಶಿಷ್ಟ ಕೋಡ್‌ನೊಂದಿಗೆ ಗುರುತಿಸಲ್ಪಟ್ಟಿಲ್ಲ, ಆದ್ದರಿಂದ ವಿಮರ್ಶೆಗಳ ಗುಂಪಿಗೆ ಲಿಂಕ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. 100 ಅಥವಾ ಹೆಚ್ಚು ವಿಮರ್ಶೆಗಳಿರುವ 30 ವಿಮರ್ಶಕರು ಇದ್ದಾರೆ, ಆದರೆ ಇದು ಶಿಫಾರಸು ಮಾದರಿಗೆ ಹೇಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ ಎಂಬುದು ಸ್ಪಷ್ಟವಿಲ್ಲ. +- `Reviewer_Nationality` + - ಕೆಲವು ಜನರು ಕೆಲವು ರಾಷ್ಟ್ರಗಳವರು ಧನಾತ್ಮಕ ಅಥವಾ ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆ ನೀಡುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚು ಎಂದು ಭಾವಿಸಬಹುದು. ಇಂತಹ ಅನೇಕ ಕಥನಗಳನ್ನು ನಿಮ್ಮ ಮಾದರಿಗಳಲ್ಲಿ ಸೇರಿಸುವಾಗ ಜಾಗರೂಕವಾಗಿರಿ. ಇವು ರಾಷ್ಟ್ರೀಯ (ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಜಾತಿ) стереотип್‌ಗಳು, ಮತ್ತು ಪ್ರತಿಯೊಬ್ಬ ವಿಮರ್ಶಕನು ತಮ್ಮ ಅನುಭವ ಆಧಾರಿತ ವಿಮರ್ಶೆ ಬರೆದ ವ್ಯಕ್ತಿ. ಇದು ಅವರ ಹಿಂದಿನ ಹೋಟೆಲ್ ಉಳಿವಿನ ಅನುಭವ, ಪ್ರಯಾಣದ ದೂರ, ಮತ್ತು ವೈಯಕ್ತಿಕ ಸ್ವಭಾವ ಮುಂತಾದ ಅನೇಕ ದೃಷ್ಟಿಕೋನಗಳಿಂದ ಪ್ರಭಾವಿತವಾಗಿರಬಹುದು. ಅವರ ರಾಷ್ಟ್ರೀಯತೆ ವಿಮರ್ಶಾ ಅಂಕಕ್ಕೆ ಕಾರಣ ಎಂದು ಭಾವಿಸುವುದು ಕಷ್ಟ. + +##### ಉದಾಹರಣೆಗಳು + +| ಸರಾಸರಿ ಅಂಕ | ಒಟ್ಟು ವಿಮರ್ಶೆಗಳ ಸಂಖ್ಯೆ | ವಿಮರ್ಶಕ ಅಂಕ | ನಕಾರಾತ್ಮಕ
ವಿಮರ್ಶೆ | ಧನಾತ್ಮಕ ವಿಮರ್ಶೆ | ಟ್ಯಾಗ್‌ಗಳು | +| ------------ | ---------------------- | ------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | ಇದು ಪ್ರಸ್ತುತ ಹೋಟೆಲ್ ಅಲ್ಲ, ಆದರೆ ನಿರ್ಮಾಣ ಸ್ಥಳವಾಗಿದೆ. ನಾನು ಬೆಳಗಿನ ಜಾವದಿಂದ ಮತ್ತು ದಿನಪೂರ್ತಿ ಅಸಹ್ಯವಾದ ಕಟ್ಟಡ ಶಬ್ದದಿಂದ ಭಯಭೀತನಾಗಿದ್ದೆ, ದೀರ್ಘ ಪ್ರಯಾಣದ ನಂತರ ವಿಶ್ರಾಂತಿ ಪಡೆಯುತ್ತಿದ್ದಾಗ ಮತ್ತು ಕೊಠಡಿಯಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದಾಗ. ಜನರು ದಿನಪೂರ್ತಿ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದರು, ಅಂದರೆ ಪಕ್ಕದ ಕೊಠಡಿಗಳಲ್ಲಿ ಜಾಕ್‌ಹ್ಯಾಮರ್‌ಗಳೊಂದಿಗೆ. ನಾನು ಕೊಠಡಿ ಬದಲಾವಣೆ ಕೇಳಿದೆ, ಆದರೆ ಶಾಂತ ಕೊಠಡಿ ಲಭ್ಯವಿರಲಿಲ್ಲ. ಇನ್ನೂ ಕೆಟ್ಟದಾಗಿ, ನಾನು ಹೆಚ್ಚುವರಿ ಶುಲ್ಕ ವಿಧಿಸಲ್ಪಟ್ಟಿದ್ದೆ. ನಾನು ಸಂಜೆ ಚೆಕ್ ಔಟ್ ಮಾಡಿದೆ, ಏಕೆಂದರೆ ನನಗೆ ಬೇಗಲೇ ವಿಮಾನ ಹಾರಬೇಕಾಗಿತ್ತು ಮತ್ತು ಸೂಕ್ತ ಬಿಲ್ ಪಡೆದಿದ್ದೆ. ಒಂದು ದಿನದ ನಂತರ ಹೋಟೆಲ್ ನನ್ನ ಅನುಮತಿಯಿಲ್ಲದೆ ಬುಕ್ ಮಾಡಿದ ಬೆಲೆಯಿಗಿಂತ ಹೆಚ್ಚಾಗಿ ಶುಲ್ಕ ವಿಧಿಸಿತು. ಇದು ಭಯಾನಕ ಸ್ಥಳ. ಇಲ್ಲಿ ಬುಕ್ ಮಾಡಿಕೊಳ್ಳುವುದರಿಂದ ನಿಮ್ಮನ್ನು ಶಿಕ್ಷಿಸಬೇಡಿ | ಇಲ್ಲದೆ ಭಯಾನಕ ಸ್ಥಳ ದೂರವಿರಿ | ವ್ಯವಹಾರ ಪ್ರಯಾಣ ಜೋಡಿ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಡಬಲ್ ರೂಮ್ 2 ರಾತ್ರಿಗಳು ಉಳಿದಿದ್ದಾರೆ | + +ನೀವು ನೋಡಬಹುದು, ಈ ಅತಿಥಿಗೆ ಈ ಹೋಟೆಲ್‌ನಲ್ಲಿ ಸಂತೋಷಕರ ಉಳಿವು ಇರಲಿಲ್ಲ. ಹೋಟೆಲ್‌ಗೆ 7.8 ಸರಾಸರಿ ಅಂಕ ಮತ್ತು 1945 ವಿಮರ್ಶೆಗಳಿವೆ, ಆದರೆ ಈ ವಿಮರ್ಶಕ 2.5 ಅಂಕ ನೀಡಿದ್ದು, ತಮ್ಮ ನಕಾರಾತ್ಮಕ ಉಳಿವಿನ ಬಗ್ಗೆ 115 ಪದಗಳನ್ನು ಬರೆದಿದ್ದಾರೆ. ಅವರು Positive_Review ಕಾಲಮ್‌ನಲ್ಲಿ ಏನೂ ಬರೆಯದಿದ್ದರೆ, ನೀವು ಧನಾತ್ಮಕವಿಲ್ಲ ಎಂದು ಊಹಿಸಬಹುದು, ಆದರೆ ಅವರು ಎಚ್ಚರಿಕೆಯ 7 ಪದಗಳನ್ನು ಬರೆದಿದ್ದಾರೆ. ನಾವು ಪದಗಳನ್ನು ಮಾತ್ರ ಎಣಿಸಿದರೆ ಅಥವಾ ಪದಗಳ ಅರ್ಥ ಅಥವಾ ಭಾವನಾತ್ಮಕತೆಯನ್ನು ಪರಿಗಣಿಸದೆ ಇದ್ದರೆ, ವಿಮರ್ಶಕರ ಉದ್ದೇಶದ ಬಗ್ಗೆ ತಪ್ಪು ದೃಷ್ಟಿಕೋನವಾಗಬಹುದು. ವಿಚಿತ್ರವಾಗಿ, ಅವರ 2.5 ಅಂಕ ಗೊಂದಲಕಾರಿಯಾಗಿದೆ, ಏಕೆಂದರೆ ಹೋಟೆಲ್ ಉಳಿವು ಅಷ್ಟು ಕೆಟ್ಟದಾಗಿದ್ದರೆ, ಏಕೆ ಅಂಕ ನೀಡಿದರು? ಡೇಟಾಸೆಟ್ ಅನ್ನು ನಿಖರವಾಗಿ ಪರಿಶೀಲಿಸಿದರೆ, ಕನಿಷ್ಠ ಸಾಧ್ಯ ಅಂಕ 2.5, 0 ಅಲ್ಲ. ಗರಿಷ್ಠ ಅಂಕ 10. + +##### ಟ್ಯಾಗ್‌ಗಳು + +ಮೇಲಿನಂತೆ, ಮೊದಲ ನೋಟದಲ್ಲಿ, `Tags` ಬಳಸಿ ಡೇಟಾವನ್ನು ವರ್ಗೀಕರಿಸುವ ಯೋಚನೆ ಅರ್ಥಪೂರ್ಣವಾಗಿದೆ. ದುರದೃಷ್ಟವಶಾತ್, ಈ ಟ್ಯಾಗ್‌ಗಳು ಮಾನಕೀಕೃತವಾಗಿಲ್ಲ, ಅಂದರೆ ಒಂದು ಹೋಟೆಲ್‌ನಲ್ಲಿ ಆಯ್ಕೆಗಳು *Single room*, *Twin room*, ಮತ್ತು *Double room* ಆಗಿರಬಹುದು, ಆದರೆ ಮುಂದಿನ ಹೋಟೆಲ್‌ನಲ್ಲಿ ಅವು *Deluxe Single Room*, *Classic Queen Room*, ಮತ್ತು *Executive King Room* ಆಗಿರಬಹುದು. ಇವು ಒಂದೇ ಅರ್ಥದಿರಬಹುದು, ಆದರೆ ಅನೇಕ ಬದಲಾವಣೆಗಳಿವೆ, ಆದ್ದರಿಂದ ಆಯ್ಕೆ: + +1. ಎಲ್ಲಾ ಪದಗಳನ್ನು ಒಂದೇ ಮಾನಕಕ್ಕೆ ಬದಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸುವುದು, ಇದು ಬಹಳ ಕಷ್ಟ, ಏಕೆಂದರೆ ಪ್ರತಿಯೊಂದು ಪ್ರಕರಣದಲ್ಲಿಯೂ ಪರಿವರ್ತನೆ ಮಾರ್ಗ ಸ್ಪಷ್ಟವಿಲ್ಲ (ಉದಾ: *Classic single room* ನಕ್ಷೆ *Single room* ಗೆ ಆದರೆ *Superior Queen Room with Courtyard Garden or City View* ನಕ್ಷೆ ಮಾಡುವುದು ಬಹಳ ಕಷ್ಟ) + +1. ನಾವು NLP ವಿಧಾನವನ್ನು ತೆಗೆದು, ಪ್ರತಿಯೊಂದು ಹೋಟೆಲ್‌ಗೆ ಅನ್ವಯಿಸುವಂತೆ *Solo*, *Business Traveller*, ಅಥವಾ *Family with young kids* ಮುಂತಾದ ಪದಗಳ ಆವರ್ತನೆಯನ್ನು ಅಳೆಯಬಹುದು ಮತ್ತು ಅದನ್ನು ಶಿಫಾರಸುಗೆ ಸೇರಿಸಬಹುದು + +ಟ್ಯಾಗ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ (ಆದರೆ ಯಾವಾಗಲೂ ಅಲ್ಲ) 5 ರಿಂದ 6 ಕಮಾ ವಿಭಜಿತ ಮೌಲ್ಯಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿರುವ ಒಂದು ಕ್ಷೇತ್ರವಾಗಿವೆ, ಅವು *ಪ್ರಯಾಣದ ಪ್ರಕಾರ*, *ಅತಿಥಿಗಳ ಪ್ರಕಾರ*, *ಕೊಠಡಿಯ ಪ್ರಕಾರ*, *ರಾತ್ರಿ ಸಂಖ್ಯೆ*, ಮತ್ತು *ವಿಮರ್ಶೆ ಸಲ್ಲಿಸಿದ ಸಾಧನದ ಪ್ರಕಾರ* ಹೊಂದಿವೆ. ಆದರೆ ಕೆಲವು ವಿಮರ್ಶಕರು ಪ್ರತಿಯೊಂದು ಕ್ಷೇತ್ರವನ್ನು ತುಂಬದಿದ್ದರೆ (ಒಂದು ಖಾಲಿ ಇರಬಹುದು), ಮೌಲ್ಯಗಳು ಯಾವಾಗಲೂ ಒಂದೇ ಕ್ರಮದಲ್ಲಿರಲಾರವು. + +ಉದಾಹರಣೆಗೆ, *ಗುಂಪಿನ ಪ್ರಕಾರ* ತೆಗೆದುಕೊಳ್ಳಿ. `Tags` ಕಾಲಮ್‌ನಲ್ಲಿ ಈ ಕ್ಷೇತ್ರದಲ್ಲಿ 1025 ವಿಭಿನ್ನ ಸಾಧ್ಯತೆಗಳಿವೆ, ಮತ್ತು ದುರದೃಷ್ಟವಶಾತ್ ಕೆಲವು ಮಾತ್ರ ಗುಂಪಿಗೆ ಸಂಬಂಧಿಸಿದವು (ಕೆಲವು ಕೊಠಡಿಯ ಪ್ರಕಾರ ಇತ್ಯಾದಿ). ನೀವು ಕುಟುಂಬವನ್ನು ಮಾತ್ರ ಫಿಲ್ಟರ್ ಮಾಡಿದರೆ, ಫಲಿತಾಂಶಗಳಲ್ಲಿ ಅನೇಕ *Family room* ಪ್ರಕಾರದ ಫಲಿತಾಂಶಗಳಿವೆ. ನೀವು *with* ಪದವನ್ನು ಸೇರಿಸಿದರೆ, ಅಂದರೆ *Family with* ಮೌಲ್ಯಗಳನ್ನು ಎಣಿಸಿದರೆ, ಫಲಿತಾಂಶಗಳು ಉತ್ತಮವಾಗಿವೆ, 515,000 ಫಲಿತಾಂಶಗಳಲ್ಲಿ 80,000 ಕ್ಕೂ ಹೆಚ್ಚು "Family with young children" ಅಥವಾ "Family with older children" ಎಂಬ ವಾಕ್ಯांशವನ್ನು ಹೊಂದಿವೆ. + +ಇದರಿಂದ ಟ್ಯಾಗ್ ಕಾಲಮ್ ನಮಗೆ ಸಂಪೂರ್ಣವಾಗಿ ಉಪಯುಕ್ತವಲ್ಲ, ಆದರೆ ಅದನ್ನು ಉಪಯುಕ್ತವಾಗಿಸಲು ಕೆಲವು ಕೆಲಸ ಬೇಕಾಗುತ್ತದೆ. + +##### ಸರಾಸರಿ ಹೋಟೆಲ್ ಅಂಕ + +ಡೇಟಾ ಸೆಟ್‌ನಲ್ಲಿ ಕೆಲವು ವಿಚಿತ್ರತೆಗಳು ಅಥವಾ ವ್ಯತ್ಯಾಸಗಳಿವೆ, ಅವುಗಳನ್ನು ನಾನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲಾರೆ, ಆದರೆ ನಿಮ್ಮ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ ನೀವು ಅವುಗಳ ಬಗ್ಗೆ ತಿಳಿದಿರಬೇಕು. ನೀವು ಅರ್ಥಮಾಡಿಕೊಂಡರೆ, ದಯವಿಟ್ಟು ಚರ್ಚಾ ವಿಭಾಗದಲ್ಲಿ ನಮಗೆ ತಿಳಿಸಿ! + +ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಸರಾಸರಿ ಅಂಕ ಮತ್ತು ವಿಮರ್ಶೆಗಳ ಸಂಖ್ಯೆಗೆ ಸಂಬಂಧಿಸಿದ ಕಾಲಮ್‌ಗಳು ಇವೆ: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +ಈ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಅತ್ಯಧಿಕ ವಿಮರ್ಶೆಗಳಿರುವ ಏಕೈಕ ಹೋಟೆಲ್ *Britannia International Hotel Canary Wharf* ಆಗಿದ್ದು, 515,000 ವಿಮರ್ಶೆಗಳಲ್ಲಿ 4789 ವಿಮರ್ಶೆಗಳಿವೆ. ಆದರೆ ಈ ಹೋಟೆಲ್‌ಗೆ `Total_Number_of_Reviews` ಮೌಲ್ಯವನ್ನು ನೋಡಿದರೆ, ಅದು 9086 ಆಗಿದೆ. ನೀವು ಊಹಿಸಬಹುದು, ವಿಮರ್ಶೆಗಳಿಲ್ಲದ ಹೆಚ್ಚಿನ ಅಂಕಗಳಿವೆ, ಆದ್ದರಿಂದ ನಾವು `Additional_Number_of_Scoring` ಕಾಲಮ್ ಮೌಲ್ಯವನ್ನು ಸೇರಿಸಬಹುದು. ಆ ಮೌಲ್ಯ 2682 ಆಗಿದ್ದು, 4789 ಗೆ ಸೇರಿಸಿದರೆ 7,471 ಆಗುತ್ತದೆ, ಇದು `Total_Number_of_Reviews` ಗಿಂತ 1615 ಕಡಿಮೆ. + +`Average_Score` ಕಾಲಮ್‌ಗಳನ್ನು ತೆಗೆದುಕೊಂಡರೆ, ನೀವು ಊಹಿಸಬಹುದು ಇದು ಡೇಟಾಸೆಟ್‌ನ ವಿಮರ್ಶೆಗಳ ಸರಾಸರಿ, ಆದರೆ Kaggle ವಿವರಣೆ "*ಹೋಟೆಲ್‌ನ ಸರಾಸರಿ ಅಂಕ, ಕಳೆದ ವರ್ಷದ ಇತ್ತೀಚಿನ ಕಾಮೆಂಟ್ ಆಧಾರಿತವಾಗಿ ಲೆಕ್ಕಹಾಕಲಾಗಿದೆ*". ಇದು ಬಹಳ ಉಪಯುಕ್ತವಲ್ಲದಂತೆ ತೋರುತ್ತದೆ, ಆದರೆ ನಾವು ಡೇಟಾಸೆಟ್‌ನ ವಿಮರ್ಶಾ ಅಂಕಗಳ ಆಧಾರದ ಮೇಲೆ ನಮ್ಮದೇ ಸರಾಸರಿ ಲೆಕ್ಕಹಾಕಬಹುದು. ಉದಾಹರಣೆಗೆ, ಅದೇ ಹೋಟೆಲ್‌ಗೆ ಸರಾಸರಿ ಹೋಟೆಲ್ ಅಂಕ 7.1 ಎಂದು ನೀಡಲಾಗಿದೆ, ಆದರೆ ಲೆಕ್ಕಹಾಕಿದ ಅಂಕ (ಡೇಟಾಸೆಟ್‌ನ ವಿಮರ್ಶಕರ ಸರಾಸರಿ ಅಂಕ) 6.8 ಆಗಿದೆ. ಇದು ಸಮೀಪದಲ್ಲಿದೆ, ಆದರೆ ಅದೇ ಮೌಲ್ಯವಲ್ಲ, ಮತ್ತು ನಾವು ಊಹಿಸಬಹುದು `Additional_Number_of_Scoring` ವಿಮರ್ಶೆಗಳ ಅಂಕಗಳು ಸರಾಸರಿಯನ್ನು 7.1 ಗೆ ಹೆಚ್ಚಿಸಿದ್ದವು. ಅದನ್ನು ಪರೀಕ್ಷಿಸಲು ಅಥವಾ ಸಾಬೀತುಪಡಿಸಲು ಯಾವುದೇ ಮಾರ್ಗವಿಲ್ಲದ ಕಾರಣ, `Average_Score`, `Additional_Number_of_Scoring` ಮತ್ತು `Total_Number_of_Reviews` ಅನ್ನು ನಾವು ಹೊಂದಿಲ್ಲದ ಡೇಟಾ ಆಧಾರಿತವಾಗಿದ್ದಾಗ ಬಳಸುವುದು ಅಥವಾ ನಂಬುವುದು ಕಷ್ಟ. + +ಇನ್ನಷ್ಟು ಗೊಂದಲಕ್ಕೆ, ಎರಡನೇ ಅತ್ಯಧಿಕ ವಿಮರ್ಶೆಗಳಿರುವ ಹೋಟೆಲ್‌ಗೆ ಲೆಕ್ಕಹಾಕಿದ ಸರಾಸರಿ ಅಂಕ 8.12 ಮತ್ತು ಡೇಟಾಸೆಟ್‌ನ `Average_Score` 8.1 ಆಗಿದೆ. ಇದು ಸರಿಯಾದ ಅಂಕದ ಸಂಧರ್ಭವೇ ಅಥವಾ ಮೊದಲ ಹೋಟೆಲ್ ವ್ಯತ್ಯಾಸವೇ? +ಈ ಹೋಟೆಲ್‌ಗಳು ಹೊರಗಿನ ಅಂಕಿ ಇರಬಹುದು ಎಂಬ ಸಾಧ್ಯತೆಯ ಮೇಲೆ, ಮತ್ತು ಬಹುಶಃ ಹೆಚ್ಚಿನ ಮೌಲ್ಯಗಳು ಸರಿಹೊಂದಬಹುದು (ಆದರೆ ಕೆಲವು ಕಾರಣಕ್ಕಾಗಿ ಕೆಲವು ಸರಿಹೊಂದುವುದಿಲ್ಲ) ನಾವು ಡೇಟಾಸೆಟ್‌ನ ಮೌಲ್ಯಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಮತ್ತು ಮೌಲ್ಯಗಳ ಸರಿಯಾದ ಬಳಕೆಯನ್ನು (ಅಥವಾ ಬಳಕೆಯಿಲ್ಲದಿರುವುದನ್ನು) ನಿರ್ಧರಿಸಲು ಮುಂದಿನ ಸಣ್ಣ ಪ್ರೋಗ್ರಾಂ ಬರೆಯುತ್ತೇವೆ. + +> 🚨 ಎಚ್ಚರಿಕೆಯ ಟಿಪ್ಪಣಿ +> +> ಈ ಡೇಟಾಸೆಟ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ನೀವು ಪಠ್ಯದಿಂದ ಏನಾದರೂ ಲೆಕ್ಕಹಾಕುವ ಕೋಡ್ ಬರೆಯುತ್ತೀರಿ, ನೀವು ಸ್ವತಃ ಪಠ್ಯವನ್ನು ಓದದೆ ಅಥವಾ ವಿಶ್ಲೇಷಣೆ ಮಾಡದೆ. ಇದು NLP ಯ ಸಾರಾಂಶ, ಅರ್ಥ ಅಥವಾ ಭಾವನೆಯನ್ನು ಮಾನವನು ಮಾಡದೆ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು. ಆದಾಗ್ಯೂ, ನೀವು ಕೆಲವು ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆಗಳನ್ನು ಓದಬಹುದು. ನಾನು ನಿಮಗೆ ಅದನ್ನು ಓದಬೇಡಿ ಎಂದು ಸಲಹೆ ನೀಡುತ್ತೇನೆ, ಏಕೆಂದರೆ ನೀವು ಅದನ್ನು ಮಾಡಬೇಕಾಗಿಲ್ಲ. ಕೆಲವು ವಿಮರ್ಶೆಗಳು ಮೂರ್ಖತನ ಅಥವಾ ಅಸಂಬಂಧಿತ ನಕಾರಾತ್ಮಕ ಹೋಟೆಲ್ ವಿಮರ್ಶೆಗಳಾಗಿವೆ, ಉದಾಹರಣೆಗೆ "ಹವಾಮಾನ ಚೆನ್ನಾಗಿರಲಿಲ್ಲ", ಇದು ಹೋಟೆಲ್ ಅಥವಾ ಯಾರಿಗಾದರೂ ನಿಯಂತ್ರಣದಲ್ಲಿಲ್ಲ. ಆದರೆ ಕೆಲವು ವಿಮರ್ಶೆಗಳಲ್ಲಿ ಕತ್ತಲೆ ಬದಿಯೂ ಇದೆ. ಕೆಲವೊಮ್ಮೆ ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆಗಳು ಜಾತ್ಯಾತೀತ, ಲಿಂಗಭೇದ, ಅಥವಾ ವಯೋಭೇದವಾಗಿರುತ್ತವೆ. ಇದು ದುಃಖದಾಯಕವಾದರೂ ಸಾರ್ವಜನಿಕ ವೆಬ್‌ಸೈಟ್‌ನಿಂದ ಸ್ಕ್ರೇಪ್ ಮಾಡಿದ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ನಿರೀಕ್ಷಿಸಬಹುದಾದದ್ದು. ಕೆಲವು ವಿಮರ್ಶಕರು ಅಸಹ್ಯ, ಅಸೌಕರ್ಯಕರ ಅಥವಾ ಕೋಪದಾಯಕ ವಿಮರ್ಶೆಗಳನ್ನು ಬರೆದಿರುತ್ತಾರೆ. ನಿಮ್ಮನ್ನು ಕೋಪಗೊಳ್ಳಿಸುವುದಕ್ಕಿಂತ ಕೋಡ್ ಭಾವನೆಯನ್ನು ಅಳೆಯಲು ಬಿಡುವುದು ಉತ್ತಮ. ಅಂದರೆ, ಇಂತಹವರು ಅಲ್ಪಸಂಖ್ಯಾತರು, ಆದರೆ ಇರುತ್ತಾರೆ. + +## ಅಭ್ಯಾಸ - ಡೇಟಾ ಅನ್ವೇಷಣೆ +### ಡೇಟಾ ಲೋಡ್ ಮಾಡಿ + +ಡೇಟಾವನ್ನು ದೃಶ್ಯವಾಗಿ ಪರಿಶೀಲಿಸುವುದು ಸಾಕು, ಈಗ ನೀವು ಕೆಲವು ಕೋಡ್ ಬರೆಯುತ್ತೀರಿ ಮತ್ತು ಕೆಲವು ಉತ್ತರಗಳನ್ನು ಪಡೆಯುತ್ತೀರಿ! ಈ ವಿಭಾಗವು pandas ಗ್ರಂಥಾಲಯವನ್ನು ಬಳಸುತ್ತದೆ. ನಿಮ್ಮ ಮೊದಲ ಕಾರ್ಯ CSV ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ ಓದಲು ಸಾಧ್ಯವಾಗುವಂತೆ ಮಾಡುವುದು. pandas ಗ್ರಂಥಾಲಯದಲ್ಲಿ ವೇಗವಾದ CSV ಲೋಡರ್ ಇದೆ, ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಡೇಟಾಫ್ರೇಮ್‌ನಲ್ಲಿ ಇಡಲಾಗುತ್ತದೆ, ಹಿಂದಿನ ಪಾಠಗಳಂತೆ. ನಾವು ಲೋಡ್ ಮಾಡುತ್ತಿರುವ CSV ನಲ್ಲಿ ಅರ್ಧ ಮಿಲಿಯನ್‌ಕ್ಕಿಂತ ಹೆಚ್ಚು ಸಾಲುಗಳಿವೆ, ಆದರೆ ಕೇವಲ 17 ಕಾಲಮ್‌ಗಳಿವೆ. pandas ನಿಮಗೆ ಡೇಟಾಫ್ರೇಮ್‌ನೊಂದಿಗೆ ಸಂವಹನ ಮಾಡಲು ಬಹಳ ಶಕ್ತಿಶಾಲಿ ವಿಧಾನಗಳನ್ನು ನೀಡುತ್ತದೆ, ಪ್ರತಿಯೊಂದು ಸಾಲಿನ ಮೇಲೆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಡಲು ಸಹ. + +ಈ ಪಾಠದಿಂದ ಮುಂದುವರಿದಂತೆ, ಕೆಲವು ಕೋಡ್ ತುಣುಕುಗಳು ಮತ್ತು ಕೋಡ್ ವಿವರಣೆಗಳು ಮತ್ತು ಫಲಿತಾಂಶಗಳ ಅರ್ಥದ ಬಗ್ಗೆ ಚರ್ಚೆಗಳು ಇರುತ್ತವೆ. ನಿಮ್ಮ ಕೋಡ್‌ಗೆ ಸೇರಿಸಿರುವ _notebook.ipynb_ ಅನ್ನು ಬಳಸಿ. + +ನೀವು ಬಳಸಲಿರುವ ಡೇಟಾ ಫೈಲ್ ಅನ್ನು ಲೋಡ್ ಮಾಡುವುದರಿಂದ ಪ್ರಾರಂಭಿಸೋಣ: + +```python +# CSV ನಿಂದ ಹೋಟೆಲ್ ವಿಮರ್ಶೆಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ +import pandas as pd +import time +# ಫೈಲ್ ಲೋಡ್ ಸಮಯವನ್ನು ಲೆಕ್ಕಿಸಲು ಪ್ರಾರಂಭ ಮತ್ತು ಅಂತ್ಯದ ಸಮಯವನ್ನು ಬಳಸಲು ಸಮಯವನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df ಎಂದರೆ 'ಡೇಟಾಫ್ರೇಮ್' - ನೀವು ಫೈಲ್ ಅನ್ನು ಡೇಟಾ ಫೋಲ್ಡರ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ್ದೀರಾ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +ಡೇಟಾ ಲೋಡ್ ಆದ ನಂತರ, ನಾವು ಅದರಲ್ಲಿ ಕೆಲವು ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಡಬಹುದು. ಮುಂದಿನ ಭಾಗಕ್ಕಾಗಿ ಈ ಕೋಡ್ ಅನ್ನು ನಿಮ್ಮ ಪ್ರೋಗ್ರಾಂನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಇಡಿ. + +## ಡೇಟಾ ಅನ್ವೇಷಣೆ + +ಈ ಪ್ರಕರಣದಲ್ಲಿ, ಡೇಟಾ ಈಗಾಗಲೇ *ಶುದ್ಧ* ಆಗಿದೆ, ಅಂದರೆ ಅದು ಕೆಲಸ ಮಾಡಲು ಸಿದ್ಧವಾಗಿದೆ, ಮತ್ತು ಅಲಂಕೃತ ಭಾಷೆಗಳ ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿಲ್ಲ, ಇದು ಆಲ್ಗೋರಿದಮ್‌ಗಳಿಗೆ ತೊಂದರೆ ಉಂಟುಮಾಡಬಹುದು, ಅವು ಕೇವಲ ಇಂಗ್ಲಿಷ್ ಅಕ್ಷರಗಳನ್ನು ನಿರೀಕ್ಷಿಸುತ್ತವೆ. + +✅ ನೀವು ಕೆಲವೊಮ್ಮೆ NLP ತಂತ್ರಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು ಸ್ವರೂಪಗೊಳಿಸುವ ಪ್ರಾಥಮಿಕ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಅಗತ್ಯವಿರುವ ಡೇಟಾ ಜೊತೆ ಕೆಲಸ ಮಾಡಬೇಕಾಗಬಹುದು, ಆದರೆ ಈ ಬಾರಿ ಅಲ್ಲ. ನೀವು ಮಾಡಬೇಕಾದರೆ, ನೀವು ಇಂಗ್ಲಿಷ್ ಅಲ್ಲದ ಅಕ್ಷರಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತೀರಿ? + +ಡೇಟಾ ಲೋಡ್ ಆದ ನಂತರ, ನೀವು ಕೋಡ್ ಮೂಲಕ ಅದನ್ನು ಅನ್ವೇಷಿಸಬಹುದೆಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ನೀವು ಬಹುಶಃ `Negative_Review` ಮತ್ತು `Positive_Review` ಕಾಲಮ್‌ಗಳ ಮೇಲೆ ಗಮನಹರಿಸಲು ಇಚ್ಛಿಸುವಿರಿ. ಅವು ನಿಮ್ಮ NLP ಆಲ್ಗೋರಿದಮ್‌ಗಳಿಗೆ ಪ್ರಕ್ರಿಯೆ ಮಾಡಲು ನೈಸರ್ಗಿಕ ಪಠ್ಯದಿಂದ ತುಂಬಿವೆ. ಆದರೆ ಕಾಯಿರಿ! NLP ಮತ್ತು ಭಾವನೆಯಲ್ಲಿ ಮುಳುಗುವ ಮೊದಲು, ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಅನುಸರಿಸಿ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ನೀಡಲಾದ ಮೌಲ್ಯಗಳು pandas ಬಳಸಿ ಲೆಕ್ಕಹಾಕಿದ ಮೌಲ್ಯಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತವೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. + +## ಡೇಟಾಫ್ರೇಮ್ ಕಾರ್ಯಾಚರಣೆಗಳು + +ಈ ಪಾಠದ ಮೊದಲ ಕಾರ್ಯ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಪರಿಶೀಲಿಸುವ ಕೋಡ್ ಬರೆಯುವುದು (ಬದಲಾವಣೆ ಮಾಡದೆ) ಕೆಳಗಿನ ದೃಢೀಕರಣಗಳು ಸರಿಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವುದು. + +> ಅನೇಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಕಾರ್ಯಗಳಂತೆ, ಇದನ್ನು ಪೂರ್ಣಗೊಳಿಸುವ ಹಲವು ಮಾರ್ಗಗಳಿವೆ, ಆದರೆ ಉತ್ತಮ ಸಲಹೆ ಎಂದರೆ ಸರಳ, ಸುಲಭವಾದ ಮಾರ್ಗವನ್ನು ಆರಿಸುವುದು, ವಿಶೇಷವಾಗಿ ನೀವು ಭವಿಷ್ಯದಲ್ಲಿ ಈ ಕೋಡ್‌ಗೆ ಮರಳುವಾಗ ಅದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸುಲಭವಾಗಿರುತ್ತದೆ. ಡೇಟಾಫ್ರೇಮ್‌ಗಳೊಂದಿಗೆ, ನೀವು ಬಯಸುವ ಕಾರ್ಯವನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮಾಡಲು ಸಾಮಾನ್ಯವಾಗಿ ಮಾರ್ಗವಿರುವ ಸಮಗ್ರ API ಇದೆ. + +ಕೆಳಗಿನ ಪ್ರಶ್ನೆಗಳನ್ನು ಕೋಡಿಂಗ್ ಕಾರ್ಯಗಳಾಗಿ ಪರಿಗಣಿಸಿ ಮತ್ತು ಪರಿಹಾರವನ್ನು ನೋಡದೆ ಉತ್ತರಿಸಲು ಪ್ರಯತ್ನಿಸಿ. + +1. ನೀವು appena ಲೋಡ್ ಮಾಡಿದ ಡೇಟಾಫ್ರೇಮ್‌ನ *ಆಕಾರ* ಅನ್ನು ಮುದ್ರಿಸಿ (ಆಕಾರ ಎಂದರೆ ಸಾಲುಗಳ ಮತ್ತು ಕಾಲಮ್‌ಗಳ ಸಂಖ್ಯೆ) +2. ವಿಮರ್ಶಕರ ರಾಷ್ಟ್ರೀಯತೆಗಳ ಆವರ್ತನೆ ಎಣಿಕೆ ಲೆಕ್ಕಹಾಕಿ: + 1. `Reviewer_Nationality` ಕಾಲಮ್‌ಗೆ ಎಷ್ಟು ವಿಭಿನ್ನ ಮೌಲ್ಯಗಳಿವೆ ಮತ್ತು ಅವು ಯಾವುವು? + 2. ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಯಾವ ವಿಮರ್ಶಕರ ರಾಷ್ಟ್ರೀಯತೆ ಅತ್ಯಂತ ಸಾಮಾನ್ಯವಾಗಿದೆ (ದೇಶ ಮತ್ತು ವಿಮರ್ಶೆಗಳ ಸಂಖ್ಯೆ ಮುದ್ರಿಸಿ)? + 3. ಮುಂದಿನ ಟಾಪ್ 10 ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ರಾಷ್ಟ್ರೀಯತೆಗಳು ಮತ್ತು ಅವುಗಳ ಆವರ್ತನೆ ಎಣಿಕೆ ಯಾವುವು? +3. ಟಾಪ್ 10 ವಿಮರ್ಶಕರ ರಾಷ್ಟ್ರೀಯತೆಗಳಿಗೆ ಪ್ರತಿ ದೇಶದ ಅತ್ಯಂತ ವಿಮರ್ಶಿಸಲಾದ ಹೋಟೆಲ್ ಯಾವುದು? +4. ಪ್ರತಿ ಹೋಟೆಲ್‌ಗೆ ಎಷ್ಟು ವಿಮರ್ಶೆಗಳಿವೆ (ಹೋಟೆಲ್ ಆವರ್ತನೆ ಎಣಿಕೆ) ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ? +5. ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಪ್ರತಿ ಹೋಟೆಲ್‌ಗೆ `Average_Score` ಕಾಲಮ್ ಇದ್ದರೂ, ನೀವು ಪ್ರತಿ ಹೋಟೆಲ್‌ಗೆ ಎಲ್ಲಾ ವಿಮರ್ಶಕರ ಅಂಕಗಳ ಸರಾಸರಿಯನ್ನು ಲೆಕ್ಕಹಾಕಬಹುದು. ನಿಮ್ಮ ಡೇಟಾಫ್ರೇಮ್‌ಗೆ `Calc_Average_Score` ಎಂಬ ಹೊಸ ಕಾಲಮ್ ಸೇರಿಸಿ, ಅದು ಲೆಕ್ಕಹಾಕಿದ ಸರಾಸರಿಯನ್ನು ಹೊಂದಿರಲಿ. +6. ಯಾವುದೇ ಹೋಟೆಲ್‌ಗಳಿಗೆ (1 ದಶಮಾಂಶ ಸ್ಥಾನಕ್ಕೆ ರೌಂಡ್ ಮಾಡಿದ) `Average_Score` ಮತ್ತು `Calc_Average_Score` ಒಂದೇ ಇದ್ದವೆಯೇ? + 1. ಒಂದು Python ಫಂಕ್ಷನ್ ಬರೆಯಲು ಪ್ರಯತ್ನಿಸಿ, ಅದು Series (ಸಾಲು) ಅನ್ನು ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಮೌಲ್ಯಗಳನ್ನು ಹೋಲಿಸಿ, ಮೌಲ್ಯಗಳು ಸಮಾನವಾಗದಿದ್ದಾಗ ಸಂದೇಶವನ್ನು ಮುದ್ರಿಸುತ್ತದೆ. ನಂತರ `.apply()` ವಿಧಾನವನ್ನು ಬಳಸಿ ಪ್ರತಿಯೊಂದು ಸಾಲಿನನ್ನೂ ಪ್ರಕ್ರಿಯೆ ಮಾಡಿ. +7. `Negative_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Negative" ಮೌಲ್ಯ ಇರುವ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಿಸಿ ಮತ್ತು ಮುದ್ರಿಸಿ +8. `Positive_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Positive" ಮೌಲ್ಯ ಇರುವ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಿಸಿ ಮತ್ತು ಮುದ್ರಿಸಿ +9. `Positive_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Positive" ಮತ್ತು `Negative_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Negative" ಮೌಲ್ಯಗಳಿರುವ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಿಸಿ ಮತ್ತು ಮುದ್ರಿಸಿ +### ಕೋಡ್ ಉತ್ತರಗಳು + +1. ನೀವು appena ಲೋಡ್ ಮಾಡಿದ ಡೇಟಾಫ್ರೇಮ್‌ನ *ಆಕಾರ* ಅನ್ನು ಮುದ್ರಿಸಿ (ಆಕಾರ ಎಂದರೆ ಸಾಲುಗಳ ಮತ್ತು ಕಾಲಮ್‌ಗಳ ಸಂಖ್ಯೆ) + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. ವಿಮರ್ಶಕರ ರಾಷ್ಟ್ರೀಯತೆಗಳ ಆವರ್ತನೆ ಎಣಿಕೆ ಲೆಕ್ಕಹಾಕಿ: + + 1. `Reviewer_Nationality` ಕಾಲಮ್‌ಗೆ ಎಷ್ಟು ವಿಭಿನ್ನ ಮೌಲ್ಯಗಳಿವೆ ಮತ್ತು ಅವು ಯಾವುವು? + 2. ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಯಾವ ವಿಮರ್ಶಕರ ರಾಷ್ಟ್ರೀಯತೆ ಅತ್ಯಂತ ಸಾಮಾನ್ಯವಾಗಿದೆ (ದೇಶ ಮತ್ತು ವಿಮರ್ಶೆಗಳ ಸಂಖ್ಯೆ ಮುದ್ರಿಸಿ)? + + ```python + # value_counts() ಒಂದು ಸೀರೀಸ್ ವಸ್ತುವನ್ನು ರಚಿಸುತ್ತದೆ, ಇದರಲ್ಲಿ ಸೂಚ್ಯಂಕ ಮತ್ತು ಮೌಲ್ಯಗಳಿವೆ, ಈ ಪ್ರಕರಣದಲ್ಲಿ, ದೇಶ ಮತ್ತು ವಿಮರ್ಶಕ ರಾಷ್ಟ್ರೀಯತೆಯಲ್ಲಿ ಅವುಗಳ ಸಂಭವನೀಯತೆ + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # ಸೀರೀಸ್‌ನ ಮೊದಲ ಮತ್ತು ಕೊನೆಯ ಸಾಲುಗಳನ್ನು ಮುದ್ರಿಸಿ. ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಮುದ್ರಿಸಲು nationality_freq.to_string() ಗೆ ಬದಲಾಯಿಸಿ + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. ಮುಂದಿನ ಟಾಪ್ 10 ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ರಾಷ್ಟ್ರೀಯತೆಗಳು ಮತ್ತು ಅವುಗಳ ಆವರ್ತನೆ ಎಣಿಕೆ ಯಾವುವು? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # ಮೌಲ್ಯಗಳಲ್ಲಿ ಮುಂಚಿತ ಖಾಲಿ ಜಾಗವಿದೆ, ಮುದ್ರಣಕ್ಕಾಗಿ ಅದನ್ನು strip() ತೆಗೆದುಹಾಕುತ್ತದೆ + # ಅತಿ ಸಾಮಾನ್ಯ 10 ರಾಷ್ಟ್ರೀಯತೆಗಳು ಮತ್ತು ಅವುಗಳ ಆವರ್ತನೆಗಳು ಯಾವುವು? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. ಟಾಪ್ 10 ವಿಮರ್ಶಕರ ರಾಷ್ಟ್ರೀಯತೆಗಳಿಗೆ ಪ್ರತಿ ದೇಶದ ಅತ್ಯಂತ ವಿಮರ್ಶಿಸಲಾದ ಹೋಟೆಲ್ ಯಾವುದು? + + ```python + # ಟಾಪ್ 10 ರಾಷ್ಟ್ರೀಯತೆಗಳಿಗೆ ಅತ್ಯಂತ ಹೆಚ್ಚು ವಿಮರ್ಶಿಸಲಾದ ಹೋಟೆಲ್ ಯಾವುದು + # ಸಾಮಾನ್ಯವಾಗಿ pandas ನಲ್ಲಿ ನೀವು ಸ್ಪಷ್ಟ ಲೂಪ್ ಅನ್ನು ತಪ್ಪಿಸುವಿರಿ, ಆದರೆ ಮಾನದಂಡಗಳನ್ನು ಬಳಸಿ ಹೊಸ ಡೇಟಾಫ್ರೇಮ್ ರಚಿಸುವುದನ್ನು ತೋರಿಸಲು ಬಯಸಿದೆ (ಬಹಳ ದೊಡ್ಡ ಡೇಟಾ ಪ್ರಮಾಣದೊಂದಿಗೆ ಇದನ್ನು ಮಾಡಬೇಡಿ ಏಕೆಂದರೆ ಇದು ತುಂಬಾ ನಿಧಾನವಾಗಬಹುದು) + for nat in nationality_freq[:10].index: + # ಮೊದಲು, ಮಾನದಂಡಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗುವ ಎಲ್ಲಾ ಸಾಲುಗಳನ್ನು ಹೊಸ ಡೇಟಾಫ್ರೇಮ್‌ಗೆ ಹೊರತೆಗೆಯಿರಿ + nat_df = df[df["Reviewer_Nationality"] == nat] + # ಈಗ ಹೋಟೆಲ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಪಡೆಯಿರಿ + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. ಪ್ರತಿ ಹೋಟೆಲ್‌ಗೆ ಎಷ್ಟು ವಿಮರ್ಶೆಗಳಿವೆ (ಹೋಟೆಲ್ ಆವರ್ತನೆ ಎಣಿಕೆ) ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ? + + ```python + # ಹಳೆಯದನ್ನು ಆಧರಿಸಿ ಹೊಸ ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ಮೊದಲಿಗೆ ರಚಿಸಿ, ಅಗತ್ಯವಿಲ್ಲದ ಕಾಲಮ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # ಸಾಲುಗಳನ್ನು Hotel_Name ಮೂಲಕ ಗುಂಪು ಮಾಡಿ, ಅವುಗಳನ್ನು ಎಣಿಸಿ ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಹೊಸ ಕಾಲಮ್ Total_Reviews_Found ನಲ್ಲಿ ಇಡಿ + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # ಎಲ್ಲಾ ನಕಲಿ ಸಾಲುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + ನೀವು ಗಮನಿಸಬಹುದು ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಎಣಿಸಿದ ಫಲಿತಾಂಶಗಳು `Total_Number_of_Reviews` ಮೌಲ್ಯಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ. ಈ ಮೌಲ್ಯವು ಹೋಟೆಲ್‌ಗೆ ಒಟ್ಟು ವಿಮರ್ಶೆಗಳ ಸಂಖ್ಯೆ ಸೂಚಿಸುತ್ತಿದೆಯೇ ಅಥವಾ ಎಲ್ಲಾ ವಿಮರ್ಶೆಗಳು ಸ್ಕ್ರೇಪ್ ಆಗಿಲ್ಲವೇ ಅಥವಾ ಬೇರೆ ಲೆಕ್ಕಾಚಾರವೇ ಎಂಬುದು ಸ್ಪಷ್ಟವಿಲ್ಲ. ಈ ಅಸ್ಪಷ್ಟತೆಯ ಕಾರಣದಿಂದ `Total_Number_of_Reviews` ಅನ್ನು ಮಾದರಿಯಲ್ಲಿ ಬಳಸಲಾಗುವುದಿಲ್ಲ. + +5. ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ಪ್ರತಿ ಹೋಟೆಲ್‌ಗೆ `Average_Score` ಕಾಲಮ್ ಇದ್ದರೂ, ನೀವು ಪ್ರತಿ ಹೋಟೆಲ್‌ಗೆ ಎಲ್ಲಾ ವಿಮರ್ಶಕರ ಅಂಕಗಳ ಸರಾಸರಿಯನ್ನು ಲೆಕ್ಕಹಾಕಬಹುದು. ನಿಮ್ಮ ಡೇಟಾಫ್ರೇಮ್‌ಗೆ `Calc_Average_Score` ಎಂಬ ಹೊಸ ಕಾಲಮ್ ಸೇರಿಸಿ, ಅದು ಲೆಕ್ಕಹಾಕಿದ ಸರಾಸರಿಯನ್ನು ಹೊಂದಿರಲಿ. `Hotel_Name`, `Average_Score`, ಮತ್ತು `Calc_Average_Score` ಕಾಲಮ್‌ಗಳನ್ನು ಮುದ್ರಿಸಿ. + + ```python + # ಒಂದು ಸಾಲನ್ನು ತೆಗೆದುಕೊಂಡು ಅದರಲ್ಲಿ ಕೆಲವು ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಮಾಡುವ ಫಂಕ್ಷನ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' ಎಂದರೆ ಗಣಿತೀಯ ಪದ 'ಸರಾಸರಿ' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # ಎರಡು ಸರಾಸರಿ ಅಂಕಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಹೊಂದಿರುವ ಹೊಸ ಕಾಲಮ್ ಅನ್ನು ಸೇರಿಸಿ + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Hotel_Name ನ ಎಲ್ಲಾ ನಕಲುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ df ರಚಿಸಿ (ಹೀಗಾಗಿ ಪ್ರತಿ ಹೋಟೆಲಿಗೆ ಕೇವಲ 1 ಸಾಲು ಮಾತ್ರ) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # ಕಡಿಮೆ ಮತ್ತು ಹೆಚ್ಚು ಸರಾಸರಿ ಅಂಕ ವ್ಯತ್ಯಾಸವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಡೇಟಾಫ್ರೇಮ್ ಅನ್ನು ವಿಂಗಡಿಸಿ + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + ನೀವು `Average_Score` ಮೌಲ್ಯ ಮತ್ತು ಲೆಕ್ಕಹಾಕಿದ ಸರಾಸರಿ ಅಂಕಗಳ ನಡುವೆ ಕೆಲವೊಮ್ಮೆ ವ್ಯತ್ಯಾಸ ಏಕೆ ಇದೆ ಎಂದು ಆಶ್ಚರ್ಯಪಡಬಹುದು. ಕೆಲವು ಮೌಲ್ಯಗಳು ಹೊಂದಿಕೆಯಾಗುತ್ತವೆ, ಆದರೆ ಇತರವು ವ್ಯತ್ಯಾಸ ಹೊಂದಿರುವುದಕ್ಕೆ ಕಾರಣ ತಿಳಿಯದಿದ್ದರೂ, ಈ ಸಂದರ್ಭದಲ್ಲಿ ನಾವು ಹೊಂದಿರುವ ವಿಮರ್ಶಾ ಅಂಕಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸರಾಸರಿಯನ್ನು ಸ್ವತಃ ಲೆಕ್ಕಹಾಕುವುದು ಸುರಕ್ಷಿತ. ವ್ಯತ್ಯಾಸಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಬಹಳ ಸಣ್ಣವಾಗಿವೆ, ಇಲ್ಲಿ ಡೇಟಾಸೆಟ್ ಸರಾಸರಿ ಮತ್ತು ಲೆಕ್ಕಹಾಕಿದ ಸರಾಸರಿಯಿಂದ ಅತ್ಯಂತ ವ್ಯತ್ಯಾಸ ಹೊಂದಿರುವ ಹೋಟೆಲ್‌ಗಳಿವೆ: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + 1 ಕ್ಕಿಂತ ಹೆಚ್ಚು ವ್ಯತ್ಯಾಸ ಹೊಂದಿರುವ ಹೋಟೆಲ್ ಒಂದೇ ಇದ್ದುದರಿಂದ, ನಾವು ವ್ಯತ್ಯಾಸವನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ ಲೆಕ್ಕಹಾಕಿದ ಸರಾಸರಿ ಅಂಕವನ್ನು ಬಳಸಬಹುದು ಎಂದು ಅರ್ಥ. + +6. `Negative_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Negative" ಮೌಲ್ಯ ಇರುವ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಿಸಿ ಮತ್ತು ಮುದ್ರಿಸಿ + +7. `Positive_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Positive" ಮೌಲ್ಯ ಇರುವ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಿಸಿ ಮತ್ತು ಮುದ್ರಿಸಿ + +8. `Positive_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Positive" ಮತ್ತು `Negative_Review` ಕಾಲಮ್‌ನಲ್ಲಿ "No Negative" ಮೌಲ್ಯಗಳಿರುವ ಸಾಲುಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಿಸಿ ಮತ್ತು ಮುದ್ರಿಸಿ + + ```python + # ಲ್ಯಾಂಬ್ಡಾಗಳೊಂದಿಗೆ: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## ಇನ್ನೊಂದು ವಿಧಾನ + +Lambda ಗಳನ್ನು ಬಳಸದೆ ಐಟಂಗಳನ್ನು ಎಣಿಸುವ ಮತ್ತೊಂದು ವಿಧಾನ, ಮತ್ತು ಸಾಲುಗಳನ್ನು ಎಣಿಸಲು sum ಬಳಸಿ: + + ```python + # ಲ್ಯಾಂಬ್ಡಾಗಳಿಲ್ಲದೆ (ನೀವು ಎರಡನ್ನೂ ಬಳಸಬಹುದು ಎಂದು ತೋರಿಸಲು ನೋಟೇಶನ್‌ಗಳ ಮಿಶ್ರಣವನ್ನು ಬಳಸಿಕೊಂಡು) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + ನೀವು ಗಮನಿಸಿದ್ದೀರಾ, 127 ಸಾಲುಗಳಲ್ಲಿ `Negative_Review` ಮತ್ತು `Positive_Review` ಕಾಲಮ್‌ಗಳಲ್ಲಿ ಕ್ರಮವಾಗಿ "No Negative" ಮತ್ತು "No Positive" ಮೌಲ್ಯಗಳಿವೆ. ಅಂದರೆ ವಿಮರ್ಶಕರು ಹೋಟೆಲ್‌ಗೆ ಸಂಖ್ಯಾತ್ಮಕ ಅಂಕ ನೀಡಿದರೂ, ಧನಾತ್ಮಕ ಅಥವಾ ನಕಾರಾತ್ಮಕ ವಿಮರ್ಶೆ ಬರೆಯಲು ನಿರಾಕರಿಸಿದ್ದಾರೆ. ಅದೃಷ್ಟವಶಾತ್, ಇದು ಸಣ್ಣ ಪ್ರಮಾಣದ ಸಾಲುಗಳು (127 ರಲ್ಲಿ 515738, ಅಥವಾ 0.02%), ಆದ್ದರಿಂದ ಇದು ನಮ್ಮ ಮಾದರಿ ಅಥವಾ ಫಲಿತಾಂಶಗಳನ್ನು ಯಾವುದೇ ವಿಶೇಷ ದಿಕ್ಕಿನಲ್ಲಿ ಬದಲಿಸುವುದಿಲ್ಲ, ಆದರೆ ವಿಮರ್ಶೆಗಳ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ವಿಮರ್ಶೆಗಳಿಲ್ಲದ ಸಾಲುಗಳಿರುವುದು ಅಚ್ಚರಿಯ ಸಂಗತಿ, ಆದ್ದರಿಂದ ಇಂತಹ ಸಾಲುಗಳನ್ನು ಅನ್ವೇಷಿಸುವುದು ಮುಖ್ಯ. + +ನೀವು ಡೇಟಾಸೆಟ್ ಅನ್ನು ಅನ್ವೇಷಿಸಿದ ನಂತರ, ಮುಂದಿನ ಪಾಠದಲ್ಲಿ ನೀವು ಡೇಟಾವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಿ ಮತ್ತು ಕೆಲವು ಭಾವನಾತ್ಮಕ ವಿಶ್ಲೇಷಣೆ ಸೇರಿಸುವಿರಿ. + +--- +## 🚀ಸವಾಲು + +ಈ ಪಾಠವು, ಹಿಂದಿನ ಪಾಠಗಳಲ್ಲಿ ನೋಡಿದಂತೆ, ನಿಮ್ಮ ಡೇಟಾ ಮತ್ತು ಅದರ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕಾರ್ಯಾಚರಣೆ ಮಾಡುವ ಮೊದಲು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಎಷ್ಟು ಮಹತ್ವದದ್ದು ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ. ಪಠ್ಯ ಆಧಾರಿತ ಡೇಟಾ ವಿಶೇಷವಾಗಿ ಜಾಗರೂಕ ಪರಿಶೀಲನೆಗೆ ಒಳಪಡುತ್ತದೆ. ವಿವಿಧ ಪಠ್ಯಭರಿತ ಡೇಟಾಸೆಟ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ, ಮಾದರಿಯಲ್ಲಿ ಬಯಾಸ್ ಅಥವಾ ಭಾವನಾತ್ಮಕ ತಿರುವುಗಳನ್ನು ಪರಿಚಯಿಸಬಹುದಾದ ಪ್ರದೇಶಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ. + +## [ಪಾಠದ ನಂತರದ ಪ್ರಶ್ನೋತ್ತರ](https://ff-quizzes.netlify.app/en/ml/) + +## ವಿಮರ್ಶೆ ಮತ್ತು ಸ್ವಯಂ ಅಧ್ಯಯನ + +[ಈ NLP ಅಧ್ಯಯನ ಮಾರ್ಗವನ್ನು](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) ತೆಗೆದುಕೊಳ್ಳಿ, ಭಾಷಣ ಮತ್ತು ಪಠ್ಯಭರಿತ ಮಾದರಿಗಳನ್ನು ನಿರ್ಮಿಸುವಾಗ ಪ್ರಯತ್ನಿಸಲು ಉಪಕರಣಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ. + +## ನಿಯೋಜನೆ + +[NLTK](assignment.md) + +--- + + +**ಅಸ್ವೀಕಾರ**: +ಈ ದಸ್ತಾವೇಜು [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/kn/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..420c74536 --- /dev/null +++ b/translations/kn/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,21 @@ + +# NLTK + +## ಸೂಚನೆಗಳು + +NLTK ಗಣನೀಯ ಭಾಷಾಶಾಸ್ತ್ರ ಮತ್ತು NLP ನಲ್ಲಿ ಬಳಸಲು ಪ್ರಸಿದ್ಧ ಗ್ರಂಥಾಲಯವಾಗಿದೆ. '[NLTK ಪುಸ್ತಕ](https://www.nltk.org/book/)' ಅನ್ನು ಓದಿ ಅದರ ವ್ಯಾಯಾಮಗಳನ್ನು ಪ್ರಯತ್ನಿಸುವ ಅವಕಾಶವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ. ಈ ಅಗ್ರೇಡ್ ಮಾಡದ ಕಾರ್ಯದಲ್ಲಿ, ನೀವು ಈ ಗ್ರಂಥಾಲಯವನ್ನು ಹೆಚ್ಚು ಆಳವಾಗಿ ತಿಳಿದುಕೊಳ್ಳುವಿರಿ. + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file diff --git a/translations/kn/6-NLP/4-Hotel-Reviews-1/notebook.ipynb b/translations/kn/6-NLP/4-Hotel-Reviews-1/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/kn/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/kn/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..1b344018b --- /dev/null +++ b/translations/kn/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,17 @@ + +ಇದು ತಾತ್ಕಾಲಿಕ ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಆಗಿದೆ + +--- + + +**ಅಸ್ವೀಕರಣ**: +ಈ ದಸ್ತಾವೇಜು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವಾದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯಿಗಾಗಿ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯಲ್ಲಿರುವ ಮೂಲ ದಸ್ತಾವೇಜನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಅಥವಾ ತಪ್ಪು ವಿವರಣೆಗಳಿಗೆ ನಾವು ಹೊಣೆಗಾರರಾಗುವುದಿಲ್ಲ. + \ No newline at end of file